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
@@ -13,8 +13,7 @@ import * as i6 from "@angular/material/select";
13
13
  import * as i7 from "@angular/material/core";
14
14
  import * as i8 from "../../../../shared/components/text-editor/text-editor.component";
15
15
  import * as i9 from "@angular/common";
16
- import * as i10 from "@angular/material/form-field";
17
- import * as i11 from "@angular/material/tooltip";
16
+ import * as i10 from "@angular/material/tooltip";
18
17
  export class AssessmentBuilderComponent {
19
18
  constructor(formBuilder, assessmentBuilderService, assessmentMakerService, dialogRef, dialogData) {
20
19
  this.formBuilder = formBuilder;
@@ -33,11 +32,13 @@ export class AssessmentBuilderComponent {
33
32
  this.isChild = false;
34
33
  // parentQuestion: AssessmentQuestion | null = null;
35
34
  this.assessmentId = 0;
35
+ this.standaloneMode = false;
36
+ this.isLocked = false;
36
37
  this.isSubmitting = false;
37
38
  this.skillsList = [];
38
39
  }
39
40
  ngOnInit() {
40
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
41
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
41
42
  this.labelConfig = (_a = this.dialogData) === null || _a === void 0 ? void 0 : _a.labelConfig;
42
43
  this.imageConfig = (_b = this.dialogData) === null || _b === void 0 ? void 0 : _b.imageConfig;
43
44
  this.rules = (_c = this.dialogData) === null || _c === void 0 ? void 0 : _c.rules;
@@ -46,8 +47,10 @@ export class AssessmentBuilderComponent {
46
47
  this.isChild = (_f = this.dialogData) === null || _f === void 0 ? void 0 : _f.isChild;
47
48
  this.skillsList = ((_g = this.dialogData) === null || _g === void 0 ? void 0 : _g.skillsList) || [];
48
49
  this.assessmentId = (_h = this.dialogData) === null || _h === void 0 ? void 0 : _h.assessmentId;
50
+ this.standaloneMode = ((_j = this.dialogData) === null || _j === void 0 ? void 0 : _j.standaloneMode) || false;
51
+ this.isLocked = ((_k = this.dialogData) === null || _k === void 0 ? void 0 : _k.isLocked) || false;
49
52
  if (this.dialogData.questionDetails) {
50
- this.questionDetails = deepClone((_j = this.dialogData) === null || _j === void 0 ? void 0 : _j.questionDetails);
53
+ this.questionDetails = deepClone((_l = this.dialogData) === null || _l === void 0 ? void 0 : _l.questionDetails);
51
54
  }
52
55
  this.setupFormGroup();
53
56
  this.applyDynamicValidators();
@@ -138,15 +141,22 @@ export class AssessmentBuilderComponent {
138
141
  }
139
142
  }
140
143
  onSubmit() {
141
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
144
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
142
145
  return __awaiter(this, void 0, void 0, function* () {
146
+ if (this.isLocked) {
147
+ (_b = (_a = this.dialogData) === null || _a === void 0 ? void 0 : _a.snackbarMessageEmitter) === null || _b === void 0 ? void 0 : _b.emit({
148
+ message: this.labelConfig['COMMONS_ASSESSMENT.WARNING.QUESTION_LOCKED'] || 'This question is part of a published assessment and cannot be edited.',
149
+ type: 'info'
150
+ });
151
+ return;
152
+ }
143
153
  if (this.questionsFormGroup.invalid) {
144
154
  this.questionsFormGroup.markAllAsTouched();
145
155
  return;
146
156
  }
147
- const totalMarks = Number((_a = this.questionsFormGroup.get('totalMarks')) === null || _a === void 0 ? void 0 : _a.value) || 0;
148
- const qType = (_b = this.questionsFormGroup.get('questionType')) === null || _b === void 0 ? void 0 : _b.value;
149
- const optionsValues = ((_c = this.questionsFormGroup.get('options')) === null || _c === void 0 ? void 0 : _c.value) || [];
157
+ const totalMarks = Number((_c = this.questionsFormGroup.get('totalMarks')) === null || _c === void 0 ? void 0 : _c.value) || 0;
158
+ const qType = (_d = this.questionsFormGroup.get('questionType')) === null || _d === void 0 ? void 0 : _d.value;
159
+ const optionsValues = ((_e = this.questionsFormGroup.get('options')) === null || _e === void 0 ? void 0 : _e.value) || [];
150
160
  const showWeightage = this.showField('options', 'showWeightage');
151
161
  if (showWeightage && totalMarks > 0) {
152
162
  let totalWeights = 0;
@@ -163,17 +173,17 @@ export class AssessmentBuilderComponent {
163
173
  }
164
174
  if (hasInvalidWeight) {
165
175
  // To keep within existing styles, emitting default error with our specific message
166
- (_e = (_d = this.dialogData) === null || _d === void 0 ? void 0 : _d.snackbarMessageEmitter) === null || _e === void 0 ? void 0 : _e.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.OPTION_SCORE_GREATER_THAN_TOTAL_MARKS'], type: 'error' });
176
+ (_g = (_f = this.dialogData) === null || _f === void 0 ? void 0 : _f.snackbarMessageEmitter) === null || _g === void 0 ? void 0 : _g.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.OPTION_SCORE_GREATER_THAN_TOTAL_MARKS'], type: 'error' });
167
177
  return;
168
178
  }
169
179
  if (qType === 'QUESTION_TYPE.MULTI_SELECT' && totalWeights > totalMarks) {
170
- (_g = (_f = this.dialogData) === null || _f === void 0 ? void 0 : _f.snackbarMessageEmitter) === null || _g === void 0 ? void 0 : _g.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.SUM_OF_OPTION_SCORES_GREATER_THAN_TOTAL_MARKS'], type: 'error' });
180
+ (_j = (_h = this.dialogData) === null || _h === void 0 ? void 0 : _h.snackbarMessageEmitter) === null || _j === void 0 ? void 0 : _j.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.SUM_OF_OPTION_SCORES_GREATER_THAN_TOTAL_MARKS'], type: 'error' });
171
181
  return;
172
182
  }
173
183
  }
174
184
  this.isSubmitting = true;
175
185
  const formValue = deepClone(this.questionsFormGroup.value);
176
- if (showWeightage && totalMarks > 0 && ((_h = formValue.options) === null || _h === void 0 ? void 0 : _h.length)) {
186
+ if (showWeightage && totalMarks > 0 && ((_k = formValue.options) === null || _k === void 0 ? void 0 : _k.length)) {
177
187
  formValue.options.forEach((opt) => {
178
188
  if (opt.weight !== undefined && opt.weight !== null) {
179
189
  opt.weight = parseFloat(((Number(opt.weight) / totalMarks) * 100).toFixed(2));
@@ -201,7 +211,7 @@ export class AssessmentBuilderComponent {
201
211
  catch (error) {
202
212
  this.isSubmitting = false;
203
213
  console.error(error);
204
- (_k = (_j = this.dialogData) === null || _j === void 0 ? void 0 : _j.snackbarMessageEmitter) === null || _k === void 0 ? void 0 : _k.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });
214
+ (_m = (_l = this.dialogData) === null || _l === void 0 ? void 0 : _l.snackbarMessageEmitter) === null || _m === void 0 ? void 0 : _m.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });
205
215
  throw { error, method: 'PATCH', payload };
206
216
  }
207
217
  }
@@ -210,14 +220,14 @@ export class AssessmentBuilderComponent {
210
220
  const payload = this.assessmentBuilderService.setQuestionDTO(formValue);
211
221
  try {
212
222
  const question = yield this.createQuestion(payload);
213
- (_m = (_l = state === null || state === void 0 ? void 0 : state.parentFormValue) === null || _l === void 0 ? void 0 : _l.childQuestions) === null || _m === void 0 ? void 0 : _m.push(question);
223
+ (_p = (_o = state === null || state === void 0 ? void 0 : state.parentFormValue) === null || _o === void 0 ? void 0 : _o.childQuestions) === null || _p === void 0 ? void 0 : _p.push(question);
214
224
  if (question === null || question === void 0 ? void 0 : question.id) {
215
225
  this.questionBank[question.id] = question;
216
226
  const grp = this.childQuestionGroups.find((g) => g.id === state.addingToGroupId);
217
227
  if (grp) {
218
- (_o = grp.questionIds) === null || _o === void 0 ? void 0 : _o.push(question === null || question === void 0 ? void 0 : question.id);
228
+ (_q = grp.questionIds) === null || _q === void 0 ? void 0 : _q.push(question === null || question === void 0 ? void 0 : question.id);
219
229
  if (grp.optionId) {
220
- const opt = (_q = (_p = state.parentFormValue) === null || _p === void 0 ? void 0 : _p.defaultOptionsList) === null || _q === void 0 ? void 0 : _q.find((o) => (o.id || o.uuid) == grp.optionId);
230
+ const opt = (_s = (_r = state.parentFormValue) === null || _r === void 0 ? void 0 : _r.defaultOptionsList) === null || _s === void 0 ? void 0 : _s.find((o) => (o.id || o.uuid) == grp.optionId);
221
231
  if (opt) {
222
232
  opt.childQuestionList = opt.childQuestionList || [];
223
233
  opt.childQuestionList.push(question.id);
@@ -237,7 +247,7 @@ export class AssessmentBuilderComponent {
237
247
  catch (error) {
238
248
  this.isSubmitting = false;
239
249
  console.error(error);
240
- (_s = (_r = this.dialogData) === null || _r === void 0 ? void 0 : _r.snackbarMessageEmitter) === null || _s === void 0 ? void 0 : _s.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });
250
+ (_u = (_t = this.dialogData) === null || _t === void 0 ? void 0 : _t.snackbarMessageEmitter) === null || _u === void 0 ? void 0 : _u.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });
241
251
  throw { error, method: 'POST', payload };
242
252
  }
243
253
  }
@@ -248,29 +258,62 @@ export class AssessmentBuilderComponent {
248
258
  else {
249
259
  let questionDTO = this.assessmentBuilderService.setQuestionDTO(formValue, this.questionDetails);
250
260
  // Update local template tree representation
251
- if ((_t = this.questionDetails) === null || _t === void 0 ? void 0 : _t.id) {
261
+ if ((_v = this.questionDetails) === null || _v === void 0 ? void 0 : _v.id) {
252
262
  try {
253
263
  questionDTO = yield this.updateQuestion(questionDTO);
254
264
  if (questionDTO === null || questionDTO === void 0 ? void 0 : questionDTO.id) {
255
265
  this.questionBank[questionDTO.id] = questionDTO;
256
266
  }
257
- (_v = (_u = this.dialogData) === null || _u === void 0 ? void 0 : _u.snackbarMessageEmitter) === null || _v === void 0 ? void 0 : _v.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_UPDATED_SUCCESS'], type: 'success' });
258
- this.dialogRef.close({ success: true });
267
+ (_x = (_w = this.dialogData) === null || _w === void 0 ? void 0 : _w.snackbarMessageEmitter) === null || _x === void 0 ? void 0 : _x.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_UPDATED_SUCCESS'], type: 'success' });
268
+ this.dialogRef.close({ success: true, question: questionDTO });
259
269
  this.isSubmitting = false;
260
270
  }
261
271
  catch (error) {
262
272
  this.isSubmitting = false;
263
273
  console.error(error);
264
- (_x = (_w = this.dialogData) === null || _w === void 0 ? void 0 : _w.snackbarMessageEmitter) === null || _x === void 0 ? void 0 : _x.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });
274
+ (_z = (_y = this.dialogData) === null || _y === void 0 ? void 0 : _y.snackbarMessageEmitter) === null || _z === void 0 ? void 0 : _z.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });
265
275
  throw { error, method: 'PATCH', payload: questionDTO };
266
276
  }
267
277
  }
278
+ else if (this.standaloneMode) {
279
+ this.createStandaloneQuestion(questionDTO);
280
+ }
268
281
  else {
269
282
  this.createOrEditAssessmentAndQuestionPaper(questionDTO);
270
283
  }
271
284
  }
272
285
  });
273
286
  }
287
+ createStandaloneQuestion(questionDTO) {
288
+ this.assessmentMakerService.createQuestion(questionDTO).subscribe({
289
+ next: (res) => {
290
+ var _a, _b;
291
+ this.isSubmitting = false;
292
+ if (res === null || res === void 0 ? void 0 : res.id) {
293
+ this.questionBank[res.id] = res;
294
+ }
295
+ (_b = (_a = this.dialogData) === null || _a === void 0 ? void 0 : _a.snackbarMessageEmitter) === null || _b === void 0 ? void 0 : _b.emit({
296
+ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_CREATED_SUCCESS'] || 'Question created successfully',
297
+ type: 'success'
298
+ });
299
+ this.dialogRef.close({
300
+ success: true,
301
+ question: res,
302
+ standaloneMode: true
303
+ });
304
+ },
305
+ error: (error) => {
306
+ var _a, _b;
307
+ this.isSubmitting = false;
308
+ console.error(error);
309
+ (_b = (_a = this.dialogData) === null || _a === void 0 ? void 0 : _a.snackbarMessageEmitter) === null || _b === void 0 ? void 0 : _b.emit({
310
+ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'],
311
+ type: 'error'
312
+ });
313
+ throw { error, method: 'POST', payload: questionDTO };
314
+ }
315
+ });
316
+ }
274
317
  createQuestion(payload) {
275
318
  return new Promise((resolve, reject) => {
276
319
  this.assessmentMakerService.createQuestion(payload).subscribe({
@@ -673,9 +716,21 @@ export class AssessmentBuilderComponent {
673
716
  }, 0);
674
717
  }
675
718
  }
719
+ trackByCode(index, item) {
720
+ return (item === null || item === void 0 ? void 0 : item.code) != null ? 'c' + item.code : 'i' + index;
721
+ }
722
+ trackByControl(index, control) {
723
+ return control;
724
+ }
725
+ trackByGroupId(index, group) {
726
+ return (group === null || group === void 0 ? void 0 : group.id) != null ? 'g' + group.id : 'i' + index;
727
+ }
728
+ trackByQuestionId(index, id) {
729
+ return id != null ? 'q' + id : 'i' + index;
730
+ }
676
731
  }
677
732
  AssessmentBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentBuilderComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AssessmentBuilderService }, { token: i3.AssessmentMakerService }, { token: i4.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
678
- AssessmentBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentBuilderComponent, selector: "lib-app-assessment-builder", viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex vh-100 position-relative overflow-hidden\">\r\n <div *ngIf=\"questionStack.length > 0 || isChild\"\r\n class=\"p-3 px-2 col-auto assessment-bg-palette-C8DAF9 flex-column align-items-center justify-content-end d-md-flex d-none\">\r\n <p class=\"m-0 assessment-text-semibold-18 vertical-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTION']}}\r\n </p>\r\n </div>\r\n <div class=\"flex-grow-1 h-100 d-flex flex-column position-relative\">\r\n <header\r\n class=\"p-3 d-flex align-items-center justify-content-between position-sticky top-0 col-12 border-bottom\">\r\n <p *ngIf=\"questionStack.length == 0\" class=\"mb-0 assessment-text-semibold-18 d-md-inline d-none\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.INPUT_FIELD_SETTINGS']}}\r\n </p>\r\n <button *ngIf=\"questionStack.length > 0\" (click)=\"goBack()\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-grey-ten border-0 outline-0 assessment-text-medium-14 bg-transparent\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.GO_BACK']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/go-back.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}\r\n </button>\r\n <div class=\"d-flex align-items-center justify-content-md-end justify-content-between gap-3 flex-grow-1\">\r\n <button (click)=\"onSubmit()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-btn-primary assessment-button-padding assessment-text-medium-13 assessment-zoom-animation assessment-button-padding position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SAVE_QUESTION']}}\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 <img class=\"d-md-none\" *ngIf=\"questionStack.length == 0\" mat-dialog-close\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n </header>\r\n <div #scrollContainer class=\"col-12 py-4 px-md-4 px-3 flex-grow-1 overflow-y-auto form-container\"\r\n [formGroup]=\"questionsFormGroup\">\r\n <div class=\"pb-4 col-12\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten col-12\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TYPE']}}</label>\r\n <mat-select formControlName=\"questionType\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_QUESTION_TYPE']\"\r\n class=\"assessment-mat-select col-12 assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let type of questionTypes\"\r\n [value]=\"type?.code\">\r\n {{type?.label}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionType')?.errors && questionsFormGroup.get('questionType')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"pb-4 col-12\">\r\n <label class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">Question</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('questionText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('questionText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionText')?.errors && questionsFormGroup.get('questionText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n <div class=\"col-12 position-relative mt-3\" *ngIf=\"showField('questionMedia')\">\r\n <input formControlName=\"questionMedia\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION_MEDIA']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionMedia')?.invalid && questionsFormGroup.get('questionMedia')?.touched}\">\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('pattern') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_URL']}}\r\n </mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('required') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('minCharacterCount') || showField('maxCharacterCount')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minCharacterCount')?.invalid && questionsFormGroup.get('minCharacterCount')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('required') && questionsFormGroup.get('minCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('min') && questionsFormGroup.get('minCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</mat-error>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxCharacterCount')?.invalid && questionsFormGroup.get('maxCharacterCount')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('required') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('min') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER']}}</mat-error>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('maxFileSize') || showField('maxNoOfFiles')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('maxFileSize')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_FILE_SIZE']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxFileSize\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxFileSize')?.markAsTouched()\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxFileSize')?.invalid && questionsFormGroup.get('maxFileSize')?.touched}\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MB']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('required') && questionsFormGroup.get('maxFileSize')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('min') && questionsFormGroup.get('maxFileSize')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</mat-error>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxNoOfFiles')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_NO_OF_FILES']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxNoOfFiles\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxNoOfFiles')?.markAsTouched()\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxNoOfFiles')?.invalid && questionsFormGroup.get('maxNoOfFiles')?.touched}\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.FILES']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('required') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('min') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</mat-error>\r\n </div>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('customRegex')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CUSTOM_REGEX']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"customRegex\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_CUSTOM_REGEX']\"\r\n (blur)=\"questionsFormGroup.get('customRegex')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('customRegex')?.errors && questionsFormGroup.get('customRegex')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('totalMarks') && !isChild && questionStack.length == 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_MARKS']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"totalMarks\" placeholder=\"0\" (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('totalMarks')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('totalMarks')?.errors && questionsFormGroup.get('totalMarks')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n\r\n <div class=\"row mx-0 col-12 pb-4\"\r\n *ngIf=\"showField('minimumNumberOfOption') || showField('maximumNumberOfOption')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minimumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minimumNumberOfOption\" placeholder=\"0\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minimumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minimumNumberOfOption')?.invalid && questionsFormGroup.get('minimumNumberOfOption')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('required') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('min') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</mat-error>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maximumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maximumNumberOfOption\" [placeholder]=\"options.length || 0\"\r\n (input)=\"allowOnlyNumbers($event); checkMaxOptionsVal($event, questionsFormGroup.get('maximumNumberOfOption'))\"\r\n (blur)=\"questionsFormGroup.get('maximumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maximumNumberOfOption')?.invalid && questionsFormGroup.get('maximumNumberOfOption')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('required') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('min') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</mat-error>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER'] || 'Max limit should be greater than min limit'}}</mat-error>\r\n </div>\r\n </div>\r\n\r\n <div class=\"pb-4 col-12 mt-md-3\" *ngIf=\"showField('options')\">\r\n <div formArrayName=\"options\">\r\n <ng-container *ngFor=\"let option of options.controls; let i = index\">\r\n <div [formGroupName]=\"i\" *ngIf=\"option.get('isActive')?.value !== false\"\r\n class=\"py-md-0 py-3 border-bottom border-md-0 col-12 d-flex flex-wrap flex-md-nowrap align-items-md-start align-items-center justify-content-between gap-md-4 gap-3\">\r\n\r\n <div class=\"col-12 col-md flex-md-grow-1 d-flex flex-column justify-content-center mt-md-3\"\r\n [class.pt-md-3]=\"i == 0\">\r\n <div class=\"col-12 d-flex align-items-center justify-content-between gap-3\">\r\n <div class=\"flex-grow-1 d-flex align-items-center gap-2\">\r\n <div class=\"rounded-circle p-2 border-grey-ten-2 mt-1\"></div>\r\n <input formControlName=\"optionLabel\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_OPTION']\"\r\n class=\"flex-grow-1 assessment-text-medium-13 border-0 outline-0 bg-transparent input-focus py-1\">\r\n </div>\r\n <img class=\"cursor-pointer d-md-none\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n <mat-error\r\n *ngIf=\"option.get('optionLabel')?.invalid && option.get('optionLabel')?.touched\"\r\n class=\"assessment-text-regular-12 mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showWeightage') && !isChild && questionStack.length == 0\"\r\n class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']}}\r\n </p>\r\n <input type=\"number\" (input)=\"checkMaxVal($event, option.get('weight'))\"\r\n formControlName=\"weight\" (wheel)=\"$event.preventDefault()\"\r\n class=\"p-2 py-md-1 assessment-border-radius-two assessment-input-border-one outline-0 assessment-text-regular-12 assessment-marks-input assessment-bg-grey-one\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']\">\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showRemarks') && !isChild && questionStack.length == 0\" class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3 pb-md-1\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}\r\n </p>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\"\r\n name=\"remarksRequired\" formControlName=\"remarksRequired\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-none d-md-block pt-3\" [class.custom-margin]=\"i == 0\">\r\n <img class=\"cursor-pointer\" [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <button type=\"button\" (click)=\"addOption()\"\r\n class=\"assessment-border-radius-two d-flex align-items-center gap-2 bg-transparent assessment-text-primary-one assessment-text-medium-12 border-0 assessment-zoom-animation mt-4\">\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_OPTION']}}\r\n </button>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('options')?.errors && questionsFormGroup.get('options')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\"\r\n *ngIf=\"showField('childQuestions') && questionStack.length == 0 && !isChild\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\r\n <label\r\n class=\"assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS']}}</label>\r\n <img matTooltip=\"{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS_INFO']}}\"\r\n matTooltipPosition=\"above\" matTooltipClass=\"assessment-tooltip\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\" />\r\n </div>\r\n\r\n <div *ngFor=\"let group of childQuestionGroups; let groupIndex = index\"\r\n class=\"col-12 p-3 my-3 assessment-bg-grey-one assessment-border-radius-three assessment-input-border-one\">\r\n <div class=\"col-12 mb-3\" *ngIf=\"options.length > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ASSIGNED_OPTION']}}</label>\r\n <mat-select [value]=\"group.optionId\"\r\n (selectionChange)=\"onGroupOptionChange(group.id, $event.value)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_OPTION_TO_LINK']\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two assessment-bg-white outline-0 assessment-input-border-one assessment-text-medium-13\">\r\n <mat-option class=\"assessment-text-medium-13\" [value]=\"null\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NONE']}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let opt of options.controls; let opIndex = index\">\r\n <mat-option *ngIf=\"opt.get('isActive')?.value !== false\"\r\n class=\"assessment-text-medium-13\" [value]=\"getOptionId(opt)\">\r\n {{ opt.get('optionLabel')?.value || ('Option ' + (opIndex + 1)) }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let questionId of group.questionIds; let i = index\">\r\n <ng-container *ngIf=\"getChildQuestionById(questionId) as child\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-1 mt-3\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <p class=\"mb-0 assessment-text-medium-14\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION']}} {{i + 1}}</p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"deleteChildQuestionById(child.id, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/delete.svg')\" />\r\n </div>\r\n </div>\r\n <div [innerHTML]=\"child?.questionText?.[0]?.text\"\r\n (click)=\"addEditChildQuestion(child, getChildQuestionIndex(child.id))\"\r\n class=\"col-12 assessment-button-padding assessment-border-radius-two assessment-bg-white assessment-input-border-one assessment-text-medium-12 cursor-pointer\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <button (click)=\"addEditChildQuestion(undefined, undefined, group.id)\"\r\n class=\"assessment-zoom-animation border-0 d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one bg-transparent assessment-text-semibold-12 outline-0 mt-3\">\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_MORE']}}\r\n </button>\r\n </div>\r\n\r\n <button (click)=\"addEditChildQuestion()\"\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 col-12 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_CHILD_QUESTION']}}\r\n </button>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\" *ngIf=\"showField('hintText')\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_HINT']}}</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('hintText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('hintText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_HINT']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('hintText')?.errors && questionsFormGroup.get('hintText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\">\r\n <label class=\"mb-2 assessment-text-semibold-18 assessment-text-grey-ten col-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FIELDS_SETTINGS']}}</label>\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isMandatory\"\r\n formControlName=\"isMandatory\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\"\r\n *ngIf=\"showField('isFilterEnabled')\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isFilterEnabled\"\r\n formControlName=\"isFilterEnabled\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\"\r\n *ngIf=\"showField('isFilterEnabled') && questionsFormGroup.get('isFilterEnabled')?.value\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION_NAME']}}</label>\r\n <input formControlName=\"questionSubText\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.QUESTION_NAME']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched}\">\r\n <mat-error\r\n *ngIf=\"questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</mat-error>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\" *ngIf=\"!isChild && questionStack.length == 0 && (skillsList?.length ?? 0) > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAP_SKILLS']}}</label>\r\n <mat-select formControlName=\"skillCodes\" multiple\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_SKILLS']\"\r\n panelClass=\"assessment-checkboxes\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let skill of skillsList\"\r\n [value]=\"skill?.code\">{{skill?.labels?.[0]?.text}}</mat-option>\r\n </mat-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", 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}.form-container{max-height:calc(100dvh - 4rem)}.border-grey-ten-2{border:.12rem solid var(--assessment-grey-ten)}.input-focus{overflow:hidden;text-overflow:ellipsis}.input-focus:focus-visible{border-bottom:var(--assessment-input-focus-border)!important}.assessment-marks-input{width:4rem}header{z-index:1}.vertical-text{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);white-space:nowrap}@media (min-width: 768px){.hidden-label{visibility:hidden;line-height:0!important}}@media screen and (min-width: 768px){.border-md-0{border:0!important}}.primary-border{border:.064rem solid var(--assessment-primary-one)}.form-check-input:checked{background-color:var(--assessment-primary-one)!important;border-color:var(--assessment-primary-one)!important}.custom-margin{margin-top:1.3rem}.border-ADC9F6{border:.064rem solid var(--assessment-palette-ADC9F6)}\n"], components: [{ type: i5.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i8.TextEditorComponent, selector: "app-text-editor", inputs: ["height", "placeholder", "preText", "disabled", "showToolbar"], outputs: ["inputChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { type: i1.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: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
733
+ AssessmentBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentBuilderComponent, selector: "lib-app-assessment-builder", viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex vh-100 position-relative overflow-hidden\">\r\n <div *ngIf=\"questionStack.length > 0 || isChild\"\r\n class=\"p-3 px-2 col-auto assessment-bg-palette-C8DAF9 flex-column align-items-center justify-content-end d-md-flex d-none\">\r\n <p class=\"m-0 assessment-text-semibold-18 vertical-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTION']}}\r\n </p>\r\n </div>\r\n <div class=\"flex-grow-1 h-100 d-flex flex-column position-relative\">\r\n <header\r\n class=\"p-3 d-flex align-items-center justify-content-between position-sticky top-0 col-12 border-bottom\">\r\n <p *ngIf=\"questionStack.length == 0\" class=\"mb-0 assessment-text-semibold-18 d-md-inline d-none\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.INPUT_FIELD_SETTINGS']}}\r\n </p>\r\n <button *ngIf=\"questionStack.length > 0\" (click)=\"goBack()\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-grey-ten border-0 outline-0 assessment-text-medium-14 bg-transparent\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.GO_BACK']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/go-back.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}\r\n </button>\r\n <div class=\"d-flex align-items-center justify-content-md-end justify-content-between gap-3 flex-grow-1\">\r\n <button (click)=\"onSubmit()\" [disabled]=\"isSubmitting || isLocked\"\r\n class=\"assessment-btn-primary assessment-button-padding assessment-text-medium-13 assessment-zoom-animation assessment-button-padding position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SAVE_QUESTION']}}\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 <img class=\"d-md-none\" *ngIf=\"questionStack.length == 0\" mat-dialog-close\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n </header>\r\n <div #scrollContainer class=\"col-12 py-4 px-md-4 px-3 flex-grow-1 overflow-y-auto form-container\"\r\n [formGroup]=\"questionsFormGroup\">\r\n <div class=\"pb-4 col-12\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten col-12\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TYPE']}}</label>\r\n <mat-select formControlName=\"questionType\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_QUESTION_TYPE']\"\r\n class=\"assessment-mat-select col-12 assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let type of questionTypes; trackBy: trackByCode\"\r\n [value]=\"type?.code\">\r\n {{type?.label}}\r\n </mat-option>\r\n </mat-select>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionType')?.errors && questionsFormGroup.get('questionType')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"pb-4 col-12\">\r\n <label class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">Question</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('questionText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('questionText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionText')?.errors && questionsFormGroup.get('questionText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div class=\"col-12 position-relative mt-3\" *ngIf=\"showField('questionMedia')\">\r\n <input formControlName=\"questionMedia\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION_MEDIA']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionMedia')?.invalid && questionsFormGroup.get('questionMedia')?.touched}\">\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('pattern') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_URL']}}\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('required') && questionsFormGroup.get('questionMedia')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('minCharacterCount') || showField('maxCharacterCount')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minCharacterCount')?.invalid && questionsFormGroup.get('minCharacterCount')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('required') && questionsFormGroup.get('minCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('min') && questionsFormGroup.get('minCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxCharacterCount')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_CHARACTER_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxCharacterCount\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxCharacterCount')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxCharacterCount')?.invalid && questionsFormGroup.get('maxCharacterCount')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('required') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('min') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maxCharacterCount')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER']}}</div>\r\n </div>\r\n </div>\r\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('maxFileSize') || showField('maxNoOfFiles')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('maxFileSize')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_FILE_SIZE']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxFileSize\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxFileSize')?.markAsTouched()\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxFileSize')?.invalid && questionsFormGroup.get('maxFileSize')?.touched}\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MB']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('required') && questionsFormGroup.get('maxFileSize')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('min') && questionsFormGroup.get('maxFileSize')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxNoOfFiles')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_NO_OF_FILES']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maxNoOfFiles\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('maxNoOfFiles')?.markAsTouched()\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxNoOfFiles')?.invalid && questionsFormGroup.get('maxNoOfFiles')?.touched}\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.FILES']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('required') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('min') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\r\n </div>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('customRegex')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CUSTOM_REGEX']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"customRegex\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_CUSTOM_REGEX']\"\r\n (blur)=\"questionsFormGroup.get('customRegex')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('customRegex')?.errors && questionsFormGroup.get('customRegex')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"pb-4 col-12\" *ngIf=\"showField('totalMarks') && !isChild && questionStack.length == 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_MARKS']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"totalMarks\" placeholder=\"0\" (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('totalMarks')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('totalMarks')?.errors && questionsFormGroup.get('totalMarks')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n\r\n <div class=\"row mx-0 col-12 pb-4\"\r\n *ngIf=\"showField('minimumNumberOfOption') || showField('maximumNumberOfOption')\">\r\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minimumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"minimumNumberOfOption\" placeholder=\"0\"\r\n (input)=\"allowOnlyNumbers($event)\"\r\n (blur)=\"questionsFormGroup.get('minimumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minimumNumberOfOption')?.invalid && questionsFormGroup.get('minimumNumberOfOption')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('required') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('min') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</div>\r\n </div>\r\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maximumNumberOfOption')\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_OPTION_SELECT_LIMIT']}}</label>\r\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\r\n <input formControlName=\"maximumNumberOfOption\" [placeholder]=\"options.length || 0\"\r\n (input)=\"allowOnlyNumbers($event); checkMaxOptionsVal($event, questionsFormGroup.get('maximumNumberOfOption'))\"\r\n (blur)=\"questionsFormGroup.get('maximumNumberOfOption')?.markAsTouched()\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maximumNumberOfOption')?.invalid && questionsFormGroup.get('maximumNumberOfOption')?.touched}\">\r\n <span\r\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('required') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('min') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</div>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER'] || 'Max limit should be greater than min limit'}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"pb-4 col-12 mt-md-3\" *ngIf=\"showField('options')\">\r\n <div formArrayName=\"options\">\r\n <ng-container *ngFor=\"let option of options.controls; let i = index; trackBy: trackByControl\">\r\n <div [formGroupName]=\"i\" *ngIf=\"option.get('isActive')?.value !== false\"\r\n class=\"py-md-0 py-3 border-bottom border-md-0 col-12 d-flex flex-wrap flex-md-nowrap align-items-md-start align-items-center justify-content-between gap-md-4 gap-3\">\r\n\r\n <div class=\"col-12 col-md flex-md-grow-1 d-flex flex-column justify-content-center mt-md-3\"\r\n [class.pt-md-3]=\"i == 0\">\r\n <div class=\"col-12 d-flex align-items-center justify-content-between gap-3\">\r\n <div class=\"flex-grow-1 d-flex align-items-center gap-2\">\r\n <div class=\"rounded-circle p-2 border-grey-ten-2 mt-1\"></div>\r\n <input formControlName=\"optionLabel\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_OPTION']\"\r\n class=\"flex-grow-1 assessment-text-medium-13 border-0 outline-0 bg-transparent input-focus py-1\">\r\n </div>\r\n <img class=\"cursor-pointer d-md-none\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n <div\r\n *ngIf=\"option.get('optionLabel')?.invalid && option.get('optionLabel')?.touched\"\r\n class=\"assessment-text-regular-12 mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showWeightage') && !isChild && questionStack.length == 0\"\r\n class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']}}\r\n </p>\r\n <input type=\"number\" (input)=\"checkMaxVal($event, option.get('weight'))\"\r\n formControlName=\"weight\" (wheel)=\"$event.preventDefault()\"\r\n class=\"p-2 py-md-1 assessment-border-radius-two assessment-input-border-one outline-0 assessment-text-regular-12 assessment-marks-input assessment-bg-grey-one\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']\">\r\n </div>\r\n\r\n <div *ngIf=\"showField('options', 'showRemarks') && !isChild && questionStack.length == 0\" class=\"col-auto\">\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3 pb-md-1\"\r\n [ngClass]=\"{'hidden-label': i > 0}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}\r\n </p>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\"\r\n name=\"remarksRequired\" formControlName=\"remarksRequired\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-none d-md-block pt-3\" [class.custom-margin]=\"i == 0\">\r\n <img class=\"cursor-pointer\" [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (click)=\"removeOption(i)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <button type=\"button\" (click)=\"addOption()\"\r\n class=\"assessment-border-radius-two d-flex align-items-center gap-2 bg-transparent assessment-text-primary-one assessment-text-medium-12 border-0 assessment-zoom-animation mt-4\">\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_OPTION']}}\r\n </button>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('options')?.errors && questionsFormGroup.get('options')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\"\r\n *ngIf=\"showField('childQuestions') && questionStack.length == 0 && !isChild && !standaloneMode\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\r\n <label\r\n class=\"assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS']}}</label>\r\n <img matTooltip=\"{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS_INFO']}}\"\r\n matTooltipPosition=\"above\" matTooltipClass=\"assessment-tooltip\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\" />\r\n </div>\r\n\r\n <div *ngFor=\"let group of childQuestionGroups; let groupIndex = index; trackBy: trackByGroupId\"\r\n class=\"col-12 p-3 my-3 assessment-bg-grey-one assessment-border-radius-three assessment-input-border-one\">\r\n <div class=\"col-12 mb-3\" *ngIf=\"options.length > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ASSIGNED_OPTION']}}</label>\r\n <mat-select [value]=\"group.optionId\"\r\n (selectionChange)=\"onGroupOptionChange(group.id, $event.value)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_OPTION_TO_LINK']\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two assessment-bg-white outline-0 assessment-input-border-one assessment-text-medium-13\">\r\n <mat-option class=\"assessment-text-medium-13\" [value]=\"null\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NONE']}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let opt of options.controls; let opIndex = index; trackBy: trackByControl\">\r\n <mat-option *ngIf=\"opt.get('isActive')?.value !== false\"\r\n class=\"assessment-text-medium-13\" [value]=\"getOptionId(opt)\">\r\n {{ opt.get('optionLabel')?.value || ('Option ' + (opIndex + 1)) }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let questionId of group.questionIds; let i = index; trackBy: trackByQuestionId\">\r\n <ng-container *ngIf=\"getChildQuestionById(questionId) as child\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-1 mt-3\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <p class=\"mb-0 assessment-text-medium-14\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION']}} {{i + 1}}</p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"deleteChildQuestionById(child.id, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/delete.svg')\" />\r\n </div>\r\n </div>\r\n <div [innerHTML]=\"child?.questionText?.[0]?.text\"\r\n (click)=\"addEditChildQuestion(child, getChildQuestionIndex(child.id))\"\r\n class=\"col-12 assessment-button-padding assessment-border-radius-two assessment-bg-white assessment-input-border-one assessment-text-medium-12 cursor-pointer\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <button (click)=\"addEditChildQuestion(undefined, undefined, group.id)\"\r\n class=\"assessment-zoom-animation border-0 d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one bg-transparent assessment-text-semibold-12 outline-0 mt-3\">\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_MORE']}}\r\n </button>\r\n </div>\r\n\r\n <button (click)=\"addEditChildQuestion()\"\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 col-12 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_CHILD_QUESTION']}}\r\n </button>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\" *ngIf=\"showField('hintText')\">\r\n <label\r\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_HINT']}}</label>\r\n <app-text-editor [preText]=\"questionsFormGroup?.get('hintText')?.value\"\r\n (inputChange)=\"questionsFormGroup?.get('hintText')?.patchValue($event)\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_HINT']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'8rem'\">\r\n </app-text-editor>\r\n <div\r\n *ngIf=\"questionsFormGroup.get('hintText')?.errors && questionsFormGroup.get('hintText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n <div class=\"py-4 col-12 border-top\">\r\n <label class=\"mb-2 assessment-text-semibold-18 assessment-text-grey-ten col-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FIELDS_SETTINGS']}}</label>\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isMandatory\"\r\n formControlName=\"isMandatory\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\"\r\n *ngIf=\"showField('isFilterEnabled')\">\r\n <div>\r\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED']}}</p>\r\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED_DESC']}}</p>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isFilterEnabled\"\r\n formControlName=\"isFilterEnabled\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\"\r\n *ngIf=\"showField('isFilterEnabled') && questionsFormGroup.get('isFilterEnabled')?.value\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION_NAME']}}</label>\r\n <input formControlName=\"questionSubText\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.QUESTION_NAME']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched}\">\r\n <div\r\n *ngIf=\"questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched\"\r\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\r\n </div>\r\n\r\n <div class=\"my-3 col-12\" *ngIf=\"!isChild && questionStack.length == 0 && (skillsList?.length ?? 0) > 0\">\r\n <label\r\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAP_SKILLS']}}</label>\r\n <mat-select formControlName=\"skillCodes\" multiple\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_SKILLS']\"\r\n panelClass=\"assessment-checkboxes\"\r\n class=\"col-12 assessment-mat-select assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\r\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let skill of skillsList; trackBy: trackByCode\"\r\n [value]=\"skill?.code\">{{skill?.labels?.[0]?.text}}</mat-option>\r\n </mat-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", 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}.form-container{max-height:calc(100dvh - 4rem)}.border-grey-ten-2{border:.12rem solid var(--assessment-grey-ten)}.input-focus{overflow:hidden;text-overflow:ellipsis}.input-focus:focus-visible{border-bottom:var(--assessment-input-focus-border)!important}.assessment-marks-input{width:4rem}header{z-index:1}.vertical-text{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);white-space:nowrap}@media (min-width: 768px){.hidden-label{visibility:hidden;line-height:0!important}}@media screen and (min-width: 768px){.border-md-0{border:0!important}}.primary-border{border:.064rem solid var(--assessment-primary-one)}.form-check-input:checked{background-color:var(--assessment-primary-one)!important;border-color:var(--assessment-primary-one)!important}.custom-margin{margin-top:1.3rem}.border-ADC9F6{border:.064rem solid var(--assessment-palette-ADC9F6)}\n"], components: [{ type: i5.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i8.TextEditorComponent, selector: "app-text-editor", inputs: ["height", "placeholder", "preText", "disabled", "showToolbar"], outputs: ["inputChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.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: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
679
734
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentBuilderComponent, decorators: [{
680
735
  type: Component,
681
736
  args: [{
@@ -690,4 +745,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
690
745
  type: ViewChild,
691
746
  args: ['scrollContainer']
692
747
  }] } });
693
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbnMtYXNzZXNzbWVudC9zcmMvbGliL21vZHVsZXMvYXNzZXNzbWVudC1tYWtlci9jb21wb25lbnRzL2Fzc2Vzc21lbnQtYnVpbGRlci9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvYXNzZXNzbWVudC1idWlsZGVyL2Fzc2Vzc21lbnQtYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUW5FLE1BQU0sT0FBTywwQkFBMEI7SUFxQm5DLFlBQ1ksV0FBd0IsRUFDeEIsd0JBQWtELEVBQ2xELHNCQUE4QyxFQUMvQyxTQUFtRCxFQUMxQixVQUFlO1FBSnZDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUMvQyxjQUFTLEdBQVQsU0FBUyxDQUEwQztRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFLO1FBekJuRCxnQkFBVyxHQUE4QixFQUFFLENBQUM7UUFDNUMsZ0JBQVcsR0FBOEIs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QztRQUMzRSxPQUFPLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUI7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFO1lBQzVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNyRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDVDtJQUNMLENBQUM7O3dIQWhzQlEsMEJBQTBCLHVKQTBCdkIsZUFBZTs0R0ExQmxCLDBCQUEwQixzTENoQnZDLHVuc0NBeWJNOzRGRHphTywwQkFBMEI7a0JBTnRDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsV0FBVyxFQUFFLHFDQUFxQztvQkFDbEQsU0FBUyxFQUFFLENBQUMscUNBQXFDLENBQUM7aUJBQ3JEOzswQkE0QlEsTUFBTTsyQkFBQyxlQUFlOzRDQW5CRyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgUXVlc3Rpb25UeXBlLCBSZWZEYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvYXNzZXNzbWVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50TWFrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXNzZXNzbWVudC1tYWtlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUXVlc3Rpb25QYXBlclNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi1wYXBlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LWJ1aWxkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlZXBDbG9uZSwgZ2VuZXJhdGVVdWlkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3V0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItYXBwLWFzc2Vzc21lbnQtYnVpbGRlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Fzc2Vzc21lbnQtYnVpbGRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXNzbWVudEJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgbGFiZWxDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICBxdWVzdGlvblR5cGVzOiBRdWVzdGlvblR5cGVbXSA9IFtdO1xyXG4gICAgcXVlc3Rpb25EZXRhaWxzOiBBc3Nlc3NtZW50UXVlc3Rpb24gfCBudWxsID0gbnVsbDtcclxuICAgIHJ1bGVzOiBhbnkgPSB7fTtcclxuICAgIHF1ZXN0aW9uU3RhY2s6IHsgcGFyZW50Rm9ybVZhbHVlOiBBc3Nlc3NtZW50UXVlc3Rpb24sIGVkaXRpbmdRdWVzdGlvbkluZGV4PzogbnVtYmVyLCBhZGRpbmdUb0dyb3VwSWQ/OiBzdHJpbmcgfVtdID0gW107XHJcbiAgICBAVmlld0NoaWxkKCdzY3JvbGxDb250YWluZXInKSBzY3JvbGxDb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIGNoaWxkUXVlc3Rpb25Hcm91cHM6IHsgaWQ6IHN0cmluZywgb3B0aW9uSWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwsIHF1ZXN0aW9uSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIH1bXSA9IFtdO1xyXG5cclxuICAgIHF1ZXN0aW9uc0Zvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICAgIHF1ZXN0aW9uQmFuazogUmVjb3JkPG51bWJlciwgQXNzZXNzbWVudFF1ZXN0aW9uPiA9IHt9O1xyXG4gICAgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLy8gcGFyZW50UXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGFzc2Vzc21lbnRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHNraWxsc0xpc3Q6IFJlZkRhdGFbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlOiBBc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBhc3Nlc3NtZW50TWFrZXJTZXJ2aWNlOiBBc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxBc3Nlc3NtZW50QnVpbGRlckNvbXBvbmVudD4sXHJcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkaWFsb2dEYXRhOiBhbnksXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGFiZWxDb25maWcgPSB0aGlzLmRpYWxvZ0RhdGE/LmxhYmVsQ29uZmlnO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VDb25maWcgPSB0aGlzLmRpYWxvZ0RhdGE/LmltYWdlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMucnVsZXMgPSB0aGlzLmRpYWxvZ0RhdGE/LnJ1bGVzO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25UeXBlcyA9IHRoaXMuZGlhbG9nRGF0YT8ucXVlc3Rpb25UeXBlcztcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHRoaXMuZGlhbG9nRGF0YT8ucXVlc3Rpb25CYW5rO1xyXG4gICAgICAgIHRoaXMuaXNDaGlsZCA9IHRoaXMuZGlhbG9nRGF0YT8uaXNDaGlsZDtcclxuICAgICAgICB0aGlzLnNraWxsc0xpc3QgPSB0aGlzLmRpYWxvZ0RhdGE/LnNraWxsc0xpc3QgfHwgW107XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50SWQgPSB0aGlzLmRpYWxvZ0RhdGE/LmFzc2Vzc21lbnRJZDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5xdWVzdGlvbkRldGFpbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkRldGFpbHMgPSBkZWVwQ2xvbmUodGhpcy5kaWFsb2dEYXRhPy5xdWVzdGlvbkRldGFpbHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldHVwRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5hcHBseUR5bmFtaWNWYWxpZGF0b3JzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVDaGlsZFF1ZXN0aW9uTGlzdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NoaWxkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdW5pcXVlSWRzID0gbmV3IFNldDxudW1iZXI+KCk7XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25EZXRhaWxzPy5kZWZhdWx0T3B0aW9uc0xpc3Q/LmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5mb3JFYWNoKGlkID0+IHVuaXF1ZUlkcy5hZGQoaWQpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odW5pcXVlSWRzKT8ubWFwKGlkID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYW5rW2lkXSA/IGRlZXBDbG9uZSh0aGlzLnF1ZXN0aW9uQmFua1tpZF0pIDogbnVsbDtcclxuICAgICAgICB9KT8uZmlsdGVyKEJvb2xlYW4pIGFzIEFzc2Vzc21lbnRRdWVzdGlvbltdO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHVwRm9ybUdyb3VwKCkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBxdWVzdGlvblN1YlRleHQ6IFsnJ10sXHJcbiAgICAgICAgICAgIGlzRmlsdGVyRW5hYmxlZDogW2ZhbHNlXSxcclxuICAgICAgICAgICAgaXNNYW5kYXRvcnk6IFtmYWxzZV0sXHJcbiAgICAgICAgICAgIC8vIHZpc2liaWxpdHk6IFt0cnVlXSxcclxuICAgICAgICAgICAgdG90YWxNYXJrczogW251bGxdLFxyXG4gICAgICAgICAgICBtaW5DaGFyYWN0ZXJDb3VudDogW251bGxdLFxyXG4gICAgICAgICAgICBtYXhDaGFyYWN0ZXJDb3VudDogW251bGxdLFxyXG4gICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZPcHRpb246IFtudWxsXSxcclxuICAgICAgICAgICAgbWluaW11bU51bWJlck9mT3B0aW9uOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1heE5vT2ZGaWxlczogW251bGxdLFxyXG4gICAgICAgICAgICBjdXN0b21SZWdleDogWycnXSxcclxuICAgICAgICAgICAgaGludFRleHQ6IFsnJ10sXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uTWVkaWE6IFsnJ10sXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxyXG4gICAgICAgICAgICBjaGlsZFF1ZXN0aW9uczogW1tdXSxcclxuICAgICAgICAgICAgc2tpbGxDb2RlczogW1tdXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uVHlwZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseUR5bmFtaWNWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25EZXRhaWxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVGb3JtKHRoaXMucXVlc3Rpb25EZXRhaWxzLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkQ2hpbGRRdWVzdGlvbkdyb3VwcyhbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBvcHVsYXRlRm9ybShxdWVzdGlvbkRldGFpbHM6IEFzc2Vzc21lbnRRdWVzdGlvbiwgYnVpbGRDaGlsZEdyb3VwczogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCFxdWVzdGlvbkRldGFpbHMpIHJldHVybjtcclxuICAgICAgICBjb25zdCBjaGlsZFF1ZXN0aW9ucyA9IHF1ZXN0aW9uRGV0YWlscz8uY2hpbGRRdWVzdGlvbnMgfHwgdGhpcy5nZW5lcmF0ZUNoaWxkUXVlc3Rpb25MaXN0KCk7XHJcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZXRRdWVzdGlvbkRUTyh7IC4uLnF1ZXN0aW9uRGV0YWlscywgY2hpbGRRdWVzdGlvbnMgfSk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAucGF0Y2hWYWx1ZShmb3JtRGF0YSk7XHJcbiAgICAgICAgaWYgKGZvcm1EYXRhLm9wdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKGZvcm1EYXRhLnRvdGFsTWFya3MpIHx8IDA7XHJcbiAgICAgICAgICAgIGZvcm1EYXRhLm9wdGlvbnMuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdEdyb3VwID0gdGhpcy5jcmVhdGVPcHRpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmICh0b3RhbE1hcmtzID4gMCAmJiBvcHQud2VpZ2h0ICE9PSB1bmRlZmluZWQgJiYgb3B0LndlaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdC53ZWlnaHQgPSBwYXJzZUZsb2F0KCgoTnVtYmVyKG9wdC53ZWlnaHQpICogdG90YWxNYXJrcykgLyAxMDApLnRvRml4ZWQoMikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb3B0R3JvdXAucGF0Y2hWYWx1ZShvcHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0R3JvdXApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJ1aWxkQ2hpbGRHcm91cHMpIHtcclxuICAgICAgICAgICAgdGhpcy5idWlsZENoaWxkUXVlc3Rpb25Hcm91cHMoY2hpbGRRdWVzdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblN1Ym1pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRvdGFsTWFya3MgPSBOdW1iZXIodGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCd0b3RhbE1hcmtzJyk/LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IHFUeXBlID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblR5cGUnKT8udmFsdWU7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc1ZhbHVlcyA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpPy52YWx1ZSB8fCBbXTtcclxuICAgICAgICBjb25zdCBzaG93V2VpZ2h0YWdlID0gdGhpcy5zaG93RmllbGQoJ29wdGlvbnMnLCAnc2hvd1dlaWdodGFnZScpO1xyXG5cclxuICAgICAgICBpZiAoc2hvd1dlaWdodGFnZSAmJiB0b3RhbE1hcmtzID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgdG90YWxXZWlnaHRzID0gMDtcclxuICAgICAgICAgICAgbGV0IGhhc0ludmFsaWRXZWlnaHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnNWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHQuaXNBY3RpdmUgPT09IGZhbHNlKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHcgPSBOdW1iZXIob3B0LndlaWdodCkgfHwgMDtcclxuICAgICAgICAgICAgICAgIGlmICh3ID4gdG90YWxNYXJrcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc0ludmFsaWRXZWlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdG90YWxXZWlnaHRzICs9IHc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChoYXNJbnZhbGlkV2VpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUbyBrZWVwIHdpdGhpbiBleGlzdGluZyBzdHlsZXMsIGVtaXR0aW5nIGRlZmF1bHQgZXJyb3Igd2l0aCBvdXIgc3BlY2lmaWMgbWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULk9QVElPTl9TQ09SRV9HUkVBVEVSX1RIQU5fVE9UQUxfTUFSS1MnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5NVUxUSV9TRUxFQ1QnICYmIHRvdGFsV2VpZ2h0cyA+IHRvdGFsTWFya3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5TVU1fT0ZfT1BUSU9OX1NDT1JFU19HUkVBVEVSX1RIQU5fVE9UQUxfTUFSS1MnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBkZWVwQ2xvbmUodGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAudmFsdWUpO1xyXG4gICAgICAgIGlmIChzaG93V2VpZ2h0YWdlICYmIHRvdGFsTWFya3MgPiAwICYmIGZvcm1WYWx1ZS5vcHRpb25zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9ybVZhbHVlLm9wdGlvbnMuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHQud2VpZ2h0ICE9PSB1bmRlZmluZWQgJiYgb3B0LndlaWdodCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdC53ZWlnaHQgPSBwYXJzZUZsb2F0KCgoTnVtYmVyKG9wdC53ZWlnaHQpIC8gdG90YWxNYXJrcykgKiAxMDApLnRvRml4ZWQoMikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBjaGlsZCBxdWVzdGlvbiBsb2dpY1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMucXVlc3Rpb25TdGFja1t0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhdGU/LmVkaXRpbmdRdWVzdGlvbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghc3RhdGUucGFyZW50Rm9ybVZhbHVlLmNoaWxkUXVlc3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Rm9ybVZhbHVlLmNoaWxkUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGRcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUXVlc3Rpb24gPSBzdGF0ZS5wYXJlbnRGb3JtVmFsdWUuY2hpbGRRdWVzdGlvbnNbc3RhdGUuZWRpdGluZ1F1ZXN0aW9uSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLnNldFF1ZXN0aW9uRFRPKGZvcm1WYWx1ZSwgY2hpbGRRdWVzdGlvbik7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gYXdhaXQgdGhpcy51cGRhdGVRdWVzdGlvbihwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYXJlbnRGb3JtVmFsdWUuY2hpbGRRdWVzdGlvbnNbc3RhdGUuZWRpdGluZ1F1ZXN0aW9uSW5kZXhdID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFua1txdWVzdGlvbi5pZF0gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BBVENIJywgcGF5bG9hZCB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBZGQgbmV3IGNoaWxkIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLnNldFF1ZXN0aW9uRFRPKGZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gYXdhaXQgdGhpcy5jcmVhdGVRdWVzdGlvbihwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZT8ucGFyZW50Rm9ybVZhbHVlPy5jaGlsZFF1ZXN0aW9ucz8ucHVzaChxdWVzdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFua1txdWVzdGlvbi5pZF0gPSBxdWVzdGlvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycCA9IHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5maW5kKChnOiBhbnkpID0+IGcuaWQgPT09IHN0YXRlLmFkZGluZ1RvR3JvdXBJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncnApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycC5xdWVzdGlvbklkcz8ucHVzaChxdWVzdGlvbj8uaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdycC5vcHRpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdCA9IHN0YXRlLnBhcmVudEZvcm1WYWx1ZT8uZGVmYXVsdE9wdGlvbnNMaXN0Py5maW5kKChvOiBhbnkpID0+IChvLmlkIHx8IG8udXVpZCkgPT0gZ3JwLm9wdGlvbklkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5jaGlsZFF1ZXN0aW9uTGlzdCA9IG9wdC5jaGlsZFF1ZXN0aW9uTGlzdCB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LmNoaWxkUXVlc3Rpb25MaXN0LnB1c2gocXVlc3Rpb24uaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZ2VuZXJhdGVVdWlkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uSWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZHM6IFtxdWVzdGlvbj8uaWRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BPU1QnLCBwYXlsb2FkIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZS1wb3B1bGF0ZSBwYXJlbnQgZm9ybVxyXG4gICAgICAgICAgICB0aGlzLnJlc2V0QW5kUG9wdWxhdGUoc3RhdGU/LnBhcmVudEZvcm1WYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHF1ZXN0aW9uRFRPID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2Uuc2V0UXVlc3Rpb25EVE8oZm9ybVZhbHVlLCB0aGlzLnF1ZXN0aW9uRGV0YWlscyk7XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgbG9jYWwgdGVtcGxhdGUgdHJlZSByZXByZXNlbnRhdGlvblxyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkRldGFpbHM/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uRFRPID0gYXdhaXQgdGhpcy51cGRhdGVRdWVzdGlvbihxdWVzdGlvbkRUTyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uRFRPPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFua1txdWVzdGlvbkRUTy5pZF0gPSBxdWVzdGlvbkRUT1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuUVVFU1RJT05fVVBEQVRFRF9TVUNDRVNTJ10sIHR5cGU6ICdzdWNjZXNzJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IHN1Y2Nlc3M6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BBVENIJywgcGF5bG9hZDogcXVlc3Rpb25EVE8gfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVPckVkaXRBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcihxdWVzdGlvbkRUTyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlUXVlc3Rpb24ocGF5bG9hZDogYW55KTogUHJvbWlzZTxBc3Nlc3NtZW50UXVlc3Rpb24+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuY3JlYXRlUXVlc3Rpb24ocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHJlc29sdmUocmVzIGFzIEFzc2Vzc21lbnRRdWVzdGlvbiksXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4gcmVqZWN0KGVycilcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUXVlc3Rpb24ocGF5bG9hZDogYW55KTogUHJvbWlzZTxBc3Nlc3NtZW50UXVlc3Rpb24+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UucGF0Y2hRdWVzdGlvbihwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKHJlcykgPT4gcmVzb2x2ZShyZXMgYXMgQXNzZXNzbWVudFF1ZXN0aW9uKSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiByZWplY3QoZXJyKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVPckVkaXRBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcihxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25QYXBlciA9IGRlZXBDbG9uZSh0aGlzLmRpYWxvZ0RhdGE/LmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSk7XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvblF1ZXN0aW9uID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVTZWN0aW9uUXVlc3Rpb24ocXVlc3Rpb24pO1xyXG4gICAgICAgIGlmICghdGhpcy5kaWFsb2dEYXRhPy5zZWN0aW9uRGV0YWlscykge1xyXG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gcXVlc3Rpb25QYXBlcj8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0O1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0U2VxdWVuY2UgPSBsaXN0Py5sZW5ndGggPyBsaXN0W2xpc3QubGVuZ3RoIC0gMV0ub3JkZXJObyB8fCAwIDogMDtcclxuICAgICAgICAgICAgY29uc3QgbmV3U2VjdGlvbiA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmNyZWF0ZU5ld1NlY3Rpb24obGFzdFNlcXVlbmNlICsgMSk7XHJcblxyXG4gICAgICAgICAgICBuZXdTZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ucHVzaChzZWN0aW9uUXVlc3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgcXVlc3Rpb25QYXBlcj8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5wdXNoKG5ld1NlY3Rpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25SZWYgPSBxdWVzdGlvblBhcGVyPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/LmZpbmQoKHNlY3Rpb246IFF1ZXN0aW9uUGFwZXJTZWN0aW9uKSA9PiBzZWN0aW9uPy5pZCA9PSB0aGlzLmRpYWxvZ0RhdGE/LnNlY3Rpb25EZXRhaWxzPy5pZCk7XHJcbiAgICAgICAgICAgIHNlY3Rpb25SZWY/LnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5wdXNoKHNlY3Rpb25RdWVzdGlvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBxdWVzdGlvblBhcGVyRFRPID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVRdWVzdGlvblBhcGVyRFRPKHF1ZXN0aW9uUGFwZXIsIHRoaXMucXVlc3Rpb25CYW5rKTtcclxuICAgICAgICBjb25zdCBhc3Nlc3NtZW50RFRPID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVBc3Nlc3NtZW50RFRPKHRoaXMuYXNzZXNzbWVudElkLCBxdWVzdGlvblBhcGVyRFRPKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgYXNzZXNzbWVudDogYXNzZXNzbWVudERUTyxcclxuICAgICAgICAgICAgcXVlc3Rpb25QYXBlcjogcXVlc3Rpb25QYXBlckRUT1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXBpQ2FsbCA9IHRoaXMuYXNzZXNzbWVudElkXHJcbiAgICAgICAgICAgID8gdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocGF5bG9hZClcclxuICAgICAgICAgICAgOiB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuY3JlYXRlQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocGF5bG9hZCk7XHJcblxyXG4gICAgICAgIGFwaUNhbGwuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXNzZXNzbWVudElkOiByZXM/LmFzc2Vzc21lbnQ/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uUGFwZXI6IHJlcz8ucXVlc3Rpb25QYXBlcixcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbk1hcDogcmVzPy5xdWVzdGlvbk1hcFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogdGhpcy5hc3Nlc3NtZW50SWQgPyAnUEFUQ0gnIDogJ1BPU1QnLCBwYXlsb2FkIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5RHluYW1pY1ZhbGlkYXRvcnMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJ1bGVzIHx8IE9iamVjdC5rZXlzKHRoaXMucnVsZXMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3QgcVR5cGUgPSBmb3JtLmdldCgncXVlc3Rpb25UeXBlJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRSdWxlcyA9IHRoaXMucnVsZXNbcVR5cGVdIHx8IHt9O1xyXG5cclxuICAgICAgICBjb25zdCBleGNsdWRlZENvbnRyb2xzID0gbmV3IFNldChbJ3F1ZXN0aW9uVHlwZScsICdxdWVzdGlvblRleHQnLCAnb3B0aW9ucycsICd2aXNpYmlsaXR5JywgJ2lzTWFuZGF0b3J5JywgJ3F1ZXN0aW9uU3ViVGV4dCcsICdza2lsbENvZGVzJ10pO1xyXG5cclxuICAgICAgICAvLyBIYW5kbGUgbm9ybWFsIGNvbnRyb2xzXHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZm9ybS5jb250cm9scykuZm9yRWFjaCgoW2tleSwgY29udHJvbF0pID0+IHtcclxuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVkQ29udHJvbHMuaGFzKGtleSkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBjdXJyZW50UnVsZXNba2V5XTtcclxuXHJcbiAgICAgICAgICAgIGlmIChydWxlPy52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gcnVsZT8ucmVxdWlyZWQgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gOiBbXTtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdxdWVzdGlvbk1lZGlhJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL14oaHR0cHM/OlxcL1xcLyk/KFtcXGRhLXpcXC4tXSspXFwuKFthLXpcXC5dezIsNn0pKFtcXC9cXHcgXFwuLV0qKSpcXC8/KFxcP1teXFxzXSopPyQvaSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ21pbkNoYXJhY3RlckNvdW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnbWF4Q2hhcmFjdGVyQ291bnQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKDEpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGN0cmwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluQ3RybCA9IGN0cmwucGFyZW50Py5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pblZhbCA9IG1pbkN0cmw/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhWYWwgPSBjdHJsLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluVmFsICE9PSBudWxsICYmIG1pblZhbCAhPT0gdW5kZWZpbmVkICYmIG1pblZhbCAhPT0gJycgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFZhbCAhPT0gbnVsbCAmJiBtYXhWYWwgIT09IHVuZGVmaW5lZCAmJiBtYXhWYWwgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKG1heFZhbCkgPD0gTnVtYmVyKG1pblZhbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBsZXNzVGhhbk9yRXF1YWxNaW46IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKDEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKDEpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGN0cmwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluQ3RybCA9IGN0cmwucGFyZW50Py5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5WYWwgPSBtaW5DdHJsPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4VmFsID0gY3RybC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pblZhbCAhPT0gbnVsbCAmJiBtaW5WYWwgIT09IHVuZGVmaW5lZCAmJiBtaW5WYWwgIT09ICcnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhWYWwgIT09IG51bGwgJiYgbWF4VmFsICE9PSB1bmRlZmluZWQgJiYgbWF4VmFsICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihtYXhWYWwpIDw9IE51bWJlcihtaW5WYWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGVzc1RoYW5PckVxdWFsTWluOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnbWF4RmlsZVNpemUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKDEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdtYXhOb09mRmlsZXMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKDEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzLmxlbmd0aCA+IDAgPyB2YWxpZGF0b3JzIDogbnVsbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShrZXkgPT09ICdjaGlsZFF1ZXN0aW9ucycgPyBbXSA6IG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gSGFuZGxlIG9wdGlvbnMgRm9ybUFycmF5XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NvbnRyb2wgPSBmb3JtLmdldCgnb3B0aW9ucycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICBjb25zdCBvcHRpb25zUnVsZSA9IGN1cnJlbnRSdWxlc1snb3B0aW9ucyddO1xyXG5cclxuICAgICAgICBpZiAoIW9wdGlvbnNSdWxlPy52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICBvcHRpb25zQ29udHJvbC5jbGVhcigpO1xyXG4gICAgICAgICAgICBvcHRpb25zQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc1ZhbGlkYXRvciA9IG9wdGlvbnNSdWxlPy5yZXF1aXJlZCA/IChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9ucyA9IChjb250cm9sLnZhbHVlIHx8IFtdKS5maWx0ZXIoKG9wdDogYW55KSA9PiBvcHQuaXNBY3RpdmUgIT09IGZhbHNlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjdGl2ZU9wdGlvbnMubGVuZ3RoID4gMCA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgfSA6IG51bGw7XHJcblxyXG4gICAgICAgIG9wdGlvbnNDb250cm9sLnNldFZhbGlkYXRvcnMob3B0aW9uc1ZhbGlkYXRvcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHNob3dXZWlnaHRhZ2UgPSBvcHRpb25zUnVsZT8uc2hvd1dlaWdodGFnZTtcclxuICAgICAgICBjb25zdCBzaG93UmVtYXJrcyA9IG9wdGlvbnNSdWxlPy5zaG93UmVtYXJrcztcclxuXHJcbiAgICAgICAgb3B0aW9uc0NvbnRyb2wuY29udHJvbHMuZm9yRWFjaChvcHRHcm91cCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdlaWdodEN0cmwgPSBvcHRHcm91cC5nZXQoJ3dlaWdodCcpO1xyXG4gICAgICAgICAgICBjb25zdCByZW1hcmtzQ3RybCA9IG9wdEdyb3VwLmdldCgncmVtYXJrc1JlcXVpcmVkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXNob3dXZWlnaHRhZ2UpIHdlaWdodEN0cmw/LnNldFZhbHVlKDAsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgaWYgKCFzaG93UmVtYXJrcykgcmVtYXJrc0N0cmw/LnNldFZhbHVlKGZhbHNlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblxyXG4gICAgICAgICAgICB3ZWlnaHRDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgcmVtYXJrc0N0cmw/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBvcHRpb25zQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RmllbGQoZmllbGROYW1lOiBzdHJpbmcsIG5lc3RlZFByb3A/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBxdWVzdGlvblR5cGUgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cD8uZ2V0KCdxdWVzdGlvblR5cGUnKT8udmFsdWU7XHJcbiAgICAgICAgaWYgKCFxdWVzdGlvblR5cGUgfHwgIXRoaXMucnVsZXNbcXVlc3Rpb25UeXBlXSB8fCAhdGhpcy5ydWxlc1txdWVzdGlvblR5cGVdW2ZpZWxkTmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmVzdGVkUHJvcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLnJ1bGVzW3F1ZXN0aW9uVHlwZV1bZmllbGROYW1lXVtuZXN0ZWRQcm9wXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5ydWxlc1txdWVzdGlvblR5cGVdW2ZpZWxkTmFtZV0/LnZpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKTogRm9ybUFycmF5IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgfVxyXG5cclxuICAgIGFkZE9wdGlvbigpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaCh0aGlzLmNyZWF0ZU9wdGlvbigpKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVPcHRpb24oaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWRPcHRpb24gPSB0aGlzLm9wdGlvbnMuYXQoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWRPcHRpb25JZCA9IHJlbW92ZWRPcHRpb24uZ2V0KCdpZCcpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCByZW1vdmVkT3B0aW9uVXVpZCA9IHJlbW92ZWRPcHRpb24uZ2V0KCd1dWlkJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHVuaXF1ZUlkID0gcmVtb3ZlZE9wdGlvbklkIHx8IHJlbW92ZWRPcHRpb25VdWlkO1xyXG5cclxuICAgICAgICBpZiAocmVtb3ZlZE9wdGlvbklkKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZWRPcHRpb24uZ2V0KCdpc0FjdGl2ZScpPy5zZXRWYWx1ZShmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5mb3JFYWNoKGcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZy5vcHRpb25JZCA9PT0gdW5pcXVlSWQpIHtcclxuICAgICAgICAgICAgICAgIGcub3B0aW9uSWQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1heEN0cmwgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpO1xyXG4gICAgICAgIGlmIChtYXhDdHJsICYmIG1heEN0cmwudmFsdWUgIT09IG51bGwgJiYgbWF4Q3RybC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIG1heEN0cmwudmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbnNDb3VudCA9IHRoaXMub3B0aW9ucy5jb250cm9scy5maWx0ZXIob3B0ID0+IG9wdC5nZXQoJ2lzQWN0aXZlJyk/LnZhbHVlICE9PSBmYWxzZSkubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoTnVtYmVyKG1heEN0cmwudmFsdWUpID4gYWN0aXZlT3B0aW9uc0NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICBtYXhDdHJsLnNldFZhbHVlKGFjdGl2ZU9wdGlvbnNDb3VudCB8fCBudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVPcHRpb24oKTogRm9ybUdyb3VwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgIGlkOiBbMF0sXHJcbiAgICAgICAgICAgIHV1aWQ6IFtnZW5lcmF0ZVV1aWQoKV0sXHJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICB3ZWlnaHQ6IFswXSxcclxuICAgICAgICAgICAgcmVtYXJrc1JlcXVpcmVkOiBbZmFsc2VdLFxyXG4gICAgICAgICAgICBpc0FjdGl2ZTogW3RydWVdLFxyXG4gICAgICAgICAgICBjaGlsZFF1ZXN0aW9uTGlzdDogW1tdXVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFsbG93T25seU51bWJlcnMoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrTWF4VmFsKGV2ZW50OiBhbnksIGNvbnRyb2w6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHRvdGFsTWFya3MgPSBOdW1iZXIodGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCd0b3RhbE1hcmtzJyk/LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgIGxldCB2YWwgPSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICBpZiAodmFsID4gdG90YWxNYXJrcykge1xyXG4gICAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB0b3RhbE1hcmtzO1xyXG4gICAgICAgICAgICBjb250cm9sPy5zZXRWYWx1ZSh0b3RhbE1hcmtzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrTWF4T3B0aW9uc1ZhbChldmVudDogYW55LCBjb250cm9sOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25zQ291bnQgPSB0aGlzLm9wdGlvbnMuY29udHJvbHMuZmlsdGVyKG9wdCA9PiBvcHQuZ2V0KCdpc0FjdGl2ZScpPy52YWx1ZSAhPT0gZmFsc2UpLmxlbmd0aDtcclxuICAgICAgICBsZXQgdmFsID0gTnVtYmVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgaWYgKHZhbCA+IGFjdGl2ZU9wdGlvbnNDb3VudCkge1xyXG4gICAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBhY3RpdmVPcHRpb25zQ291bnQ7XHJcbiAgICAgICAgICAgIGNvbnRyb2w/LnNldFZhbHVlKGFjdGl2ZU9wdGlvbnNDb3VudCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbWFnZUVycm9ySGFuZGxlcihldmVudDogYW55LCBmaWxlUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnNyYyA9IGZpbGVQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEVkaXRDaGlsZFF1ZXN0aW9uKGNoaWxkUXVlc3Rpb24/OiBBc3Nlc3NtZW50UXVlc3Rpb24sIGluZGV4PzogbnVtYmVyLCBncm91cElkPzogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gU2F2ZSBjdXJyZW50IHBhcmVudCBzdGF0ZVxyXG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGRlZXBDbG9uZSh0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC52YWx1ZSk7XHJcbiAgICAgICAgY29uc3QgdG90YWxNYXJrcyA9IE51bWJlcihmb3JtVmFsdWUudG90YWxNYXJrcykgfHwgMDtcclxuICAgICAgICBjb25zdCBzaG93V2VpZ2h0YWdlID0gdGhpcy5zaG93RmllbGQoJ29wdGlvbnMnLCAnc2hvd1dlaWdodGFnZScpO1xyXG5cclxuICAgICAgICBpZiAoc2hvd1dlaWdodGFnZSAmJiB0b3RhbE1hcmtzID4gMCAmJiBmb3JtVmFsdWUub3B0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvcm1WYWx1ZS5vcHRpb25zLmZvckVhY2goKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0LndlaWdodCAhPT0gdW5kZWZpbmVkICYmIG9wdC53ZWlnaHQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHQud2VpZ2h0ID0gcGFyc2VGbG9hdCgoKE51bWJlcihvcHQud2VpZ2h0KSAvIHRvdGFsTWFya3MpICogMTAwKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBxdWVzdGlvbkRhdGEgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXRRdWVzdGlvbkRUTyhmb3JtVmFsdWUsIHRoaXMucXVlc3Rpb25EZXRhaWxzKTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnB1c2goe1xyXG4gICAgICAgICAgICBwYXJlbnRGb3JtVmFsdWU6IHsgLi4ucXVlc3Rpb25EYXRhLCBjaGlsZFF1ZXN0aW9uczogdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjaGlsZFF1ZXN0aW9ucycpPy52YWx1ZSB9LFxyXG4gICAgICAgICAgICBlZGl0aW5nUXVlc3Rpb25JbmRleDogaW5kZXgsXHJcbiAgICAgICAgICAgIGFkZGluZ1RvR3JvdXBJZDogZ3JvdXBJZFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBSZXNldCBmb3JtIGZvciBjaGlsZFxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLnJlc2V0KHtcclxuICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnJyxcclxuICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnJyxcclxuICAgICAgICAgICAgaXNNYW5kYXRvcnk6IGZhbHNlLFxyXG4gICAgICAgICAgICAvLyB2aXNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgICAgICB0b3RhbE1hcmtzOiBudWxsLFxyXG4gICAgICAgICAgICBtaW5DaGFyYWN0ZXJDb3VudDogbnVsbCxcclxuICAgICAgICAgICAgbWF4Q2hhcmFjdGVyQ291bnQ6IG51bGwsXHJcbiAgICAgICAgICAgIG1heGltdW1OdW1iZXJPZk9wdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgbWluaW11bU51bWJlck9mT3B0aW9uOiBudWxsLFxyXG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogbnVsbCxcclxuICAgICAgICAgICAgbWF4Tm9PZkZpbGVzOiBudWxsLFxyXG4gICAgICAgICAgICBjdXN0b21SZWdleDogJycsXHJcbiAgICAgICAgICAgIGhpbnRUZXh0OiAnJyxcclxuICAgICAgICAgICAgcXVlc3Rpb25NZWRpYTogJycsXHJcbiAgICAgICAgICAgIGNoaWxkUXVlc3Rpb25zOiBbXSxcclxuICAgICAgICAgICAgc2tpbGxDb2RlczogW11cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBvcHRpb25zQ29udHJvbCA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICB3aGlsZSAob3B0aW9uc0NvbnRyb2wubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNDb250cm9sLnJlbW92ZUF0KDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hcHBseUR5bmFtaWNWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgaWYgKGNoaWxkUXVlc3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUZvcm0oY2hpbGRRdWVzdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVDaGlsZFF1ZXN0aW9uKGluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRDaGlsZCA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY2hpbGRRdWVzdGlvbnMnKT8udmFsdWVbaW5kZXhdO1xyXG5cclxuICAgICAgICB0aGlzLm9wdGlvbnMuY29udHJvbHMuZm9yRWFjaChvcHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY2hpbGRMaXN0ID0gWy4uLihvcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy52YWx1ZSB8fCBbXSldO1xyXG4gICAgICAgICAgICBjaGlsZExpc3QgPSBjaGlsZExpc3QuZmlsdGVyKChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBpZCAhPT0gZGVsZXRlZENoaWxkLmlkKTtcclxuICAgICAgICAgICAgb3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8uc2V0VmFsdWUoY2hpbGRMaXN0KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjaGlsZFF1ZXN0aW9ucycpPy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZm9yRWFjaChnID0+IHtcclxuICAgICAgICAgICAgZy5xdWVzdGlvbklkcyA9IGcucXVlc3Rpb25JZHMuZmlsdGVyKHFpZCA9PiBxaWQgIT09IGRlbGV0ZWRDaGlsZC5pZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzID0gdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZpbHRlcihnID0+IGcucXVlc3Rpb25JZHMubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3B0aW9uSWQob3B0OiBhbnkpOiBzdHJpbmcgfCBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBvcHQuZ2V0KCdpZCcpPy52YWx1ZSA/IG9wdC5nZXQoJ2lkJyk/LnZhbHVlIDogb3B0LmdldCgndXVpZCcpPy52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGlsZFF1ZXN0aW9uQnlJZChpZDogc3RyaW5nIHwgbnVtYmVyKTogQXNzZXNzbWVudFF1ZXN0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjaGlsZFF1ZXN0aW9ucycpPy52YWx1ZT8uZmluZCgocTogQXNzZXNzbWVudFF1ZXN0aW9uKSA9PiBxLmlkID09PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hpbGRRdWVzdGlvbkluZGV4KGlkOiBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2NoaWxkUXVlc3Rpb25zJyk/LnZhbHVlPy5maW5kSW5kZXgoKHE6IEFzc2Vzc21lbnRRdWVzdGlvbikgPT4gcS5pZCA9PT0gaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUNoaWxkUXVlc3Rpb25CeUlkKGlkOiBudW1iZXIgfCB1bmRlZmluZWQsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRDaGlsZFF1ZXN0aW9uSW5kZXgoaWQpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlQ2hpbGRRdWVzdGlvbihpbmRleCwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBidWlsZENoaWxkUXVlc3Rpb25Hcm91cHMoY2hpbGRRdWVzdGlvbnM6IEFzc2Vzc21lbnRRdWVzdGlvbltdKSB7XHJcbiAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzID0gW107XHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkUXVlc3Rpb25JZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5jb250cm9scy5mb3JFYWNoKG9wdCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbklkID0gdGhpcy5nZXRPcHRpb25JZChvcHQpO1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZExpc3QgPSBvcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy52YWx1ZSB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZVV1aWQoKSxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25JZDogb3B0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZHM6IFsuLi5jaGlsZExpc3RdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNoaWxkTGlzdC5mb3JFYWNoKChpZDogYW55KSA9PiBwcm9jZXNzZWRRdWVzdGlvbklkcy5hZGQoaWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjaGlsZFF1ZXN0aW9ucy5mb3JFYWNoKGNxID0+IHtcclxuICAgICAgICAgICAgaWYgKGNxLmlkICYmICFwcm9jZXNzZWRRdWVzdGlvbklkcy5oYXMoY3EuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGdlbmVyYXRlVXVpZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbklkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWRzOiBbY3EuaWRdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uR3JvdXBPcHRpb25DaGFuZ2UoZ3JvdXBJZDogc3RyaW5nLCBuZXdPcHRpb25JZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZmluZEluZGV4KGcgPT4gZy5pZCA9PT0gZ3JvdXBJZCk7XHJcbiAgICAgICAgaWYgKGdyb3VwSW5kZXggPT09IC0xKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHNbZ3JvdXBJbmRleF07XHJcblxyXG4gICAgICAgIGNvbnN0IG9sZE9wdGlvbklkID0gZ3JvdXAub3B0aW9uSWQ7XHJcblxyXG4gICAgICAgIGlmIChvbGRPcHRpb25JZCkge1xyXG4gICAgICAgICAgICBjb25zdCBvbGRPcHQgPSB0aGlzLm9wdGlvbnMuY29udHJvbHMuZmluZChvcHQgPT4gdGhpcy5nZXRPcHRpb25JZChvcHQpID09PSBvbGRPcHRpb25JZCk7XHJcbiAgICAgICAgICAgIGlmIChvbGRPcHQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZExpc3QgPSBbLi4uKG9sZE9wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnZhbHVlIHx8IFtdKV07XHJcbiAgICAgICAgICAgICAgICBjaGlsZExpc3QgPSBjaGlsZExpc3QuZmlsdGVyKGlkID0+ICFncm91cC5xdWVzdGlvbklkcy5pbmNsdWRlcyhpZCBhcyBhbnkpKTtcclxuICAgICAgICAgICAgICAgIG9sZE9wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnNldFZhbHVlKGNoaWxkTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nR3JvdXAgPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZmluZChnID0+IGcuaWQgIT09IGdyb3VwSWQgJiYgZy5vcHRpb25JZCA9PT0gbmV3T3B0aW9uSWQpO1xyXG5cclxuICAgICAgICBpZiAoZXhpc3RpbmdHcm91cCAmJiBuZXdPcHRpb25JZCkge1xyXG4gICAgICAgICAgICBleGlzdGluZ0dyb3VwLnF1ZXN0aW9uSWRzLnB1c2goLi4uZ3JvdXAucXVlc3Rpb25JZHMpO1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuc3BsaWNlKGdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdyb3VwLm9wdGlvbklkID0gbmV3T3B0aW9uSWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3T3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3T3B0ID0gdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZpbmQob3B0ID0+IHRoaXMuZ2V0T3B0aW9uSWQob3B0KSA9PT0gbmV3T3B0aW9uSWQpO1xyXG4gICAgICAgICAgICBpZiAobmV3T3B0KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRMaXN0ID0gWy4uLihuZXdPcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy52YWx1ZSB8fCBbXSldO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldChbLi4uY2hpbGRMaXN0LCAuLi5ncm91cC5xdWVzdGlvbklkc10pO1xyXG4gICAgICAgICAgICAgICAgbmV3T3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8uc2V0VmFsdWUoQXJyYXkuZnJvbShzZXQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnb0JhY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXNldEFuZFBvcHVsYXRlKHN0YXRlPy5wYXJlbnRGb3JtVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0QW5kUG9wdWxhdGUocGFyZW50VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNDb250cm9sID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIHdoaWxlIChvcHRpb25zQ29udHJvbC5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgb3B0aW9uc0NvbnRyb2wucmVtb3ZlQXQoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcHVsYXRlRm9ybShwYXJlbnRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzY3JvbGxUb1RvcCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zY3JvbGxDb250YWluZXIgJiYgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggdmgtMTAwIHBvc2l0aW9uLXJlbGF0aXZlIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCB8fCBpc0NoaWxkXCJcclxuICAgICAgICBjbGFzcz1cInAtMyBweC0yIGNvbC1hdXRvIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1DOERBRjkgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmQgZC1tZC1mbGV4IGQtbm9uZVwiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwibS0wIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xOCB2ZXJ0aWNhbC10ZXh0XCI+XHJcbiAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSElMRF9RVUVTVElPTiddfX1cclxuICAgICAgICA8L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBoLTEwMCBkLWZsZXggZmxleC1jb2x1bW4gcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICA8aGVhZGVyXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcG9zaXRpb24tc3RpY2t5IHRvcC0wIGNvbC0xMiBib3JkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgIDxwICpuZ0lmPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMFwiIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggZC1tZC1pbmxpbmUgZC1ub25lXCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuSU5QVVRfRklFTERfU0VUVElOR1MnXX19XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMFwiIChjbGljayk9XCJnb0JhY2soKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIGJvcmRlci0wIG91dGxpbmUtMCBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE0IGJnLXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkdPX0JBQ0snXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2dvLWJhY2suc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkdPX0JBQ0snXX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtbWQtZW5kIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0zIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvblN1Ym1pdCgpXCIgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5IGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7J29wYWNpdHktMCc6IGlzU3VibWl0dGluZ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlNBVkVfUVVFU1RJT04nXX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzU3VibWl0dGluZ1wiIFtkaWFtZXRlcl09XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTUwIHN0YXJ0LTUwIHRyYW5zbGF0ZS1taWRkbGUgYXNzZXNzbWVudC1zcGlubmVyLXdoaXRlXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImQtbWQtbm9uZVwiICpuZ0lmPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMFwiIG1hdC1kaWFsb2ctY2xvc2VcclxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5DTE9TRSddXCJcclxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvY2xvc2Uuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICA8ZGl2ICNzY3JvbGxDb250YWluZXIgY2xhc3M9XCJjb2wtMTIgcHktNCBweC1tZC00IHB4LTMgZmxleC1ncm93LTEgb3ZlcmZsb3cteS1hdXRvIGZvcm0tY29udGFpbmVyXCJcclxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJxdWVzdGlvbnNGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBiLTQgY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTIgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNiBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gY29sLTEyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlRZUEUnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInF1ZXN0aW9uVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuU0VMRUNUX1FVRVNUSU9OX1RZUEUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LW1hdC1zZWxlY3QgY29sLTEyIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTNcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBxdWVzdGlvblR5cGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInR5cGU/LmNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0eXBlPy5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWItMiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE2IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPlF1ZXN0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxhcHAtdGV4dC1lZGl0b3IgW3ByZVRleHRdPVwicXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ3F1ZXN0aW9uVGV4dCcpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cD8uZ2V0KCdxdWVzdGlvblRleHQnKT8ucGF0Y2hWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5FTlRFUl9RVUVTVElPTiddXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtY3VzdG9tLWFuZ3VsYXItZWRpdG9yLXdoaXRlIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCInOHJlbSdcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UZXh0Jyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UZXh0Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcG9zaXRpb24tcmVsYXRpdmUgbXQtM1wiICpuZ0lmPVwic2hvd0ZpZWxkKCdxdWVzdGlvbk1lZGlhJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicXVlc3Rpb25NZWRpYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX1FVRVNUSU9OX01FRElBJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvbk1lZGlhJyk/LnRvdWNoZWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvbk1lZGlhJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuSU5WQUxJRF9VUkwnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXgtMCBjb2wtMTIgcGItNFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtaW5DaGFyYWN0ZXJDb3VudCcpIHx8IHNob3dGaWVsZCgnbWF4Q2hhcmFjdGVyQ291bnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBzLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWluQ2hhcmFjdGVyQ291bnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUlOX0NIQVJBQ1RFUl9MSU1JVCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWluQ2hhcmFjdGVyQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuTk9UX1NFVCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSEFSQUNURVJTJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8uaGFzRXJyb3IoJ21pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuQ0FOTk9UX0JFX1pFUk8nXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBwZS0wXCIgKm5nSWY9XCJzaG93RmllbGQoJ21heENoYXJhY3RlckNvdW50JylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BWF9DSEFSQUNURVJfTElNSVQnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1heENoYXJhY3RlckNvdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLk5PVF9TRVQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnOiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LnRvdWNoZWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hBUkFDVEVSUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/Lmhhc0Vycm9yKCdtaW4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLkNBTk5PVF9CRV9aRVJPJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy5oYXNFcnJvcignbGVzc1RoYW5PckVxdWFsTWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NQVhfTElNSVRfR1JFQVRFUiddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wIGNvbC0xMiBwYi00XCIgKm5nSWY9XCJzaG93RmllbGQoJ21heEZpbGVTaXplJykgfHwgc2hvd0ZpZWxkKCdtYXhOb09mRmlsZXMnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBzLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4RmlsZVNpemUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFYX0ZJTEVfU0laRSddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWF4RmlsZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuTk9UX1NFVCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heEZpbGVTaXplJyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8udG91Y2hlZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQiddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heEZpbGVTaXplJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heEZpbGVTaXplJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heEZpbGVTaXplJyk/Lmhhc0Vycm9yKCdtaW4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLkNBTk5PVF9CRV9aRVJPJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcGUtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtYXhOb09mRmlsZXMnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFYX05PX09GX0ZJTEVTJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtYXhOb09mRmlsZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuTk9UX1NFVCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Tm9PZkZpbGVzJyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnOiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8udG91Y2hlZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5GSUxFUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Tm9PZkZpbGVzJyk/Lmhhc0Vycm9yKCdtaW4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5DQU5OT1RfQkVfWkVSTyddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBiLTQgY29sLTEyXCIgKm5nSWY9XCJzaG93RmllbGQoJ2N1c3RvbVJlZ2V4JylcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DVVNUT01fUkVHRVgnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJjdXN0b21SZWdleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX0NVU1RPTV9SRUdFWCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY3VzdG9tUmVnZXgnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY3VzdG9tUmVnZXgnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjdXN0b21SZWdleCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBjb2wtMTJcIiAqbmdJZj1cInNob3dGaWVsZCgndG90YWxNYXJrcycpICYmICFpc0NoaWxkICYmIHF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5UT1RBTF9NQVJLUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInRvdGFsTWFya3NcIiBwbGFjZWhvbGRlcj1cIjBcIiAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVJLUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3RvdGFsTWFya3MnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCd0b3RhbE1hcmtzJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG14LTAgY29sLTEyIHBiLTRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmllbGQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpIHx8IHNob3dGaWVsZCgnbWF4aW11bU51bWJlck9mT3B0aW9uJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBwcy0wXCIgKm5nSWY9XCJzaG93RmllbGQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NSU5fT1BUSU9OX1NFTEVDVF9MSU1JVCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWluaW11bU51bWJlck9mT3B0aW9uXCIgcGxhY2Vob2xkZXI9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnOiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5PUFRJT05TJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8uaGFzRXJyb3IoJ21pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLkNBTk5PVF9CRV9aRVJPJ10gfHwgJ0xpbWl0IGNhbm5vdCBiZSAwJ319PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBwZS0wXCIgKm5nSWY9XCJzaG93RmllbGQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVhfT1BUSU9OX1NFTEVDVF9MSU1JVCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWF4aW11bU51bWJlck9mT3B0aW9uXCIgW3BsYWNlaG9sZGVyXT1cIm9wdGlvbnMubGVuZ3RoIHx8IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KTsgY2hlY2tNYXhPcHRpb25zVmFsKCRldmVudCwgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHBvc2l0aW9uLWFic29sdXRlIGVuZC0wIG1lLTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuT1BUSU9OUyddfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/Lmhhc0Vycm9yKCdtaW4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5DQU5OT1RfQkVfWkVSTyddIHx8ICdMaW1pdCBjYW5ub3QgYmUgMCd9fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8uaGFzRXJyb3IoJ2xlc3NUaGFuT3JFcXVhbE1pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9MSU1JVF9HUkVBVEVSJ10gfHwgJ01heCBsaW1pdCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG1pbiBsaW1pdCd9fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBiLTQgY29sLTEyIG10LW1kLTNcIiAqbmdJZj1cInNob3dGaWVsZCgnb3B0aW9ucycpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCJpXCIgKm5nSWY9XCJvcHRpb24uZ2V0KCdpc0FjdGl2ZScpPy52YWx1ZSAhPT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweS1tZC0wIHB5LTMgYm9yZGVyLWJvdHRvbSBib3JkZXItbWQtMCBjb2wtMTIgZC1mbGV4IGZsZXgtd3JhcCBmbGV4LW1kLW5vd3JhcCBhbGlnbi1pdGVtcy1tZC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLW1kLTQgZ2FwLTNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZCBmbGV4LW1kLWdyb3ctMSBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC1tZC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucHQtbWQtM109XCJpID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBwLTIgYm9yZGVyLWdyZXktdGVuLTIgbXQtMVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm9wdGlvbkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5FTlRFUl9PUFRJT04nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3ctMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGJvcmRlci0wIG91dGxpbmUtMCBiZy10cmFuc3BhcmVudCBpbnB1dC1mb2N1cyBweS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZC1tZC1ub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkNMT1NFJ11cIiAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9jbG9zZS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5nZXQoJ29wdGlvbkxhYmVsJyk/LmludmFsaWQgJiYgb3B0aW9uLmdldCgnb3B0aW9uTGFiZWwnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgbXQtMVwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RmllbGQoJ29wdGlvbnMnLCAnc2hvd1dlaWdodGFnZScpICYmICFpc0NoaWxkICYmIHF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2l4IG1iLTIgbWItbWQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGlkZGVuLWxhYmVsJzogaSA+IDB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5XRUlHSFRBR0UnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgKGlucHV0KT1cImNoZWNrTWF4VmFsKCRldmVudCwgb3B0aW9uLmdldCgnd2VpZ2h0JykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwid2VpZ2h0XCIgKHdoZWVsKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTIgcHktbWQtMSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBvdXRsaW5lLTAgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC1tYXJrcy1pbnB1dCBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuV0VJR0hUQUdFJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RmllbGQoJ29wdGlvbnMnLCAnc2hvd1JlbWFya3MnKSAmJiAhaXNDaGlsZCAmJiBxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwXCIgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zaXggbWItMiBtYi1tZC0zIHBiLW1kLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hpZGRlbi1sYWJlbCc6IGkgPiAwfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUkVNQVJLUyddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicmVtYXJrc1JlcXVpcmVkXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVtYXJrc1JlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbWQtYmxvY2sgcHQtM1wiIFtjbGFzcy5jdXN0b20tbWFyZ2luXT1cImkgPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkNMT1NFJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Nsb3NlLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkT3B0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGJnLXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGJvcmRlci0wIGFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX09QVElPTiddfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTQgY29sLTEyIGJvcmRlci10b3BcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmllbGQoJ2NoaWxkUXVlc3Rpb25zJykgJiYgcXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMCAmJiAhaXNDaGlsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTYgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNISUxEX1FVRVNUSU9OUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgbWF0VG9vbHRpcD1cInt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSElMRF9RVUVTVElPTlNfSU5GTyddfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXBDbGFzcz1cImFzc2Vzc21lbnQtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLklORk8nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9pbmZvLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGNoaWxkUXVlc3Rpb25Hcm91cHM7IGxldCBncm91cEluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIHAtMyBteS0zIGFzc2Vzc21lbnQtYmctZ3JleS1vbmUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXRocmVlIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItM1wiICpuZ0lmPVwib3B0aW9ucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFTU0lHTkVEX09QVElPTiddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiZ3JvdXAub3B0aW9uSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkdyb3VwT3B0aW9uQ2hhbmdlKGdyb3VwLmlkLCAkZXZlbnQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLlNFTEVDVF9PUFRJT05fVE9fTElOSyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtbWF0LXNlbGVjdCBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYmctd2hpdGUgb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTNcIiBbdmFsdWVdPVwibnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5OT05FJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0IG9mIG9wdGlvbnMuY29udHJvbHM7IGxldCBvcEluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIm9wdC5nZXQoJ2lzQWN0aXZlJyk/LnZhbHVlICE9PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiIFt2YWx1ZV09XCJnZXRPcHRpb25JZChvcHQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC5nZXQoJ29wdGlvbkxhYmVsJyk/LnZhbHVlIHx8ICgnT3B0aW9uICcgKyAob3BJbmRleCArIDEpKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uSWQgb2YgZ3JvdXAucXVlc3Rpb25JZHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENoaWxkUXVlc3Rpb25CeUlkKHF1ZXN0aW9uSWQpIGFzIGNoaWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0xIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlFVRVNUSU9OJ119fSB7e2kgKyAxfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5ERUxFVEUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDaGlsZFF1ZXN0aW9uQnlJZChjaGlsZC5pZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvZGVsZXRlLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImNoaWxkPy5xdWVzdGlvblRleHQ/LlswXT8udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEVkaXRDaGlsZFF1ZXN0aW9uKGNoaWxkLCBnZXRDaGlsZFF1ZXN0aW9uSW5kZXgoY2hpbGQuaWQpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYmctd2hpdGUgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkRWRpdENoaWxkUXVlc3Rpb24odW5kZWZpbmVkLCB1bmRlZmluZWQsIGdyb3VwLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBib3JkZXItMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGJnLXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBvdXRsaW5lLTAgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wbHVzLXByaW1hcnkuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX01PUkUnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRFZGl0Q2hpbGRRdWVzdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTMgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1FREYzRkQgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIG91dGxpbmUtMCBjb2wtMTIgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBtdC0zIGJvcmRlci1BREM5RjZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BsdXMtcHJpbWFyeS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9DSElMRF9RVUVTVElPTiddfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTQgY29sLTEyIGJvcmRlci10b3BcIiAqbmdJZj1cInNob3dGaWVsZCgnaGludFRleHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTYgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9ISU5UJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXRleHQtZWRpdG9yIFtwcmVUZXh0XT1cInF1ZXN0aW9uc0Zvcm1Hcm91cD8uZ2V0KCdoaW50VGV4dCcpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlKT1cInF1ZXN0aW9uc0Zvcm1Hcm91cD8uZ2V0KCdoaW50VGV4dCcpPy5wYXRjaFZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX0hJTlQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWN1c3RvbS1hbmd1bGFyLWVkaXRvci13aGl0ZSBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiJzhyZW0nXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2hpbnRUZXh0Jyk/LmVycm9ycyAgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnaGludFRleHQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTQgY29sLTEyIGJvcmRlci10b3BcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1iLTIgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE4IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRklFTERTX1NFVFRJTkdTJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFOREFUT1JZJ119fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTExIGFzc2Vzc21lbnQtdGV4dC1ncmV5LWVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFOREFUT1JZX0RFU0MnXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiBuYW1lPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaXNNYW5kYXRvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ZpZWxkKCdpc0ZpbHRlckVuYWJsZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkZJTFRFUl9FTkFCTEVEJ119fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTExIGFzc2Vzc21lbnQtdGV4dC1ncmV5LWVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRklMVEVSX0VOQUJMRURfREVTQyddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIG5hbWU9XCJpc0ZpbHRlckVuYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaXNGaWx0ZXJFbmFibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ZpZWxkKCdpc0ZpbHRlckVuYWJsZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdpc0ZpbHRlckVuYWJsZWQnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlFVRVNUSU9OX05BTUUnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicXVlc3Rpb25TdWJUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuUVVFU1RJT05fTkFNRSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnOiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblN1YlRleHQnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblN1YlRleHQnKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25TdWJUZXh0Jyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25TdWJUZXh0Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGNvbC0xMlwiICpuZ0lmPVwiIWlzQ2hpbGQgJiYgcXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMCAmJiAoc2tpbGxzTGlzdD8ubGVuZ3RoID8/IDApID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFQX1NLSUxMUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNraWxsQ29kZXNcIiBtdWx0aXBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5TRUxFQ1RfU0tJTExTJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwiYXNzZXNzbWVudC1jaGVja2JveGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1tYXQtc2VsZWN0IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCIgKm5nRm9yPVwibGV0IHNraWxsIG9mIHNraWxsc0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNraWxsPy5jb2RlXCI+e3tza2lsbD8ubGFiZWxzPy5bMF0/LnRleHR9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
748
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbnMtYXNzZXNzbWVudC9zcmMvbGliL21vZHVsZXMvYXNzZXNzbWVudC1tYWtlci9jb21wb25lbnRzL2Fzc2Vzc21lbnQtYnVpbGRlci9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvYXNzZXNzbWVudC1idWlsZGVyL2Fzc2Vzc21lbnQtYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFRbkUsTUFBTSxPQUFPLDBCQUEwQjtJQXVCbkMsWUFDWSxXQUF3QixFQUN4Qix3QkFBa0QsRUFDbEQsc0JBQThDLEVBQy9DLFNBQW1ELEVBQzFCLFVBQWU7UUFKdkMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQy9DLGNBQVMsR0FBVCxTQUFTLENBQTBDO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQUs7UUEzQm5ELGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxnQkFBVyxHQUE4QixF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Q0FBQyxLQUFhLEVBQUUsSUFBUztRQUNoQyxPQUFPLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksS0FBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYSxFQUFFLE9BQVk7UUFDdEMsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhLEVBQUUsS0FBVTtRQUNwQyxPQUFPLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEVBQUUsS0FBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQzVELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsRUFBTztRQUNwQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDL0MsQ0FBQzs7d0hBN3ZCUSwwQkFBMEIsdUpBNEJ2QixlQUFlOzRHQTVCbEIsMEJBQTBCLHNMQ2hCdkMseWdzQ0F5Yk07NEZEemFPLDBCQUEwQjtrQkFOdEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUscUNBQXFDO29CQUNsRCxTQUFTLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztpQkFDckQ7OzBCQThCUSxNQUFNOzJCQUFDLGVBQWU7NENBckJHLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBRdWVzdGlvblR5cGUsIFJlZkRhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRNYWtlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LW1ha2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRdWVzdGlvblBhcGVyU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLXBhcGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Fzc2Vzc21lbnQtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZGVlcENsb25lLCBnZW5lcmF0ZVV1aWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1hcHAtYXNzZXNzbWVudC1idWlsZGVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBc3Nlc3NtZW50QnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gICAgaW1hZ2VDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIHF1ZXN0aW9uVHlwZXM6IFF1ZXN0aW9uVHlwZVtdID0gW107XHJcbiAgICBxdWVzdGlvbkRldGFpbHM6IEFzc2Vzc21lbnRRdWVzdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gICAgcnVsZXM6IGFueSA9IHt9O1xyXG4gICAgcXVlc3Rpb25TdGFjazogeyBwYXJlbnRGb3JtVmFsdWU6IEFzc2Vzc21lbnRRdWVzdGlvbiwgZWRpdGluZ1F1ZXN0aW9uSW5kZXg/OiBudW1iZXIsIGFkZGluZ1RvR3JvdXBJZD86IHN0cmluZyB9W10gPSBbXTtcclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRhaW5lcicpIHNjcm9sbENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgY2hpbGRRdWVzdGlvbkdyb3VwczogeyBpZDogc3RyaW5nLCBvcHRpb25JZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCwgcXVlc3Rpb25JZHM6IChzdHJpbmcgfCBudW1iZXIpW10gfVtdID0gW107XHJcblxyXG4gICAgcXVlc3Rpb25zRm9ybUdyb3VwITogRm9ybUdyb3VwO1xyXG4gICAgcXVlc3Rpb25CYW5rOiBSZWNvcmQ8bnVtYmVyLCBBc3Nlc3NtZW50UXVlc3Rpb24+ID0ge307XHJcbiAgICBpc0NoaWxkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvLyBwYXJlbnRRdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgYXNzZXNzbWVudElkOiBudW1iZXIgPSAwO1xyXG4gICAgc3RhbmRhbG9uZU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlzTG9ja2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaXNTdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBza2lsbHNMaXN0OiBSZWZEYXRhW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIGFzc2Vzc21lbnRCdWlsZGVyU2VydmljZTogQXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYXNzZXNzbWVudE1ha2VyU2VydmljZTogQXNzZXNzbWVudE1ha2VyU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QXNzZXNzbWVudEJ1aWxkZXJDb21wb25lbnQ+LFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGlhbG9nRGF0YTogYW55LFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxhYmVsQ29uZmlnID0gdGhpcy5kaWFsb2dEYXRhPy5sYWJlbENvbmZpZztcclxuICAgICAgICB0aGlzLmltYWdlQ29uZmlnID0gdGhpcy5kaWFsb2dEYXRhPy5pbWFnZUNvbmZpZztcclxuICAgICAgICB0aGlzLnJ1bGVzID0gdGhpcy5kaWFsb2dEYXRhPy5ydWxlcztcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uVHlwZXMgPSB0aGlzLmRpYWxvZ0RhdGE/LnF1ZXN0aW9uVHlwZXM7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmsgPSB0aGlzLmRpYWxvZ0RhdGE/LnF1ZXN0aW9uQmFuaztcclxuICAgICAgICB0aGlzLmlzQ2hpbGQgPSB0aGlzLmRpYWxvZ0RhdGE/LmlzQ2hpbGQ7XHJcbiAgICAgICAgdGhpcy5za2lsbHNMaXN0ID0gdGhpcy5kaWFsb2dEYXRhPy5za2lsbHNMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudElkID0gdGhpcy5kaWFsb2dEYXRhPy5hc3Nlc3NtZW50SWQ7XHJcbiAgICAgICAgdGhpcy5zdGFuZGFsb25lTW9kZSA9IHRoaXMuZGlhbG9nRGF0YT8uc3RhbmRhbG9uZU1vZGUgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xvY2tlZCA9IHRoaXMuZGlhbG9nRGF0YT8uaXNMb2NrZWQgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEucXVlc3Rpb25EZXRhaWxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25EZXRhaWxzID0gZGVlcENsb25lKHRoaXMuZGlhbG9nRGF0YT8ucXVlc3Rpb25EZXRhaWxzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXR1cEZvcm1Hcm91cCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlEeW5hbWljVmFsaWRhdG9ycygpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZW5lcmF0ZUNoaWxkUXVlc3Rpb25MaXN0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ2hpbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1bmlxdWVJZHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkRldGFpbHM/LmRlZmF1bHRPcHRpb25zTGlzdD8uZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3Q/LmZvckVhY2goaWQgPT4gdW5pcXVlSWRzLmFkZChpZCkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh1bmlxdWVJZHMpPy5tYXAoaWQgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhbmtbaWRdID8gZGVlcENsb25lKHRoaXMucXVlc3Rpb25CYW5rW2lkXSkgOiBudWxsO1xyXG4gICAgICAgIH0pPy5maWx0ZXIoQm9vbGVhbikgYXMgQXNzZXNzbWVudFF1ZXN0aW9uW107XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBGb3JtR3JvdXAoKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBxdWVzdGlvblRleHQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uU3ViVGV4dDogWycnXSxcclxuICAgICAgICAgICAgaXNGaWx0ZXJFbmFibGVkOiBbZmFsc2VdLFxyXG4gICAgICAgICAgICBpc01hbmRhdG9yeTogW2ZhbHNlXSxcclxuICAgICAgICAgICAgLy8gdmlzaWJpbGl0eTogW3RydWVdLFxyXG4gICAgICAgICAgICB0b3RhbE1hcmtzOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1pbkNoYXJhY3RlckNvdW50OiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1heENoYXJhY3RlckNvdW50OiBbbnVsbF0sXHJcbiAgICAgICAgICAgIG1heGltdW1OdW1iZXJPZk9wdGlvbjogW251bGxdLFxyXG4gICAgICAgICAgICBtaW5pbXVtTnVtYmVyT2ZPcHRpb246IFtudWxsXSxcclxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IFtudWxsXSxcclxuICAgICAgICAgICAgbWF4Tm9PZkZpbGVzOiBbbnVsbF0sXHJcbiAgICAgICAgICAgIGN1c3RvbVJlZ2V4OiBbJyddLFxyXG4gICAgICAgICAgICBoaW50VGV4dDogWycnXSxcclxuICAgICAgICAgICAgcXVlc3Rpb25NZWRpYTogWycnXSxcclxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXHJcbiAgICAgICAgICAgIGNoaWxkUXVlc3Rpb25zOiBbW11dLFxyXG4gICAgICAgICAgICBza2lsbENvZGVzOiBbW11dXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5RHluYW1pY1ZhbGlkYXRvcnMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbkNoYXJhY3RlckNvdW50Jyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkRldGFpbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUZvcm0odGhpcy5xdWVzdGlvbkRldGFpbHMsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDaGlsZFF1ZXN0aW9uR3JvdXBzKFtdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcG9wdWxhdGVGb3JtKHF1ZXN0aW9uRGV0YWlsczogQXNzZXNzbWVudFF1ZXN0aW9uLCBidWlsZENoaWxkR3JvdXBzOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoIXF1ZXN0aW9uRGV0YWlscykgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkUXVlc3Rpb25zID0gcXVlc3Rpb25EZXRhaWxzPy5jaGlsZFF1ZXN0aW9ucyB8fCB0aGlzLmdlbmVyYXRlQ2hpbGRRdWVzdGlvbkxpc3QoKTtcclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdldFF1ZXN0aW9uRFRPKHsgLi4ucXVlc3Rpb25EZXRhaWxzLCBjaGlsZFF1ZXN0aW9ucyB9KTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGZvcm1EYXRhKTtcclxuICAgICAgICBpZiAoZm9ybURhdGEub3B0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsTWFya3MgPSBOdW1iZXIoZm9ybURhdGEudG90YWxNYXJrcykgfHwgMDtcclxuICAgICAgICAgICAgZm9ybURhdGEub3B0aW9ucy5mb3JFYWNoKChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0R3JvdXAgPSB0aGlzLmNyZWF0ZU9wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsTWFya3MgPiAwICYmIG9wdC53ZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBvcHQud2VpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0LndlaWdodCA9IHBhcnNlRmxvYXQoKChOdW1iZXIob3B0LndlaWdodCkgKiB0b3RhbE1hcmtzKSAvIDEwMCkudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvcHRHcm91cC5wYXRjaFZhbHVlKG9wdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRHcm91cCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYnVpbGRDaGlsZEdyb3Vwcykge1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkQ2hpbGRRdWVzdGlvbkdyb3VwcyhjaGlsZFF1ZXN0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VibWl0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTG9ja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuV0FSTklORy5RVUVTVElPTl9MT0NLRUQnXSB8fCAnVGhpcyBxdWVzdGlvbiBpcyBwYXJ0IG9mIGEgcHVibGlzaGVkIGFzc2Vzc21lbnQgYW5kIGNhbm5vdCBiZSBlZGl0ZWQuJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbmZvJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy52YWx1ZSkgfHwgMDtcclxuICAgICAgICBjb25zdCBxVHlwZSA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25UeXBlJyk/LnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNWYWx1ZXMgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKT8udmFsdWUgfHwgW107XHJcbiAgICAgICAgY29uc3Qgc2hvd1dlaWdodGFnZSA9IHRoaXMuc2hvd0ZpZWxkKCdvcHRpb25zJywgJ3Nob3dXZWlnaHRhZ2UnKTtcclxuXHJcbiAgICAgICAgaWYgKHNob3dXZWlnaHRhZ2UgJiYgdG90YWxNYXJrcyA+IDApIHtcclxuICAgICAgICAgICAgbGV0IHRvdGFsV2VpZ2h0cyA9IDA7XHJcbiAgICAgICAgICAgIGxldCBoYXNJbnZhbGlkV2VpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0LmlzQWN0aXZlID09PSBmYWxzZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3ID0gTnVtYmVyKG9wdC53ZWlnaHQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAodyA+IHRvdGFsTWFya3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNJbnZhbGlkV2VpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRvdGFsV2VpZ2h0cyArPSB3O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaGFzSW52YWxpZFdlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVG8ga2VlcCB3aXRoaW4gZXhpc3Rpbmcgc3R5bGVzLCBlbWl0dGluZyBkZWZhdWx0IGVycm9yIHdpdGggb3VyIHNwZWNpZmljIG1lc3NhZ2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5PUFRJT05fU0NPUkVfR1JFQVRFUl9USEFOX1RPVEFMX01BUktTJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJyAmJiB0b3RhbFdlaWdodHMgPiB0b3RhbE1hcmtzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuU1VNX09GX09QVElPTl9TQ09SRVNfR1JFQVRFUl9USEFOX1RPVEFMX01BUktTJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gZGVlcENsb25lKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLnZhbHVlKTtcclxuICAgICAgICBpZiAoc2hvd1dlaWdodGFnZSAmJiB0b3RhbE1hcmtzID4gMCAmJiBmb3JtVmFsdWUub3B0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvcm1WYWx1ZS5vcHRpb25zLmZvckVhY2goKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0LndlaWdodCAhPT0gdW5kZWZpbmVkICYmIG9wdC53ZWlnaHQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHQud2VpZ2h0ID0gcGFyc2VGbG9hdCgoKE51bWJlcihvcHQud2VpZ2h0KSAvIHRvdGFsTWFya3MpICogMTAwKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gY2hpbGQgcXVlc3Rpb24gbG9naWNcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnF1ZXN0aW9uU3RhY2tbdGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0YXRlPy5lZGl0aW5nUXVlc3Rpb25JbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLnBhcmVudEZvcm1WYWx1ZS5jaGlsZFF1ZXN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudEZvcm1WYWx1ZS5jaGlsZFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFF1ZXN0aW9uID0gc3RhdGUucGFyZW50Rm9ybVZhbHVlLmNoaWxkUXVlc3Rpb25zW3N0YXRlLmVkaXRpbmdRdWVzdGlvbkluZGV4XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXRRdWVzdGlvbkRUTyhmb3JtVmFsdWUsIGNoaWxkUXVlc3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IGF3YWl0IHRoaXMudXBkYXRlUXVlc3Rpb24ocGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Rm9ybVZhbHVlLmNoaWxkUXVlc3Rpb25zW3N0YXRlLmVkaXRpbmdRdWVzdGlvbkluZGV4XSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbj8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb24uaWRdID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcsIHBheWxvYWQgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQWRkIG5ldyBjaGlsZCBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXRRdWVzdGlvbkRUTyhmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IGF3YWl0IHRoaXMuY3JlYXRlUXVlc3Rpb24ocGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU/LnBhcmVudEZvcm1WYWx1ZT8uY2hpbGRRdWVzdGlvbnM/LnB1c2gocXVlc3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbj8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb24uaWRdID0gcXVlc3Rpb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncnAgPSB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZmluZCgoZzogYW55KSA9PiBnLmlkID09PSBzdGF0ZS5hZGRpbmdUb0dyb3VwSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnAucXVlc3Rpb25JZHM/LnB1c2gocXVlc3Rpb24/LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncnAub3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHQgPSBzdGF0ZS5wYXJlbnRGb3JtVmFsdWU/LmRlZmF1bHRPcHRpb25zTGlzdD8uZmluZCgobzogYW55KSA9PiAoby5pZCB8fCBvLnV1aWQpID09IGdycC5vcHRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuY2hpbGRRdWVzdGlvbkxpc3QgPSBvcHQuY2hpbGRRdWVzdGlvbkxpc3QgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5jaGlsZFF1ZXN0aW9uTGlzdC5wdXNoKHF1ZXN0aW9uLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdlbmVyYXRlVXVpZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbklkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWRzOiBbcXVlc3Rpb24/LmlkXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQT1NUJywgcGF5bG9hZCB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmUtcG9wdWxhdGUgcGFyZW50IGZvcm1cclxuICAgICAgICAgICAgdGhpcy5yZXNldEFuZFBvcHVsYXRlKHN0YXRlPy5wYXJlbnRGb3JtVmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBxdWVzdGlvbkRUTyA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLnNldFF1ZXN0aW9uRFRPKGZvcm1WYWx1ZSwgdGhpcy5xdWVzdGlvbkRldGFpbHMpO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIGxvY2FsIHRlbXBsYXRlIHRyZWUgcmVwcmVzZW50YXRpb25cclxuICAgICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25EZXRhaWxzPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbkRUTyA9IGF3YWl0IHRoaXMudXBkYXRlUXVlc3Rpb24ocXVlc3Rpb25EVE8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbkRUTz8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb25EVE8uaWRdID0gcXVlc3Rpb25EVE9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dEYXRhPy5zbmFja2Jhck1lc3NhZ2VFbWl0dGVyPy5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlFVRVNUSU9OX1VQREFURURfU1VDQ0VTUyddLCB0eXBlOiAnc3VjY2VzcycgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBzdWNjZXNzOiB0cnVlLCBxdWVzdGlvbjogcXVlc3Rpb25EVE8gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0RhdGE/LnNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI/LmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BBVENIJywgcGF5bG9hZDogcXVlc3Rpb25EVE8gfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhbmRhbG9uZU1vZGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU3RhbmRhbG9uZVF1ZXN0aW9uKHF1ZXN0aW9uRFRPKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlT3JFZGl0QXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocXVlc3Rpb25EVE8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlU3RhbmRhbG9uZVF1ZXN0aW9uKHF1ZXN0aW9uRFRPOiBBc3Nlc3NtZW50UXVlc3Rpb24pIHtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25EVE8pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXM/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcmVzLmlkXSA9IHJlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlFVRVNUSU9OX0NSRUFURURfU1VDQ0VTUyddIHx8ICdRdWVzdGlvbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHtcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiByZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhbmRhbG9uZU1vZGU6IHRydWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BPU1QnLCBwYXlsb2FkOiBxdWVzdGlvbkRUTyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNyZWF0ZVF1ZXN0aW9uKHBheWxvYWQ6IGFueSk6IFByb21pc2U8QXNzZXNzbWVudFF1ZXN0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmNyZWF0ZVF1ZXN0aW9uKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVzKSA9PiByZXNvbHZlKHJlcyBhcyBBc3Nlc3NtZW50UXVlc3Rpb24pLFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHJlamVjdChlcnIpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVF1ZXN0aW9uKHBheWxvYWQ6IGFueSk6IFByb21pc2U8QXNzZXNzbWVudFF1ZXN0aW9uPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLnBhdGNoUXVlc3Rpb24ocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHJlc29sdmUocmVzIGFzIEFzc2Vzc21lbnRRdWVzdGlvbiksXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4gcmVqZWN0KGVycilcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlT3JFZGl0QXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uUGFwZXIgPSBkZWVwQ2xvbmUodGhpcy5kaWFsb2dEYXRhPy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEpO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25RdWVzdGlvbiA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlU2VjdGlvblF1ZXN0aW9uKHF1ZXN0aW9uKTtcclxuICAgICAgICBpZiAoIXRoaXMuZGlhbG9nRGF0YT8uc2VjdGlvbkRldGFpbHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IHF1ZXN0aW9uUGFwZXI/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdDtcclxuICAgICAgICAgICAgY29uc3QgbGFzdFNlcXVlbmNlID0gbGlzdD8ubGVuZ3RoID8gbGlzdFtsaXN0Lmxlbmd0aCAtIDFdLm9yZGVyTm8gfHwgMCA6IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlY3Rpb24gPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5jcmVhdGVOZXdTZWN0aW9uKGxhc3RTZXF1ZW5jZSArIDEpO1xyXG5cclxuICAgICAgICAgICAgbmV3U2VjdGlvbj8uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/LnB1c2goc2VjdGlvblF1ZXN0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uUGFwZXI/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8ucHVzaChuZXdTZWN0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uUmVmID0gcXVlc3Rpb25QYXBlcj8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5maW5kKChzZWN0aW9uOiBRdWVzdGlvblBhcGVyU2VjdGlvbikgPT4gc2VjdGlvbj8uaWQgPT0gdGhpcy5kaWFsb2dEYXRhPy5zZWN0aW9uRGV0YWlscz8uaWQpO1xyXG4gICAgICAgICAgICBzZWN0aW9uUmVmPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ucHVzaChzZWN0aW9uUXVlc3Rpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25QYXBlckRUTyA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlUXVlc3Rpb25QYXBlckRUTyhxdWVzdGlvblBhcGVyLCB0aGlzLnF1ZXN0aW9uQmFuayk7XHJcbiAgICAgICAgY29uc3QgYXNzZXNzbWVudERUTyA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlQXNzZXNzbWVudERUTyh0aGlzLmFzc2Vzc21lbnRJZCwgcXVlc3Rpb25QYXBlckRUTyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnQ6IGFzc2Vzc21lbnREVE8sXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uUGFwZXI6IHF1ZXN0aW9uUGFwZXJEVE9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFwaUNhbGwgPSB0aGlzLmFzc2Vzc21lbnRJZFxyXG4gICAgICAgICAgICA/IHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmNyZWF0ZUFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpO1xyXG5cclxuICAgICAgICBhcGlDYWxsLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHtcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc2Vzc21lbnRJZDogcmVzPy5hc3Nlc3NtZW50Py5pZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblBhcGVyOiByZXM/LnF1ZXN0aW9uUGFwZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25NYXA6IHJlcz8ucXVlc3Rpb25NYXBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YT8uc25hY2tiYXJNZXNzYWdlRW1pdHRlcj8uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6IHRoaXMuYXNzZXNzbWVudElkID8gJ1BBVENIJyA6ICdQT1NUJywgcGF5bG9hZCB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUR5bmFtaWNWYWxpZGF0b3JzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5ydWxlcyB8fCBPYmplY3Qua2V5cyh0aGlzLnJ1bGVzKS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwO1xyXG4gICAgICAgIGNvbnN0IHFUeXBlID0gZm9ybS5nZXQoJ3F1ZXN0aW9uVHlwZScpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBjdXJyZW50UnVsZXMgPSB0aGlzLnJ1bGVzW3FUeXBlXSB8fCB7fTtcclxuXHJcbiAgICAgICAgY29uc3QgZXhjbHVkZWRDb250cm9scyA9IG5ldyBTZXQoWydxdWVzdGlvblR5cGUnLCAncXVlc3Rpb25UZXh0JywgJ29wdGlvbnMnLCAndmlzaWJpbGl0eScsICdpc01hbmRhdG9yeScsICdxdWVzdGlvblN1YlRleHQnLCAnc2tpbGxDb2RlcyddKTtcclxuXHJcbiAgICAgICAgLy8gSGFuZGxlIG5vcm1hbCBjb250cm9sc1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZvcm0uY29udHJvbHMpLmZvckVhY2goKFtrZXksIGNvbnRyb2xdKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChleGNsdWRlZENvbnRyb2xzLmhhcyhrZXkpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBydWxlID0gY3VycmVudFJ1bGVzW2tleV07XHJcblxyXG4gICAgICAgICAgICBpZiAocnVsZT8udmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHJ1bGU/LnJlcXVpcmVkID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW107XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAncXVlc3Rpb25NZWRpYScpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKGh0dHBzPzpcXC9cXC8pPyhbXFxkYS16XFwuLV0rKVxcLihbYS16XFwuXXsyLDZ9KShbXFwvXFx3IFxcLi1dKikqXFwvPyhcXD9bXlxcc10qKT8kL2kpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdtaW5DaGFyYWN0ZXJDb3VudCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ21heENoYXJhY3RlckNvdW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjdHJsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbkN0cmwgPSBjdHJsLnBhcmVudD8uZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5WYWwgPSBtaW5DdHJsPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4VmFsID0gY3RybC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pblZhbCAhPT0gbnVsbCAmJiBtaW5WYWwgIT09IHVuZGVmaW5lZCAmJiBtaW5WYWwgIT09ICcnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhWYWwgIT09IG51bGwgJiYgbWF4VmFsICE9PSB1bmRlZmluZWQgJiYgbWF4VmFsICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihtYXhWYWwpIDw9IE51bWJlcihtaW5WYWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGVzc1RoYW5PckVxdWFsTWluOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnbWluaW11bU51bWJlck9mT3B0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnbWF4aW11bU51bWJlck9mT3B0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjdHJsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbkN0cmwgPSBjdHJsLnBhcmVudD8uZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluVmFsID0gbWluQ3RybD8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFZhbCA9IGN0cmwudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5WYWwgIT09IG51bGwgJiYgbWluVmFsICE9PSB1bmRlZmluZWQgJiYgbWluVmFsICE9PSAnJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsICE9PSBudWxsICYmIG1heFZhbCAhPT0gdW5kZWZpbmVkICYmIG1heFZhbCAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIobWF4VmFsKSA8PSBOdW1iZXIobWluVmFsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGxlc3NUaGFuT3JFcXVhbE1pbjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ21heEZpbGVTaXplJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnbWF4Tm9PZkZpbGVzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbigxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycy5sZW5ndGggPiAwID8gdmFsaWRhdG9ycyA6IG51bGwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoa2V5ID09PSAnY2hpbGRRdWVzdGlvbnMnID8gW10gOiBudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIEhhbmRsZSBvcHRpb25zIEZvcm1BcnJheVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNDb250cm9sID0gZm9ybS5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc1J1bGUgPSBjdXJyZW50UnVsZXNbJ29wdGlvbnMnXTtcclxuXHJcbiAgICAgICAgaWYgKCFvcHRpb25zUnVsZT8udmlzaWJsZSkge1xyXG4gICAgICAgICAgICBvcHRpb25zQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgb3B0aW9uc0NvbnRyb2wuY2xlYXIoKTtcclxuICAgICAgICAgICAgb3B0aW9uc0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNWYWxpZGF0b3IgPSBvcHRpb25zUnVsZT8ucmVxdWlyZWQgPyAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbnMgPSAoY29udHJvbC52YWx1ZSB8fCBbXSkuZmlsdGVyKChvcHQ6IGFueSkgPT4gb3B0LmlzQWN0aXZlICE9PSBmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3RpdmVPcHRpb25zLmxlbmd0aCA+IDAgPyBudWxsIDogeyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgIH0gOiBudWxsO1xyXG5cclxuICAgICAgICBvcHRpb25zQ29udHJvbC5zZXRWYWxpZGF0b3JzKG9wdGlvbnNWYWxpZGF0b3IpO1xyXG5cclxuICAgICAgICBjb25zdCBzaG93V2VpZ2h0YWdlID0gb3B0aW9uc1J1bGU/LnNob3dXZWlnaHRhZ2U7XHJcbiAgICAgICAgY29uc3Qgc2hvd1JlbWFya3MgPSBvcHRpb25zUnVsZT8uc2hvd1JlbWFya3M7XHJcblxyXG4gICAgICAgIG9wdGlvbnNDb250cm9sLmNvbnRyb2xzLmZvckVhY2gob3B0R3JvdXAgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB3ZWlnaHRDdHJsID0gb3B0R3JvdXAuZ2V0KCd3ZWlnaHQnKTtcclxuICAgICAgICAgICAgY29uc3QgcmVtYXJrc0N0cmwgPSBvcHRHcm91cC5nZXQoJ3JlbWFya3NSZXF1aXJlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFzaG93V2VpZ2h0YWdlKSB3ZWlnaHRDdHJsPy5zZXRWYWx1ZSgwLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIGlmICghc2hvd1JlbWFya3MpIHJlbWFya3NDdHJsPy5zZXRWYWx1ZShmYWxzZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cclxuICAgICAgICAgICAgd2VpZ2h0Q3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHJlbWFya3NDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgb3B0aW9uc0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0ZpZWxkKGZpZWxkTmFtZTogc3RyaW5nLCBuZXN0ZWRQcm9wPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25UeXBlID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXA/LmdldCgncXVlc3Rpb25UeXBlJyk/LnZhbHVlO1xyXG4gICAgICAgIGlmICghcXVlc3Rpb25UeXBlIHx8ICF0aGlzLnJ1bGVzW3F1ZXN0aW9uVHlwZV0gfHwgIXRoaXMucnVsZXNbcXVlc3Rpb25UeXBlXVtmaWVsZE5hbWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5lc3RlZFByb3ApIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5ydWxlc1txdWVzdGlvblR5cGVdW2ZpZWxkTmFtZV1bbmVzdGVkUHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAhIXRoaXMucnVsZXNbcXVlc3Rpb25UeXBlXVtmaWVsZE5hbWVdPy52aXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zKCk6IEZvcm1BcnJheSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpIGFzIEZvcm1BcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRPcHRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2godGhpcy5jcmVhdGVPcHRpb24oKSk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlT3B0aW9uKGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCByZW1vdmVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmF0KGluZGV4KTtcclxuICAgICAgICBjb25zdCByZW1vdmVkT3B0aW9uSWQgPSByZW1vdmVkT3B0aW9uLmdldCgnaWQnKT8udmFsdWU7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZE9wdGlvblV1aWQgPSByZW1vdmVkT3B0aW9uLmdldCgndXVpZCcpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCB1bmlxdWVJZCA9IHJlbW92ZWRPcHRpb25JZCB8fCByZW1vdmVkT3B0aW9uVXVpZDtcclxuXHJcbiAgICAgICAgaWYgKHJlbW92ZWRPcHRpb25JZCkge1xyXG4gICAgICAgICAgICByZW1vdmVkT3B0aW9uLmdldCgnaXNBY3RpdmUnKT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNoaWxkUXVlc3Rpb25Hcm91cHMuZm9yRWFjaChnID0+IHtcclxuICAgICAgICAgICAgaWYgKGcub3B0aW9uSWQgPT09IHVuaXF1ZUlkKSB7XHJcbiAgICAgICAgICAgICAgICBnLm9wdGlvbklkID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBtYXhDdHJsID0gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKTtcclxuICAgICAgICBpZiAobWF4Q3RybCAmJiBtYXhDdHJsLnZhbHVlICE9PSBudWxsICYmIG1heEN0cmwudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBtYXhDdHJsLnZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25zQ291bnQgPSB0aGlzLm9wdGlvbnMuY29udHJvbHMuZmlsdGVyKG9wdCA9PiBvcHQuZ2V0KCdpc0FjdGl2ZScpPy52YWx1ZSAhPT0gZmFsc2UpLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKE51bWJlcihtYXhDdHJsLnZhbHVlKSA+IGFjdGl2ZU9wdGlvbnNDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgbWF4Q3RybC5zZXRWYWx1ZShhY3RpdmVPcHRpb25zQ291bnQgfHwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlT3B0aW9uKCk6IEZvcm1Hcm91cCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBpZDogWzBdLFxyXG4gICAgICAgICAgICB1dWlkOiBbZ2VuZXJhdGVVdWlkKCldLFxyXG4gICAgICAgICAgICBvcHRpb25MYWJlbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgd2VpZ2h0OiBbMF0sXHJcbiAgICAgICAgICAgIHJlbWFya3NSZXF1aXJlZDogW2ZhbHNlXSxcclxuICAgICAgICAgICAgaXNBY3RpdmU6IFt0cnVlXSxcclxuICAgICAgICAgICAgY2hpbGRRdWVzdGlvbkxpc3Q6IFtbXV1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhbGxvd09ubHlOdW1iZXJzKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBldmVudC50YXJnZXQudmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja01heFZhbChldmVudDogYW55LCBjb250cm9sOiBhbnkpIHtcclxuICAgICAgICBjb25zdCB0b3RhbE1hcmtzID0gTnVtYmVyKHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy52YWx1ZSkgfHwgMDtcclxuICAgICAgICBsZXQgdmFsID0gTnVtYmVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgaWYgKHZhbCA+IHRvdGFsTWFya3MpIHtcclxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdG90YWxNYXJrcztcclxuICAgICAgICAgICAgY29udHJvbD8uc2V0VmFsdWUodG90YWxNYXJrcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja01heE9wdGlvbnNWYWwoZXZlbnQ6IGFueSwgY29udHJvbDogYW55KSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9uc0NvdW50ID0gdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZpbHRlcihvcHQgPT4gb3B0LmdldCgnaXNBY3RpdmUnKT8udmFsdWUgIT09IGZhbHNlKS5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHZhbCA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgIGlmICh2YWwgPiBhY3RpdmVPcHRpb25zQ291bnQpIHtcclxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gYWN0aXZlT3B0aW9uc0NvdW50O1xyXG4gICAgICAgICAgICBjb250cm9sPy5zZXRWYWx1ZShhY3RpdmVPcHRpb25zQ291bnQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW1hZ2VFcnJvckhhbmRsZXIoZXZlbnQ6IGFueSwgZmlsZVBhdGg6IHN0cmluZykge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC5zcmMgPSBmaWxlUGF0aDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRFZGl0Q2hpbGRRdWVzdGlvbihjaGlsZFF1ZXN0aW9uPzogQXNzZXNzbWVudFF1ZXN0aW9uLCBpbmRleD86IG51bWJlciwgZ3JvdXBJZD86IHN0cmluZykge1xyXG4gICAgICAgIC8vIFNhdmUgY3VycmVudCBwYXJlbnQgc3RhdGVcclxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBkZWVwQ2xvbmUodGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAudmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsTWFya3MgPSBOdW1iZXIoZm9ybVZhbHVlLnRvdGFsTWFya3MpIHx8IDA7XHJcbiAgICAgICAgY29uc3Qgc2hvd1dlaWdodGFnZSA9IHRoaXMuc2hvd0ZpZWxkKCdvcHRpb25zJywgJ3Nob3dXZWlnaHRhZ2UnKTtcclxuXHJcbiAgICAgICAgaWYgKHNob3dXZWlnaHRhZ2UgJiYgdG90YWxNYXJrcyA+IDAgJiYgZm9ybVZhbHVlLm9wdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmb3JtVmFsdWUub3B0aW9ucy5mb3JFYWNoKChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdC53ZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBvcHQud2VpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0LndlaWdodCA9IHBhcnNlRmxvYXQoKChOdW1iZXIob3B0LndlaWdodCkgLyB0b3RhbE1hcmtzKSAqIDEwMCkudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25EYXRhID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2Uuc2V0UXVlc3Rpb25EVE8oZm9ybVZhbHVlLCB0aGlzLnF1ZXN0aW9uRGV0YWlscyk7XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wdXNoKHtcclxuICAgICAgICAgICAgcGFyZW50Rm9ybVZhbHVlOiB7IC4uLnF1ZXN0aW9uRGF0YSwgY2hpbGRRdWVzdGlvbnM6IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY2hpbGRRdWVzdGlvbnMnKT8udmFsdWUgfSxcclxuICAgICAgICAgICAgZWRpdGluZ1F1ZXN0aW9uSW5kZXg6IGluZGV4LFxyXG4gICAgICAgICAgICBhZGRpbmdUb0dyb3VwSWQ6IGdyb3VwSWRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gUmVzZXQgZm9ybSBmb3IgY2hpbGRcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5yZXNldCh7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJycsXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJycsXHJcbiAgICAgICAgICAgIGlzTWFuZGF0b3J5OiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gdmlzaWJpbGl0eTogdHJ1ZSxcclxuICAgICAgICAgICAgdG90YWxNYXJrczogbnVsbCxcclxuICAgICAgICAgICAgbWluQ2hhcmFjdGVyQ291bnQ6IG51bGwsXHJcbiAgICAgICAgICAgIG1heENoYXJhY3RlckNvdW50OiBudWxsLFxyXG4gICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZPcHRpb246IG51bGwsXHJcbiAgICAgICAgICAgIG1pbmltdW1OdW1iZXJPZk9wdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IG51bGwsXHJcbiAgICAgICAgICAgIG1heE5vT2ZGaWxlczogbnVsbCxcclxuICAgICAgICAgICAgY3VzdG9tUmVnZXg6ICcnLFxyXG4gICAgICAgICAgICBoaW50VGV4dDogJycsXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uTWVkaWE6ICcnLFxyXG4gICAgICAgICAgICBjaGlsZFF1ZXN0aW9uczogW10sXHJcbiAgICAgICAgICAgIHNraWxsQ29kZXM6IFtdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NvbnRyb2wgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgd2hpbGUgKG9wdGlvbnNDb250cm9sLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBvcHRpb25zQ29udHJvbC5yZW1vdmVBdCgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXBwbHlEeW5hbWljVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIGlmIChjaGlsZFF1ZXN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVGb3JtKGNoaWxkUXVlc3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQ2hpbGRRdWVzdGlvbihpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBjb25zdCBkZWxldGVkQ2hpbGQgPSB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2NoaWxkUXVlc3Rpb25zJyk/LnZhbHVlW2luZGV4XTtcclxuXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZvckVhY2gob3B0ID0+IHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkTGlzdCA9IFsuLi4ob3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8udmFsdWUgfHwgW10pXTtcclxuICAgICAgICAgICAgY2hpbGRMaXN0ID0gY2hpbGRMaXN0LmZpbHRlcigoaWQ6IHN0cmluZyB8IG51bWJlcikgPT4gaWQgIT09IGRlbGV0ZWRDaGlsZC5pZCk7XHJcbiAgICAgICAgICAgIG9wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnNldFZhbHVlKGNoaWxkTGlzdCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY2hpbGRRdWVzdGlvbnMnKT8udmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZvckVhY2goZyA9PiB7XHJcbiAgICAgICAgICAgIGcucXVlc3Rpb25JZHMgPSBnLnF1ZXN0aW9uSWRzLmZpbHRlcihxaWQgPT4gcWlkICE9PSBkZWxldGVkQ2hpbGQuaWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3VwcyA9IHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5maWx0ZXIoZyA9PiBnLnF1ZXN0aW9uSWRzLmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9wdGlvbklkKG9wdDogYW55KTogc3RyaW5nIHwgbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gb3B0LmdldCgnaWQnKT8udmFsdWUgPyBvcHQuZ2V0KCdpZCcpPy52YWx1ZSA6IG9wdC5nZXQoJ3V1aWQnKT8udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hpbGRRdWVzdGlvbkJ5SWQoaWQ6IHN0cmluZyB8IG51bWJlcik6IEFzc2Vzc21lbnRRdWVzdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnY2hpbGRRdWVzdGlvbnMnKT8udmFsdWU/LmZpbmQoKHE6IEFzc2Vzc21lbnRRdWVzdGlvbikgPT4gcS5pZCA9PT0gaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoaWxkUXVlc3Rpb25JbmRleChpZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjaGlsZFF1ZXN0aW9ucycpPy52YWx1ZT8uZmluZEluZGV4KChxOiBBc3Nlc3NtZW50UXVlc3Rpb24pID0+IHEuaWQgPT09IGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVDaGlsZFF1ZXN0aW9uQnlJZChpZDogbnVtYmVyIHwgdW5kZWZpbmVkLCBldmVudDogRXZlbnQpIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Q2hpbGRRdWVzdGlvbkluZGV4KGlkKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUNoaWxkUXVlc3Rpb24oaW5kZXgsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRDaGlsZFF1ZXN0aW9uR3JvdXBzKGNoaWxkUXVlc3Rpb25zOiBBc3Nlc3NtZW50UXVlc3Rpb25bXSkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3VwcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZFF1ZXN0aW9uSWRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICB0aGlzLm9wdGlvbnMuY29udHJvbHMuZm9yRWFjaChvcHQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25JZCA9IHRoaXMuZ2V0T3B0aW9uSWQob3B0KTtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRMaXN0ID0gb3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8udmFsdWUgfHwgW107XHJcblxyXG4gICAgICAgICAgICBpZiAoY2hpbGRMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRRdWVzdGlvbkdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogZ2VuZXJhdGVVdWlkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uSWQ6IG9wdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWRzOiBbLi4uY2hpbGRMaXN0XVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZExpc3QuZm9yRWFjaCgoaWQ6IGFueSkgPT4gcHJvY2Vzc2VkUXVlc3Rpb25JZHMuYWRkKGlkKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2hpbGRRdWVzdGlvbnMuZm9yRWFjaChjcSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjcS5pZCAmJiAhcHJvY2Vzc2VkUXVlc3Rpb25JZHMuaGFzKGNxLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZVV1aWQoKSxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25JZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkczogW2NxLmlkXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkdyb3VwT3B0aW9uQ2hhbmdlKGdyb3VwSWQ6IHN0cmluZywgbmV3T3B0aW9uSWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwpIHtcclxuICAgICAgICBjb25zdCBncm91cEluZGV4ID0gdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZpbmRJbmRleChnID0+IGcuaWQgPT09IGdyb3VwSWQpO1xyXG4gICAgICAgIGlmIChncm91cEluZGV4ID09PSAtMSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzW2dyb3VwSW5kZXhdO1xyXG5cclxuICAgICAgICBjb25zdCBvbGRPcHRpb25JZCA9IGdyb3VwLm9wdGlvbklkO1xyXG5cclxuICAgICAgICBpZiAob2xkT3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkT3B0ID0gdGhpcy5vcHRpb25zLmNvbnRyb2xzLmZpbmQob3B0ID0+IHRoaXMuZ2V0T3B0aW9uSWQob3B0KSA9PT0gb2xkT3B0aW9uSWQpO1xyXG4gICAgICAgICAgICBpZiAob2xkT3B0KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRMaXN0ID0gWy4uLihvbGRPcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy52YWx1ZSB8fCBbXSldO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRMaXN0ID0gY2hpbGRMaXN0LmZpbHRlcihpZCA9PiAhZ3JvdXAucXVlc3Rpb25JZHMuaW5jbHVkZXMoaWQgYXMgYW55KSk7XHJcbiAgICAgICAgICAgICAgICBvbGRPcHQuZ2V0KCdjaGlsZFF1ZXN0aW9uTGlzdCcpPy5zZXRWYWx1ZShjaGlsZExpc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBleGlzdGluZ0dyb3VwID0gdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLmZpbmQoZyA9PiBnLmlkICE9PSBncm91cElkICYmIGcub3B0aW9uSWQgPT09IG5ld09wdGlvbklkKTtcclxuXHJcbiAgICAgICAgaWYgKGV4aXN0aW5nR3JvdXAgJiYgbmV3T3B0aW9uSWQpIHtcclxuICAgICAgICAgICAgZXhpc3RpbmdHcm91cC5xdWVzdGlvbklkcy5wdXNoKC4uLmdyb3VwLnF1ZXN0aW9uSWRzKTtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZFF1ZXN0aW9uR3JvdXBzLnNwbGljZShncm91cEluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBncm91cC5vcHRpb25JZCA9IG5ld09wdGlvbklkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG5ld09wdGlvbklkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld09wdCA9IHRoaXMub3B0aW9ucy5jb250cm9scy5maW5kKG9wdCA9PiB0aGlzLmdldE9wdGlvbklkKG9wdCkgPT09IG5ld09wdGlvbklkKTtcclxuICAgICAgICAgICAgaWYgKG5ld09wdCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkTGlzdCA9IFsuLi4obmV3T3B0LmdldCgnY2hpbGRRdWVzdGlvbkxpc3QnKT8udmFsdWUgfHwgW10pXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoWy4uLmNoaWxkTGlzdCwgLi4uZ3JvdXAucXVlc3Rpb25JZHNdKTtcclxuICAgICAgICAgICAgICAgIG5ld09wdC5nZXQoJ2NoaWxkUXVlc3Rpb25MaXN0Jyk/LnNldFZhbHVlKEFycmF5LmZyb20oc2V0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ29CYWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRBbmRQb3B1bGF0ZShzdGF0ZT8ucGFyZW50Rm9ybVZhbHVlKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldEFuZFBvcHVsYXRlKHBhcmVudFZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc0Zvcm1Hcm91cC5yZXNldCgpO1xyXG5cclxuICAgICAgICBjb25zdCBvcHRpb25zQ29udHJvbCA9IHRoaXMucXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICB3aGlsZSAob3B0aW9uc0NvbnRyb2wubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNDb250cm9sLnJlbW92ZUF0KDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZvcm0ocGFyZW50VmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2Nyb2xsVG9Ub3AoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyICYmIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5Q29kZShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gaXRlbT8uY29kZSAhPSBudWxsID8gJ2MnICsgaXRlbS5jb2RlIDogJ2knICsgaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUNvbnRyb2woaW5kZXg6IG51bWJlciwgY29udHJvbDogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUdyb3VwSWQoaW5kZXg6IG51bWJlciwgZ3JvdXA6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBncm91cD8uaWQgIT0gbnVsbCA/ICdnJyArIGdyb3VwLmlkIDogJ2knICsgaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeVF1ZXN0aW9uSWQoaW5kZXg6IG51bWJlciwgaWQ6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBpZCAhPSBudWxsID8gJ3EnICsgaWQgOiAnaScgKyBpbmRleDtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IHZoLTEwMCBwb3NpdGlvbi1yZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA+IDAgfHwgaXNDaGlsZFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLTMgcHgtMiBjb2wtYXV0byBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtQzhEQUY5IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kIGQtbWQtZmxleCBkLW5vbmVcIj5cclxuICAgICAgICA8cCBjbGFzcz1cIm0tMCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggdmVydGljYWwtdGV4dFwiPlxyXG4gICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hJTERfUVVFU1RJT04nXX19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgaC0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgPGhlYWRlclxyXG4gICAgICAgICAgICBjbGFzcz1cInAtMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHBvc2l0aW9uLXN0aWNreSB0b3AtMCBjb2wtMTIgYm9yZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICA8cCAqbmdJZj1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIiBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE4IGQtbWQtaW5saW5lIGQtbm9uZVwiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLklOUFVUX0ZJRUxEX1NFVFRJTkdTJ119fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA+IDBcIiAoY2xpY2spPVwiZ29CYWNrKClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBib3JkZXItMCBvdXRsaW5lLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNCBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5HT19CQUNLJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9nby1iYWNrLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5HT19CQUNLJ119fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LW1kLWVuZCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMyBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib25TdWJtaXQoKVwiIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmcgfHwgaXNMb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1idG4tcHJpbWFyeSBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydvcGFjaXR5LTAnOiBpc1N1Ym1pdHRpbmd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5TQVZFX1FVRVNUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc1N1Ym1pdHRpbmdcIiBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGFzc2Vzc21lbnQtc3Bpbm5lci13aGl0ZVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJkLW1kLW5vbmVcIiAqbmdJZj1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIiBtYXQtZGlhbG9nLWNsb3NlXHJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQ0xPU0UnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Nsb3NlLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgPGRpdiAjc2Nyb2xsQ29udGFpbmVyIGNsYXNzPVwiY29sLTEyIHB5LTQgcHgtbWQtNCBweC0zIGZsZXgtZ3Jvdy0xIG92ZXJmbG93LXktYXV0byBmb3JtLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwicXVlc3Rpb25zRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTYgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIGNvbC0xMlwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5UWVBFJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJxdWVzdGlvblR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLlNFTEVDVF9RVUVTVElPTl9UWVBFJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1tYXQtc2VsZWN0IGNvbC0xMiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlc3Rpb25UeXBlczsgdHJhY2tCeTogdHJhY2tCeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidHlwZT8uY29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3R5cGU/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblR5cGUnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblR5cGUnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBiLTQgY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTYgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+UXVlc3Rpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGFwcC10ZXh0LWVkaXRvciBbcHJlVGV4dF09XCJxdWVzdGlvbnNGb3JtR3JvdXA/LmdldCgncXVlc3Rpb25UZXh0Jyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwicXVlc3Rpb25zRm9ybUdyb3VwPy5nZXQoJ3F1ZXN0aW9uVGV4dCcpPy5wYXRjaFZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLkVOVEVSX1FVRVNUSU9OJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1jdXN0b20tYW5ndWxhci1lZGl0b3Itd2hpdGUgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIic4cmVtJ1wiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtdGV4dC1lZGl0b3I+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblRleHQnKT8uZXJyb3JzICAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvblRleHQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwb3NpdGlvbi1yZWxhdGl2ZSBtdC0zXCIgKm5nSWY9XCJzaG93RmllbGQoJ3F1ZXN0aW9uTWVkaWEnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJxdWVzdGlvbk1lZGlhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuRU5URVJfUVVFU1RJT05fTUVESUEnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy5oYXNFcnJvcigncGF0dGVybicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uTWVkaWEnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5JTlZBTElEX1VSTCddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25NZWRpYScpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdxdWVzdGlvbk1lZGlhJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wIGNvbC0xMiBwYi00XCIgKm5nSWY9XCJzaG93RmllbGQoJ21pbkNoYXJhY3RlckNvdW50JykgfHwgc2hvd0ZpZWxkKCdtYXhDaGFyYWN0ZXJDb3VudCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcHMtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtaW5DaGFyYWN0ZXJDb3VudCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NSU5fQ0hBUkFDVEVSX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtaW5DaGFyYWN0ZXJDb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3V0bGluZS0wIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNIQVJBQ1RFUlMnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5DaGFyYWN0ZXJDb3VudCcpPy5oYXNFcnJvcignbWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluQ2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5DQU5OT1RfQkVfWkVSTyddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBlLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4Q2hhcmFjdGVyQ291bnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFYX0NIQVJBQ1RFUl9MSU1JVCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWF4Q2hhcmFjdGVyQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuTk9UX1NFVCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSEFSQUNURVJTJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Q2hhcmFjdGVyQ291bnQnKT8uaGFzRXJyb3IoJ21pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuQ0FOTk9UX0JFX1pFUk8nXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heENoYXJhY3RlckNvdW50Jyk/Lmhhc0Vycm9yKCdsZXNzVGhhbk9yRXF1YWxNaW4nKSAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhDaGFyYWN0ZXJDb3VudCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9MSU1JVF9HUkVBVEVSJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG14LTAgY29sLTEyIHBiLTRcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4RmlsZVNpemUnKSB8fCBzaG93RmllbGQoJ21heE5vT2ZGaWxlcycpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcHMtMFwiICpuZ0lmPVwic2hvd0ZpZWxkKCdtYXhGaWxlU2l6ZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVhfRklMRV9TSVpFJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtYXhGaWxlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhGaWxlU2l6ZScpPy50b3VjaGVkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1CJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4RmlsZVNpemUnKT8uaGFzRXJyb3IoJ21pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heEZpbGVTaXplJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuQ0FOTk9UX0JFX1pFUk8nXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBwZS0wXCIgKm5nSWY9XCJzaG93RmllbGQoJ21heE5vT2ZGaWxlcycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVhfTk9fT0ZfRklMRVMnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1heE5vT2ZGaWxlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5OT1RfU0VUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy50b3VjaGVkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkZJTEVTJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4Tm9PZkZpbGVzJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhOb09mRmlsZXMnKT8uaGFzRXJyb3IoJ21pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heE5vT2ZGaWxlcycpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLkNBTk5PVF9CRV9aRVJPJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBjb2wtMTJcIiAqbmdJZj1cInNob3dGaWVsZCgnY3VzdG9tUmVnZXgnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNVU1RPTV9SRUdFWCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImN1c3RvbVJlZ2V4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuRU5URVJfQ1VTVE9NX1JFR0VYJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjdXN0b21SZWdleCcpPy5tYXJrQXNUb3VjaGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdjdXN0b21SZWdleCcpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2N1c3RvbVJlZ2V4Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi00IGNvbC0xMlwiICpuZ0lmPVwic2hvd0ZpZWxkKCd0b3RhbE1hcmtzJykgJiYgIWlzQ2hpbGQgJiYgcXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlRPVEFMX01BUktTJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidG90YWxNYXJrc1wiIHBsYWNlaG9sZGVyPVwiMFwiIChpbnB1dCk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCd0b3RhbE1hcmtzJyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BUktTJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgndG90YWxNYXJrcycpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3RvdGFsTWFya3MnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXgtMCBjb2wtMTIgcGItNFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWVsZCgnbWluaW11bU51bWJlck9mT3B0aW9uJykgfHwgc2hvd0ZpZWxkKCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBzLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWluaW11bU51bWJlck9mT3B0aW9uJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1JTl9PUFRJT05fU0VMRUNUX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtaW5pbXVtTnVtYmVyT2ZPcHRpb25cIiBwbGFjZWhvbGRlcj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8ubWFya0FzVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCc6IHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCBtZS0zXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk9QVElPTlMnXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21pbmltdW1OdW1iZXJPZk9wdGlvbicpPy5oYXNFcnJvcignbWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWluaW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuQ0FOTk9UX0JFX1pFUk8nXSB8fCAnTGltaXQgY2Fubm90IGJlIDAnfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHBlLTBcIiAqbmdJZj1cInNob3dGaWVsZCgnbWF4aW11bU51bWJlck9mT3B0aW9uJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BWF9PUFRJT05fU0VMRUNUX0xJTUlUJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtYXhpbXVtTnVtYmVyT2ZPcHRpb25cIiBbcGxhY2Vob2xkZXJdPVwib3B0aW9ucy5sZW5ndGggfHwgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYWxsb3dPbmx5TnVtYmVycygkZXZlbnQpOyBjaGVja01heE9wdGlvbnNWYWwoJGV2ZW50LCBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/Lm1hcmtBc1RvdWNoZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnOiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8uaW52YWxpZCAmJiBxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8udG91Y2hlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgbWUtM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5PUFRJT05TJ119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8uaGFzRXJyb3IoJ21pbicpICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLkNBTk5PVF9CRV9aRVJPJ10gfHwgJ0xpbWl0IGNhbm5vdCBiZSAwJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5oYXNFcnJvcignbGVzc1RoYW5PckVxdWFsTWluJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnbWF4aW11bU51bWJlck9mT3B0aW9uJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX0xJTUlUX0dSRUFURVInXSB8fCAnTWF4IGxpbWl0IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gbWluIGxpbWl0J319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBjb2wtMTIgbXQtbWQtM1wiICpuZ0lmPVwic2hvd0ZpZWxkKCdvcHRpb25zJylcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9ucy5jb250cm9sczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCJpXCIgKm5nSWY9XCJvcHRpb24uZ2V0KCdpc0FjdGl2ZScpPy52YWx1ZSAhPT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweS1tZC0wIHB5LTMgYm9yZGVyLWJvdHRvbSBib3JkZXItbWQtMCBjb2wtMTIgZC1mbGV4IGZsZXgtd3JhcCBmbGV4LW1kLW5vd3JhcCBhbGlnbi1pdGVtcy1tZC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLW1kLTQgZ2FwLTNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZCBmbGV4LW1kLWdyb3ctMSBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC1tZC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucHQtbWQtM109XCJpID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBwLTIgYm9yZGVyLWdyZXktdGVuLTIgbXQtMVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm9wdGlvbkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5FTlRFUl9PUFRJT04nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3ctMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGJvcmRlci0wIG91dGxpbmUtMCBiZy10cmFuc3BhcmVudCBpbnB1dC1mb2N1cyBweS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZC1tZC1ub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkNMT1NFJ11cIiAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9jbG9zZS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5nZXQoJ29wdGlvbkxhYmVsJyk/LmludmFsaWQgJiYgb3B0aW9uLmdldCgnb3B0aW9uTGFiZWwnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgbXQtMVwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RmllbGQoJ29wdGlvbnMnLCAnc2hvd1dlaWdodGFnZScpICYmICFpc0NoaWxkICYmIHF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2l4IG1iLTIgbWItbWQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGlkZGVuLWxhYmVsJzogaSA+IDB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5XRUlHSFRBR0UnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgKGlucHV0KT1cImNoZWNrTWF4VmFsKCRldmVudCwgb3B0aW9uLmdldCgnd2VpZ2h0JykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwid2VpZ2h0XCIgKHdoZWVsKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTIgcHktbWQtMSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBvdXRsaW5lLTAgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC1tYXJrcy1pbnB1dCBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuV0VJR0hUQUdFJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RmllbGQoJ29wdGlvbnMnLCAnc2hvd1JlbWFya3MnKSAmJiAhaXNDaGlsZCAmJiBxdWVzdGlvblN0YWNrLmxlbmd0aCA9PSAwXCIgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zaXggbWItMiBtYi1tZC0zIHBiLW1kLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hpZGRlbi1sYWJlbCc6IGkgPiAwfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUkVNQVJLUyddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicmVtYXJrc1JlcXVpcmVkXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVtYXJrc1JlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbWQtYmxvY2sgcHQtM1wiIFtjbGFzcy5jdXN0b20tbWFyZ2luXT1cImkgPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkNMT1NFJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Nsb3NlLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkT3B0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGJnLXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGJvcmRlci0wIGFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX09QVElPTiddfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnb3B0aW9ucycpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlJFUVVJUkVEJ119fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTQgY29sLTEyIGJvcmRlci10b3BcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmllbGQoJ2NoaWxkUXVlc3Rpb25zJykgJiYgcXVlc3Rpb25TdGFjay5sZW5ndGggPT0gMCAmJiAhaXNDaGlsZCAmJiAhc3RhbmRhbG9uZU1vZGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE2IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DSElMRF9RVUVTVElPTlMnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIG1hdFRvb2x0aXA9XCJ7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hJTERfUVVFU1RJT05TX0lORk8nXX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBtYXRUb29sdGlwQ2xhc3M9XCJhc3Nlc3NtZW50LXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5JTkZPJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvaW5mby5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiBjaGlsZFF1ZXN0aW9uR3JvdXBzOyBsZXQgZ3JvdXBJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5R3JvdXBJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgcC0zIG15LTMgYXNzZXNzbWVudC1iZy1ncmV5LW9uZSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdGhyZWUgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0zXCIgKm5nSWY9XCJvcHRpb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQVNTSUdORURfT1BUSU9OJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCJncm91cC5vcHRpb25JZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uR3JvdXBPcHRpb25DaGFuZ2UoZ3JvdXAuaWQsICRldmVudC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuU0VMRUNUX09QVElPTl9UT19MSU5LJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1tYXQtc2VsZWN0IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1iZy13aGl0ZSBvdXRsaW5lLTAgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiIFt2YWx1ZV09XCJudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PTkUnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHQgb2Ygb3B0aW9ucy5jb250cm9sczsgbGV0IG9wSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIm9wdC5nZXQoJ2lzQWN0aXZlJyk/LnZhbHVlICE9PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiIFt2YWx1ZV09XCJnZXRPcHRpb25JZChvcHQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdC5nZXQoJ29wdGlvbkxhYmVsJyk/LnZhbHVlIHx8ICgnT3B0aW9uICcgKyAob3BJbmRleCArIDEpKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uSWQgb2YgZ3JvdXAucXVlc3Rpb25JZHM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlRdWVzdGlvbklkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDaGlsZFF1ZXN0aW9uQnlJZChxdWVzdGlvbklkKSBhcyBjaGlsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMSBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5RVUVTVElPTiddfX0ge3tpICsgMX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uREVMRVRFJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ2hpbGRRdWVzdGlvbkJ5SWQoY2hpbGQuaWQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2RlbGV0ZS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJjaGlsZD8ucXVlc3Rpb25UZXh0Py5bMF0/LnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRFZGl0Q2hpbGRRdWVzdGlvbihjaGlsZCwgZ2V0Q2hpbGRRdWVzdGlvbkluZGV4KGNoaWxkLmlkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJnLXdoaXRlIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZEVkaXRDaGlsZFF1ZXN0aW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBncm91cC5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYm9yZGVyLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBiZy10cmFuc3BhcmVudCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTIgb3V0bGluZS0wIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9NT1JFJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkRWRpdENoaWxkUXVlc3Rpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0zIGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtRURGM0ZEIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBvdXRsaW5lLTAgY29sLTEyIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gbXQtMyBib3JkZXItQURDOUY2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wbHVzLXByaW1hcnkuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfQ0hJTERfUVVFU1RJT04nXX19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS00IGNvbC0xMiBib3JkZXItdG9wXCIgKm5nSWY9XCJzaG93RmllbGQoJ2hpbnRUZXh0JylcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE2IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfSElOVCddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGFwcC10ZXh0LWVkaXRvciBbcHJlVGV4dF09XCJxdWVzdGlvbnNGb3JtR3JvdXA/LmdldCgnaGludFRleHQnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZSk9XCJxdWVzdGlvbnNGb3JtR3JvdXA/LmdldCgnaGludFRleHQnKT8ucGF0Y2hWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5FTlRFUl9ISU5UJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1jdXN0b20tYW5ndWxhci1lZGl0b3Itd2hpdGUgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIic4cmVtJ1wiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtdGV4dC1lZGl0b3I+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbnNGb3JtR3JvdXAuZ2V0KCdoaW50VGV4dCcpPy5lcnJvcnMgICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ2hpbnRUZXh0Jyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRCddfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS00IGNvbC0xMiBib3JkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xOCBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkZJRUxEU19TRVRUSU5HUyddfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BTkRBVE9SWSddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1laWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BTkRBVE9SWV9ERVNDJ119fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgbmFtZT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlzTWFuZGF0b3J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWVsZCgnaXNGaWx0ZXJFbmFibGVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5GSUxURVJfRU5BQkxFRCddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1laWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkZJTFRFUl9FTkFCTEVEX0RFU0MnXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiBuYW1lPVwiaXNGaWx0ZXJFbmFibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlzRmlsdGVyRW5hYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgY29sLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWVsZCgnaXNGaWx0ZXJFbmFibGVkJykgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgnaXNGaWx0ZXJFbmFibGVkJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5RVUVTVElPTl9OQU1FJ119fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInF1ZXN0aW9uU3ViVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLlFVRVNUSU9OX05BTUUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJzogcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25TdWJUZXh0Jyk/LmludmFsaWQgJiYgcXVlc3Rpb25zRm9ybUdyb3VwLmdldCgncXVlc3Rpb25TdWJUZXh0Jyk/LnRvdWNoZWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uU3ViVGV4dCcpPy5pbnZhbGlkICYmIHF1ZXN0aW9uc0Zvcm1Hcm91cC5nZXQoJ3F1ZXN0aW9uU3ViVGV4dCcpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRUQnXX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBjb2wtMTJcIiAqbmdJZj1cIiFpc0NoaWxkICYmIHF1ZXN0aW9uU3RhY2subGVuZ3RoID09IDAgJiYgKHNraWxsc0xpc3Q/Lmxlbmd0aCA/PyAwKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BUF9TS0lMTFMnXX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJza2lsbENvZGVzXCIgbXVsdGlwbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuU0VMRUNUX1NLSUxMUyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cImFzc2Vzc21lbnQtY2hlY2tib3hlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtbWF0LXNlbGVjdCBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG91dGxpbmUtMCBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xM1wiICpuZ0Zvcj1cImxldCBza2lsbCBvZiBza2lsbHNMaXN0OyB0cmFja0J5OiB0cmFja0J5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2tpbGw/LmNvZGVcIj57e3NraWxsPy5sYWJlbHM/LlswXT8udGV4dH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=