@piserve-tech/form-submission 1.3.319 → 1.3.321

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 (117) hide show
  1. package/README.md +24 -24
  2. package/assets/icons/close-sidebar-mark-icon.svg +3 -3
  3. package/assets/icons/copy-icon.svg +5 -5
  4. package/assets/icons/delete-icon.svg +7 -7
  5. package/assets/icons/delete-no-outline-icon.svg +7 -7
  6. package/esm2022/form-fields/aggregate-function/aggregate-function.component.mjs +3 -3
  7. package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +10 -7
  8. package/esm2022/form-fields/currency-fields/currency-fields.component.mjs +11 -8
  9. package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +12 -9
  10. package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +12 -8
  11. package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +11 -8
  12. package/esm2022/form-fields/form-fields.module.mjs +1 -1
  13. package/esm2022/form-fields/hidden-field/hidden-field.component.mjs +26 -19
  14. package/esm2022/form-fields/iframe-fields/iframe-fields.component.mjs +21 -21
  15. package/esm2022/form-fields/location-fields/location-fields.component.mjs +3 -3
  16. package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +11 -8
  17. package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +12 -9
  18. package/esm2022/form-fields/number-fields/number-fields.component.mjs +11 -8
  19. package/esm2022/form-fields/password-fields/password-fields.component.mjs +11 -8
  20. package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +11 -8
  21. package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +12 -9
  22. package/esm2022/form-fields/section-fields/section-fields.component.mjs +3 -3
  23. package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +11 -8
  24. package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +3 -3
  25. package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +12 -9
  26. package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +9 -7
  27. package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +11 -8
  28. package/esm2022/form-fields/text-fields/text-fields.component.mjs +11 -8
  29. package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +10 -7
  30. package/esm2022/form-fields/url-fields/url-fields.component.mjs +11 -8
  31. package/esm2022/form-submission/form-submission.module.mjs +1 -1
  32. package/esm2022/form-submission/header/header.component.mjs +3 -3
  33. package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +3 -3
  34. package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +3 -3
  35. package/esm2022/form-submission/save-as-draft/saveDraftModalComponent .mjs +3 -3
  36. package/esm2022/form-submission/submit-form/submit-form.component.mjs +25 -22
  37. package/esm2022/lib/form-submission.component.mjs +3 -3
  38. package/esm2022/lib/form-submission.module.mjs +1 -1
  39. package/esm2022/models/aggregate.model.mjs +1 -1
  40. package/esm2022/models/answer.model.mjs +1 -1
  41. package/esm2022/models/appearance.model.mjs +1 -1
  42. package/esm2022/models/attachment.model.mjs +1 -1
  43. package/esm2022/models/defaultAnswerEntry.model.mjs +1 -1
  44. package/esm2022/models/defaultAnswersModel.model.mjs +1 -1
  45. package/esm2022/models/defaultQuestionAnswer.model.mjs +1 -1
  46. package/esm2022/models/elementOptionAPI.model.mjs +1 -1
  47. package/esm2022/models/elementOptionDB.model.mjs +1 -1
  48. package/esm2022/models/emitters.model.mjs +1 -1
  49. package/esm2022/models/formElement.model.mjs +1 -1
  50. package/esm2022/models/grid.model.mjs +1 -1
  51. package/esm2022/models/hiddenField.model.mjs +1 -1
  52. package/esm2022/models/iFrameProperties.model.mjs +1 -1
  53. package/esm2022/models/multifields.model.mjs +1 -1
  54. package/esm2022/models/page.model.mjs +1 -1
  55. package/esm2022/models/publicForm.model.mjs +1 -1
  56. package/esm2022/models/question.model.mjs +1 -1
  57. package/esm2022/models/questionGroup.model.mjs +1 -1
  58. package/esm2022/models/scoring.model.mjs +1 -1
  59. package/esm2022/models/section.model.mjs +1 -1
  60. package/esm2022/models/subForm.model.mjs +1 -1
  61. package/esm2022/models/subformConfiguration.model.mjs +1 -1
  62. package/esm2022/models/subformPropery.model.mjs +1 -1
  63. package/esm2022/models/submission.model.mjs +1 -1
  64. package/esm2022/models/submissionCopyConfig.mopdel.mjs +1 -1
  65. package/esm2022/models/whenClause.model.mjs +1 -1
  66. package/esm2022/models/whenClauseCondition.model.mjs +1 -1
  67. package/esm2022/models/whenClauseElements.model.mjs +1 -1
  68. package/esm2022/question/card-subform/card-subform.component.mjs +83 -53
  69. package/esm2022/question/confirm-dialog/confirm-dialog.component.mjs +3 -3
  70. package/esm2022/question/form-elements/form-elements.component.mjs +3 -3
  71. package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +37 -30
  72. package/esm2022/question/multifields/multifields.component.mjs +3 -3
  73. package/esm2022/question/multiple-subform/multiple-subform.component.mjs +3 -3
  74. package/esm2022/question/question/question.component.mjs +3 -3
  75. package/esm2022/question/question-group/question-group.component.mjs +3 -3
  76. package/esm2022/question/recursive-logic/recursive-logic.component.mjs +3 -3
  77. package/esm2022/question/sub-form/sub-form.component.mjs +3 -3
  78. package/esm2022/services/aggregate.service.mjs +1 -1
  79. package/esm2022/services/countryService.mjs +1 -1
  80. package/esm2022/services/data.service.mjs +1 -1
  81. package/esm2022/services/form-validation.service.mjs +1 -1
  82. package/esm2022/services/form.service.mjs +1 -1
  83. package/esm2022/services/hidden-field.service.mjs +160 -0
  84. package/esm2022/services/mapper.service.mjs +3 -2
  85. package/esm2022/services/recaptcha.service.mjs +1 -1
  86. package/esm2022/services/score.service.mjs +1 -1
  87. package/esm2022/services/subform-copy.service.mjs +1 -1
  88. package/esm2022/services/whenClause.service.mjs +1 -1
  89. package/esm2022/shared/shared.module.mjs +1 -1
  90. package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +3 -3
  91. package/fesm2022/piserve-tech-form-submission.mjs +458 -225
  92. package/fesm2022/piserve-tech-form-submission.mjs.map +1 -1
  93. package/form-fields/check-box-fields/check-box-fields.component.d.ts +3 -1
  94. package/form-fields/currency-fields/currency-fields.component.d.ts +3 -1
  95. package/form-fields/date-time-fields/date-time-fields.component.d.ts +3 -1
  96. package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +3 -1
  97. package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +3 -1
  98. package/form-fields/hidden-field/hidden-field.component.d.ts +6 -1
  99. package/form-fields/mail-fields/mail-fields.component.d.ts +3 -1
  100. package/form-fields/mobile-fields/mobile-fields.component.d.ts +3 -1
  101. package/form-fields/number-fields/number-fields.component.d.ts +3 -1
  102. package/form-fields/password-fields/password-fields.component.d.ts +3 -1
  103. package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +3 -1
  104. package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +3 -1
  105. package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +3 -1
  106. package/form-fields/slider-fields/slider-fields.component.d.ts +3 -1
  107. package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +3 -1
  108. package/form-fields/text-area-fields/text-area-fields.component.d.ts +3 -1
  109. package/form-fields/text-fields/text-fields.component.d.ts +3 -1
  110. package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +3 -0
  111. package/form-fields/url-fields/url-fields.component.d.ts +3 -1
  112. package/form-submission/submit-form/submit-form.component.d.ts +3 -1
  113. package/models/hiddenField.model.d.ts +1 -0
  114. package/package.json +2 -2
  115. package/question/card-subform/card-subform.component.d.ts +7 -1
  116. package/question/inline-multiple-subform/inline-multiple-subform.component.d.ts +4 -1
  117. package/services/hidden-field.service.d.ts +31 -0
@@ -5,16 +5,18 @@ import * as i2 from "../../services/validation.service";
5
5
  import * as i3 from "../../services/element-tracker.service";
6
6
  import * as i4 from "../../services/score.service";
7
7
  import * as i5 from "../../services/whenClause.service";
8
- import * as i6 from "@angular/common";
9
- import * as i7 from "@piserve-tech/drop-down";
8
+ import * as i6 from "../../services/hidden-field.service";
9
+ import * as i7 from "@angular/common";
10
+ import * as i8 from "@piserve-tech/drop-down";
10
11
  export class DropDownFieldsComponent {
11
- constructor(formService, cdr, validationService, tracker, scoreCalcService, whenClauseService) {
12
+ constructor(formService, cdr, validationService, tracker, scoreCalcService, whenClauseService, hiddenFieldService) {
12
13
  this.formService = formService;
13
14
  this.cdr = cdr;
14
15
  this.validationService = validationService;
15
16
  this.tracker = tracker;
16
17
  this.scoreCalcService = scoreCalcService;
17
18
  this.whenClauseService = whenClauseService;
19
+ this.hiddenFieldService = hiddenFieldService;
18
20
  this.question = {};
19
21
  this.inLine = false;
20
22
  this.inCard = false;
@@ -329,9 +331,11 @@ export class DropDownFieldsComponent {
329
331
  answer: this.question.answer,
330
332
  maxPossibleScore: this.maxPossibleScore,
331
333
  });
334
+ this.search('');
332
335
  const answers = Array.isArray(this.question.answer) ? this.question.answer : [];
333
336
  const parsedAnswers = answers.map((ans) => ans.split('|')[1]);
334
337
  this.whenClauseService.setQuestionAnswer(this.question.id, parsedAnswers);
338
+ this.hiddenFieldService.updateHiddenFieldsOnChange();
335
339
  }
336
340
  updateChildLogics(question) {
337
341
  if (question.childLogics && Array.isArray(question.childLogics)) {
@@ -563,13 +567,13 @@ export class DropDownFieldsComponent {
563
567
  this.tracker.unregisterElement(this.elementId);
564
568
  }
565
569
  }
566
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropDownFieldsComponent, deps: [{ token: i1.FormService }, { token: i0.ChangeDetectorRef }, { token: i2.ValidationService }, { token: i3.ElementTrackerService }, { token: i4.ScoreCalculationService }, { token: i5.WhenClauseService }], target: i0.ɵɵFactoryTarget.Component }); }
567
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DropDownFieldsComponent, selector: "lib-drop-down-fields", inputs: { question: "question", inLine: "inLine", inCard: "inCard", submissionIndex: "submissionIndex", disableEdit: "disableEdit" }, outputs: { answerChange: "answerChange" }, ngImport: i0, template: "<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <!-- <lib-dropdown\r\n [items]=\"customOptions\"\r\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\r\n (click)=\"selectItems()\"\r\n [(selectedItems)]=\"selectedValue\"\r\n ></lib-dropdown> -->\r\n\r\n <lib-dropdown\r\n [placeholder]=\"'select'\"\r\n [items]=\"customOptions\"\r\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\r\n [disable]=\"disableEdit\"\r\n (selectedItemsChange)=\"selectItems($event)\"\r\n [(selectedItems)]=\"selectedValue\"\r\n (onDropdownScroll)=\"getNextSetOfItems($event)\"\r\n (onSearch)=\"search($event)\"\r\n ></lib-dropdown>\r\n\r\n <!-- (onDropdownScroll)=\"getNextSetOfItems($event)\"\r\n (onSearch)=\"search($event)\" -->\r\n <div\r\n *ngIf=\"isInvalid && (!inLine || selectedValue.length === 0)\"\r\n class=\"error-message\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mb-2\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}::ng-deep .timepicker-overlay{z-index:1000!important}::ng-deep .timepicker-backdrop-overlay{z-index:1000!important}.space{width:5px}.error-message{color:#f44336;font-size:.8em;margin-top:4px;padding:0 8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.invalid-question{border:2px solid #f44336;border-radius:4px;padding:8px;margin-bottom:4px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.DropdownComponent, selector: "lib-dropdown", inputs: ["multiple", "selectedItems", "placeholder", "showCreateNew", "selectedValues", "customButtons", "showBorder", "disable", "showSubLabel", "items"], outputs: ["buttonClick", "selectedItemsChange", "onDropdownScroll", "onCreateNew", "onSearch"] }] }); }
570
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropDownFieldsComponent, deps: [{ token: i1.FormService }, { token: i0.ChangeDetectorRef }, { token: i2.ValidationService }, { token: i3.ElementTrackerService }, { token: i4.ScoreCalculationService }, { token: i5.WhenClauseService }, { token: i6.HiddenFieldService }], target: i0.ɵɵFactoryTarget.Component }); }
571
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DropDownFieldsComponent, selector: "lib-drop-down-fields", inputs: { question: "question", inLine: "inLine", inCard: "inCard", submissionIndex: "submissionIndex", disableEdit: "disableEdit" }, outputs: { answerChange: "answerChange" }, ngImport: i0, template: "<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n >&nbsp;\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <!-- <lib-dropdown\n [items]=\"customOptions\"\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\n (click)=\"selectItems()\"\n [(selectedItems)]=\"selectedValue\"\n ></lib-dropdown> -->\n\n <lib-dropdown\n [placeholder]=\"'select'\"\n [items]=\"customOptions\"\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\n [disable]=\"disableEdit\"\n (selectedItemsChange)=\"selectItems($event)\"\n [(selectedItems)]=\"selectedValue\"\n (onDropdownScroll)=\"getNextSetOfItems($event)\"\n (onSearch)=\"search($event)\"\n ></lib-dropdown>\n\n <!-- (onDropdownScroll)=\"getNextSetOfItems($event)\"\n (onSearch)=\"search($event)\" -->\n <div\n *ngIf=\"isInvalid && (!inLine || selectedValue.length === 0)\"\n class=\"error-message\"\n >\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mb-2\">\n {{ validationMessage }}\n </div>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}::ng-deep .timepicker-overlay{z-index:1000!important}::ng-deep .timepicker-backdrop-overlay{z-index:1000!important}.space{width:5px}.error-message{color:#f44336;font-size:.8em;margin-top:4px;padding:0 8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.invalid-question{border:2px solid #f44336;border-radius:4px;padding:8px;margin-bottom:4px}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.DropdownComponent, selector: "lib-dropdown", inputs: ["multiple", "selectedItems", "placeholder", "showCreateNew", "selectedValues", "customButtons", "showBorder", "disable", "showSubLabel", "items"], outputs: ["buttonClick", "selectedItemsChange", "onDropdownScroll", "onCreateNew", "onSearch"] }] }); }
568
572
  }
569
573
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropDownFieldsComponent, decorators: [{
570
574
  type: Component,
571
- args: [{ selector: 'lib-drop-down-fields', template: "<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <!-- <lib-dropdown\r\n [items]=\"customOptions\"\r\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\r\n (click)=\"selectItems()\"\r\n [(selectedItems)]=\"selectedValue\"\r\n ></lib-dropdown> -->\r\n\r\n <lib-dropdown\r\n [placeholder]=\"'select'\"\r\n [items]=\"customOptions\"\r\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\r\n [disable]=\"disableEdit\"\r\n (selectedItemsChange)=\"selectItems($event)\"\r\n [(selectedItems)]=\"selectedValue\"\r\n (onDropdownScroll)=\"getNextSetOfItems($event)\"\r\n (onSearch)=\"search($event)\"\r\n ></lib-dropdown>\r\n\r\n <!-- (onDropdownScroll)=\"getNextSetOfItems($event)\"\r\n (onSearch)=\"search($event)\" -->\r\n <div\r\n *ngIf=\"isInvalid && (!inLine || selectedValue.length === 0)\"\r\n class=\"error-message\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mb-2\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}::ng-deep .timepicker-overlay{z-index:1000!important}::ng-deep .timepicker-backdrop-overlay{z-index:1000!important}.space{width:5px}.error-message{color:#f44336;font-size:.8em;margin-top:4px;padding:0 8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.invalid-question{border:2px solid #f44336;border-radius:4px;padding:8px;margin-bottom:4px}\n"] }]
572
- }], ctorParameters: function () { return [{ type: i1.FormService }, { type: i0.ChangeDetectorRef }, { type: i2.ValidationService }, { type: i3.ElementTrackerService }, { type: i4.ScoreCalculationService }, { type: i5.WhenClauseService }]; }, propDecorators: { question: [{
575
+ args: [{ selector: 'lib-drop-down-fields', template: "<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n >&nbsp;\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <!-- <lib-dropdown\n [items]=\"customOptions\"\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\n (click)=\"selectItems()\"\n [(selectedItems)]=\"selectedValue\"\n ></lib-dropdown> -->\n\n <lib-dropdown\n [placeholder]=\"'select'\"\n [items]=\"customOptions\"\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\n [disable]=\"disableEdit\"\n (selectedItemsChange)=\"selectItems($event)\"\n [(selectedItems)]=\"selectedValue\"\n (onDropdownScroll)=\"getNextSetOfItems($event)\"\n (onSearch)=\"search($event)\"\n ></lib-dropdown>\n\n <!-- (onDropdownScroll)=\"getNextSetOfItems($event)\"\n (onSearch)=\"search($event)\" -->\n <div\n *ngIf=\"isInvalid && (!inLine || selectedValue.length === 0)\"\n class=\"error-message\"\n >\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mb-2\">\n {{ validationMessage }}\n </div>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}::ng-deep .timepicker-overlay{z-index:1000!important}::ng-deep .timepicker-backdrop-overlay{z-index:1000!important}.space{width:5px}.error-message{color:#f44336;font-size:.8em;margin-top:4px;padding:0 8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.invalid-question{border:2px solid #f44336;border-radius:4px;padding:8px;margin-bottom:4px}\n"] }]
576
+ }], ctorParameters: function () { return [{ type: i1.FormService }, { type: i0.ChangeDetectorRef }, { type: i2.ValidationService }, { type: i3.ElementTrackerService }, { type: i4.ScoreCalculationService }, { type: i5.WhenClauseService }, { type: i6.HiddenFieldService }]; }, propDecorators: { question: [{
573
577
  type: Input
574
578
  }], inLine: [{
575
579
  type: Input
@@ -582,4 +586,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
582
586
  }], disableEdit: [{
583
587
  type: Input
584
588
  }] } });
585
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1kb3duLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2Ryb3AtZG93bi1maWVsZHMvZHJvcC1kb3duLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2Ryb3AtZG93bi1maWVsZHMvZHJvcC1kb3duLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFrQnZCLE1BQU0sT0FBTyx1QkFBdUI7SUFtQ2xDLFlBQ1UsV0FBd0IsRUFDeEIsR0FBc0IsRUFDdEIsaUJBQW9DLEVBQ3BDLE9BQThCLEVBQzlCLGdCQUF5QyxFQUN6QyxpQkFBbUM7UUFMbkMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUF1QjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUF4Q3BDLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBRXZCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBR3JDLENBQUM7UUFFTCxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMz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ImltcG9ydCB7IExvZ2ljIH0gZnJvbSAnLi8uLi8uLi9tb2RlbHMvbG9naWMubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRUcmFja2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VsZW1lbnQtdHJhY2tlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTY29yZUNhbGN1bGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Njb3JlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXaGVuQ2xhdXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3doZW5DbGF1c2Uuc2VydmljZSc7XHJcblxyXG5pbnRlcmZhY2UgRHJvcERvd25EYXRhIHtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaW1hZ2U6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZHJvcC1kb3duLWZpZWxkcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3AtZG93bi1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Ryb3AtZG93bi1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3BEb3duRmllbGRzQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBxdWVzdGlvbjogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5MaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5DYXJkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3VibWlzc2lvbkluZGV4ITogbnVtYmVyO1xyXG4gIEBPdXRwdXQoKSBhbnN3ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGFuc3dlcjogYW55O1xyXG4gICAgbWF4UG9zc2libGVTY29yZT86IG51bWJlcjtcclxuICB9PigpO1xyXG5cclxuICBjb3VudDogbnVtYmVyID0gMDtcclxuICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhpbnQ6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGlvblR5cGU6IHN0cmluZyA9ICcnO1xyXG4gIG1pbmltdW1TZWxlY3Rpb246IG51bWJlciA9IDA7XHJcbiAgbWF4aW11bVNlbGVjdGlvbjogbnVtYmVyID0gMDtcclxuICBvcHRpb25UeXBlOiBzdHJpbmcgPSAnJztcclxuICBsb29rdXBUYWJsZTogc3RyaW5nID0gJyc7XHJcbiAgY3VzdG9tT3B0aW9uczogRHJvcERvd25EYXRhW10gPSBbXTtcclxuICBvcmlnaW5hbE9wdGlvbnM6IERyb3BEb3duRGF0YVtdID0gW107XHJcbiAgZGF0YWJhc2U6IGFueSA9IHt9O1xyXG4gIGFwaTogYW55ID0ge307XHJcbiAgb3JpZ2luYWxBcGk6IGFueSA9IHt9O1xyXG4gIHNlbGVjdGVkVmFsdWU6IGFueVtdID0gW107XHJcbiAgdmFsaWRhdGlvbkZhaWxlZCE6IGJvb2xlYW47XHJcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgZWxlbWVudElkOiBzdHJpbmcgPSAnJztcclxuICBoYXNNb3JlRGF0YTogYm9vbGVhbiA9IHRydWU7XHJcbiAgbWF4UG9zc2libGVTY29yZT86IG51bWJlcjtcclxuICBzZWxlY3RlZFZhbHVlczogYW55W10gPSBbXTtcclxuICBkYlBhZ2VJbmRleDogbnVtYmVyID0gMDtcclxuICBkYlBhZ2VTaXplOiBudW1iZXIgPSAxMDtcclxuICBkYlRvdGFsUGFnZXM6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgZGlzYWJsZUVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFja2VyOiBFbGVtZW50VHJhY2tlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNjb3JlQ2FsY1NlcnZpY2U6IFNjb3JlQ2FsY3VsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3aGVuQ2xhdXNlU2VydmljZTpXaGVuQ2xhdXNlU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnZhbHVlQXNzaWduZWQoKTtcclxuICB9XHJcblxyXG4gIG9uVmFsdWVDaGFuZ2UobmV3VmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICB0aGlzLnNlbGVjdEl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUFzc2lnbmVkKCkge1xyXG4gICAgdGhpcy5jb3VudCA9IHRoaXMucXVlc3Rpb24uY291bnQ7XHJcbiAgICB0aGlzLnJlcXVpcmVkID0gdGhpcy5xdWVzdGlvbi5yZXF1aXJlZDtcclxuICAgIHRoaXMuaGludCA9IHRoaXMucXVlc3Rpb24uaGludDtcclxuICAgIHRoaXMuc2VsZWN0aW9uVHlwZSA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5zZWxlY3Rpb25UeXBlO1xyXG4gICAgdGhpcy5taW5pbXVtU2VsZWN0aW9uID1cclxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLm1pbmltdW1TZWxlY3Rpb247XHJcbiAgICB0aGlzLm1heGltdW1TZWxlY3Rpb24gPVxyXG4gICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWF4aW11bVNlbGVjdGlvbjtcclxuICAgIHRoaXMub3B0aW9uVHlwZSA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQub3B0aW9uLm9wdGlvblR5cGU7XHJcblxyXG4gICAgLy8gLS0tIENoZWNrIGlmIGFuc3dlciBpcyBwcmVzZW50IC0tLVxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb24uYW5zd2VyICYmIEFycmF5LmlzQXJyYXkodGhpcy5xdWVzdGlvbi5hbnN3ZXIpKSB7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvblR5cGUgPT09ICdBUEknKSB7XHJcbiAgICAgICAgdGhpcy5hcGkgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5hcGk7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEFwaSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5hcGkpKTtcclxuICAgICAgICAvLyDinIUgQ2hlY2sgaWYgcGFnaW5hdGlvbiBpcyBlbmFibGVkIChwYWdlSW5kZXggKyBwYWdlU2l6ZSBleGlzdCBpbiBwYXJhbXMgd2l0aCB2YWx1ZVNvdXJjZSlcclxuICAgICAgICBjb25zdCBoYXNQYWdpbmF0aW9uID1cclxuICAgICAgICAgIHRoaXMuYXBpPy5wYXJhbXM/LnNvbWUoKHA6IGFueSkgPT4gcC52YWx1ZVNvdXJjZSA9PT0gJ1BBR0VfSU5ERVgnKSAmJlxyXG4gICAgICAgICAgdGhpcy5hcGk/LnBhcmFtcz8uc29tZSgocDogYW55KSA9PiBwLnZhbHVlU291cmNlID09PSAnUEFHRV9TSVpFJyk7XHJcblxyXG4gICAgICAgIGlmIChoYXNQYWdpbmF0aW9uKSB7XHJcbiAgICAgICAgICAvLyDinIUgUG9wdWxhdGUgc2VsZWN0ZWQgdmFsdWVzIGZyb20gYW5zd2VyXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdGhpcy5xdWVzdGlvbi5hbnN3ZXIubWFwKChhbnM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGFucy5zcGxpdCgnfCcpO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSA/IHBhcnRzWzFdIDogcGFydHNbMF07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvblR5cGUgPT09ICdEQVRBQkFTRScpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdGhpcy5xdWVzdGlvbi5hbnN3ZXIubWFwKChhbnM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcGFydHMgPSBhbnMuc3BsaXQoJ3wnKTtcclxuICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0gOiBwYXJ0c1swXTtcclxuICAgICAgICB9KX07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIC0tLSBIYW5kbGUgZGlmZmVyZW50IG9wdGlvbiB0eXBlcyAtLS1cclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25UeXBlKSB7XHJcbiAgICAgIGNhc2UgJ09QVElPTic6XHJcbiAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24uY3VzdG9tT3B0aW9ucy5tYXAoXHJcbiAgICAgICAgICAob3B0aW9uOiB7IHZhbHVlOiBzdHJpbmcgfSkgPT4gKHtcclxuICAgICAgICAgICAgbGFiZWw6IG9wdGlvbi52YWx1ZSxcclxuICAgICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcclxuICAgICAgICAgICAgaW1hZ2U6ICcnLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gWy4uLnRoaXMuY3VzdG9tT3B0aW9uc107XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uYW5zd2VyKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21PcHRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdMT09LVVAnOlxyXG4gICAgICAgIHRoaXMubG9va3VwVGFibGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5sb29rdXBUYWJsZTtcclxuICAgICAgICB0aGlzLmZldGNoRGF0YUZyb21Mb29rdXAoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ0RBVEFCQVNFJzpcclxuICAgICAgICB0aGlzLmRhdGFiYXNlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24uZGF0YWJhc2U7XHJcbiAgICAgICAgdGhpcy5mZXRjaERhdGFGcm9tRGF0YWJhc2UoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ0FQSSc6XHJcbiAgICAgICAgaWYgKCF0aGlzLmFwaSB8fCBPYmplY3Qua2V5cyh0aGlzLmFwaSkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmFwaSA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQub3B0aW9uLmFwaTtcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxBcGkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYXBpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmV0Y2hEYXRhRnJvbUFQSSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gb3B0aW9uIHR5cGU6JywgdGhpcy5vcHRpb25UeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0gU2NvcmluZyAtLS1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5zY29yaW5nICYmXHJcbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuc2NvcmluZy5lbmFibGVTY29yaW5nXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5tYXhQb3NzaWJsZVNjb3JlID1cclxuICAgICAgICB0aGlzLnNjb3JlQ2FsY1NlcnZpY2UuZ2V0TWF4UG9zc2libGVTY29yZUZvclF1ZXN0aW9uKHRoaXMucXVlc3Rpb24pO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uLm1heFBvc3NpYmxlU2NvcmUgPSB0aGlzLm1heFBvc3NpYmxlU2NvcmU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplQ3VzdG9tT3B0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuY3VzdG9tT3B0aW9ucy5mb3JFYWNoKChvcHRpb246IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpc01hdGNoID0gdGhpcy5xdWVzdGlvbj8uYW5zd2VyPy5zb21lKChhOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBwYXJ0cyA9IGEudHJpbSgpLnNwbGl0KCd8Jyk7XHJcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBwYXJ0c1swXTtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFydHNbMV07XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gb3B0aW9uLnZhbHVlICYmIGxhYmVsID09IG9wdGlvbi5sYWJlbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChpc01hdGNoKSB7XHJcbiAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5zb21lKFxyXG4gICAgICAoaXRlbTogYW55KSA9PiBpdGVtLnZhbHVlID09PSBvcHRpb24udmFsdWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFhbHJlYWR5RXhpc3RzKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFsuLi50aGlzLnNlbGVjdGVkVmFsdWUsIG9wdGlvbl07XHJcbiAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYW5zd2VycyA9IEFycmF5LmlzQXJyYXkodGhpcy5xdWVzdGlvbi5hbnN3ZXIpID8gdGhpcy5xdWVzdGlvbi5hbnN3ZXIgOiBbXTtcclxuICAgICAgICAgIGNvbnN0IHBhcnNlZEFuc3dlcnMgPSBhbnN3ZXJzLm1hcCgoYW5zOmFueSkgPT4gYW5zLnNwbGl0KCd8JylbMV0pO1xyXG4gICAgICAgICAgdGhpcy53aGVuQ2xhdXNlU2VydmljZS5zZXRRdWVzdGlvbkFuc3dlcih0aGlzLnF1ZXN0aW9uLmlkLHBhcnNlZEFuc3dlcnMsdHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uY2hpbGRMb2dpY3MgJiYgdGhpcy5xdWVzdGlvbi5hbnN3ZXIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNoaWxkTG9naWNzKHRoaXMucXVlc3Rpb24pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1EYXRhYmFzZU9iamVjdChkYXRhYmFzZTogYW55LHNlbGVjdGVkVmFsdWVzOnN0cmluZ1tdPVtdKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YWJsZU5hbWU6IGRhdGFiYXNlLnRhYmxlTmFtZSxcclxuICAgICAgdmFsdWVGaWVsZDogZGF0YWJhc2UudmFsdWVGaWVsZCxcclxuICAgICAgbGFiZWxGaWVsZDogZGF0YWJhc2UubGFiZWxGaWVsZCxcclxuICAgICAgbGFiZWxQYXR0ZXJuOiBkYXRhYmFzZT8ubGFiZWxQYXR0ZXJuLFxyXG4gICAgICBzZWxlY3RlZFZhbHVlczogc2VsZWN0ZWRWYWx1ZXMsXHJcbiAgICAgIGNyaXRlcmlhOiBkYXRhYmFzZS5jcml0ZXJpYS5tYXAoKGNyaXRlcmlhOiBhbnkpID0+ICh7XHJcbiAgICAgICAgZmllbGQ6IGNyaXRlcmlhLmZpZWxkLFxyXG4gICAgICAgIHZhbHVlU291cmNlOiBjcml0ZXJpYT8udmFsdWVTb3VyY2UsXHJcbiAgICAgICAgY29uZGl0aW9uOiBjcml0ZXJpYS5jb25kaXRpb24sXHJcbiAgICAgICAgdmFsdWU6IGNyaXRlcmlhLmlucHV0VmFsdWUsXHJcbiAgICAgICAgbG9naWNhbE9wZXJhdG9yOiBjcml0ZXJpYS5sb2dpY2FsT3BlcmF0b3IsXHJcbiAgICAgIH0pKSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmZXRjaERhdGFGcm9tRGF0YWJhc2Uoc2VhcmNoU3RyaW5nOnN0cmluZz0nJykge1xyXG4gICBjb25zdCB2YWx1ZT0gdGhpcy5xdWVzdGlvbj8uYW5zd2VyPy5tYXAoKGE6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgW2xhYmVsLCB2YWx1ZV0gPSBhLnNwbGl0KCd8Jyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsYWJlbCxcclxuICAgICAgdmFsdWVcclxuICAgIH07XHJcbiAgfSlcclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YWJhc2UgPSB0aGlzLnRyYW5zZm9ybURhdGFiYXNlT2JqZWN0KHRoaXMuZGF0YWJhc2UsdmFsdWUpO1xyXG4gICAgdGhpcy5mb3JtU2VydmljZS5mZXRjaERhdGFGcm9tRGF0YWJhc2UodHJhbnNmb3JtZWREYXRhYmFzZSx0aGlzLmRiUGFnZUluZGV4LHRoaXMuZGJQYWdlU2l6ZSxzZWFyY2hTdHJpbmcsdHJ1ZSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kYlRvdGFsUGFnZXMgPSByZXNwb25zZS5yZXN1bHQudG90YWxQYWdlcztcclxuICAgICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPVxyXG4gICAgICAgICAgICByZXNwb25zZS5yZXN1bHQ/LmNvbnRlbnQ/Lm1hcChcclxuICAgICAgICAgICAgICAoaXRlbTogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0pID0+ICh7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkgfHwgW107XHJcbiAgICAgICAgICBpZiAodGhpcy5kYlBhZ2VJbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSBbLi4ubmV3T3B0aW9uc107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gW1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuY3VzdG9tT3B0aW9ucyxcclxuICAgICAgICAgICAgICAuLi5uZXdPcHRpb25zLFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IFsuLi50aGlzLmN1c3RvbU9wdGlvbnNdO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21PcHRpb24oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YSBmcm9tIGRhdGFiYXNlOicsIHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hUVFAgRXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZldGNoRGF0YUZyb21Mb29rdXAoKSB7XHJcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZldGNoRGF0YUZyb21Mb29rdXAodGhpcy5sb29rdXBUYWJsZSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSByZXNwb25zZS5yZXN1bHQudmFsdWVzLm1hcChcclxuICAgICAgICAgIChpdGVtOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSkgPT4gKHtcclxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXHJcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gWy4uLnRoaXMuY3VzdG9tT3B0aW9uc107XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uYW5zd2VyKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21PcHRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hUVFAgRXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hEYXRhRnJvbUFQSShhcHBlbmQ6IGJvb2xlYW4gPSBmYWxzZSwgc2VhcmNoOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGFwaUNvbmZpZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5hcGkpKTtcclxuICAgIGlmICghdGhpcy5oYXNNb3JlRGF0YSAmJiBhcHBlbmQpIHtcclxuICAgICAgLy8gSWYgbm8gbW9yZSBkYXRhIGZyb20gbGFzdCBjYWxsIGFuZCB0aGlzIGlzIGFuIGFwcGVuZCBjYWxsLCBza2lwIEFQSVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBhbGxvd2VkQ2hhcnMgPSBbJy4nLCAnLCcsICctJywgJ18nLCAnKCcsICcpJywgJyddO1xyXG5cclxuICAgIGlmIChzZWFyY2gpIHtcclxuICAgICAgaWYgKGFwaUNvbmZpZy5wYXJhbXMpIHtcclxuICAgICAgICBhcGlDb25maWcucGFyYW1zID0gYXBpQ29uZmlnLnBhcmFtcy5maWx0ZXIoXHJcbiAgICAgICAgICAocDogYW55KSA9PiBwLnZhbHVlU291cmNlICE9PSAnU0VMRUNURURfVkFMVUVTJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFwaUNvbmZpZy5oZWFkZXJzKSB7XHJcbiAgICAgICAgYXBpQ29uZmlnLmhlYWRlcnMgPSBhcGlDb25maWcuaGVhZGVycy5maWx0ZXIoXHJcbiAgICAgICAgICAoaDogYW55KSA9PiBoLnZhbHVlU291cmNlICE9PSAnU0VMRUNURURfVkFMVUVTJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1TZXJ2aWNlXHJcbiAgICAgIC5mZXRjaERhdGFGcm9tRXh0ZXJuYWxBUEkoYXBpQ29uZmlnLCB0aGlzLnNlbGVjdGVkVmFsdWVzKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGRhdGE7XHJcbiAgICAgICAgICBpZiAoYXBpQ29uZmlnLnBhdGhUb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmV4dHJhY3REYXRhQnlQYXRoKHJlc3BvbnNlLCBhcGlDb25maWcucGF0aFRvVmFsdWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBkYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBhcGlDb25maWcubGFiZWxQYXR0ZXJuICYmXHJcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShhcGlDb25maWcubGFiZWxQYXR0ZXJuKSAmJlxyXG4gICAgICAgICAgICAgIGFwaUNvbmZpZy5sYWJlbFBhdHRlcm4ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBsZXQgbGFiZWwgPSAnJztcclxuICAgICAgICAgICAgICBhcGlDb25maWcubGFiZWxQYXR0ZXJuLmZvckVhY2goKHBhdHRlcm46IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRDaGFycy5pbmNsdWRlcyhwYXR0ZXJuKSkge1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbCArPSBwYXR0ZXJuO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1bcGF0dGVybl0gIT09IHVuZGVmaW5lZCAmJiBpdGVtW3BhdHRlcm5dICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwgKz0gaXRlbVtwYXR0ZXJuXSsnICc7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bYXBpQ29uZmlnLnZhbHVlRmllbGQudHJpbSgpXSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVthcGlDb25maWcudmFsdWVGaWVsZC50cmltKCldLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW1bYXBpQ29uZmlnLmxhYmVsRmllbGQudHJpbSgpXSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoYXBwZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IFsuLi50aGlzLmN1c3RvbU9wdGlvbnMsIC4uLm5ld09wdGlvbnNdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gbmV3T3B0aW9ucztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gWy4uLnRoaXMuY3VzdG9tT3B0aW9uc107XHJcblxyXG4gICAgICAgICAgLy8gSWYgbm8gbmV3IGRhdGEgcmV0dXJuZWQsIG1hcmsgYXMgbGFzdCBwYWdlXHJcbiAgICAgICAgICBpZiAoIW5ld09wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzTW9yZURhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5hbnN3ZXIgJiYgIWFwcGVuZCAmJiAhc2VhcmNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUN1c3RvbU9wdGlvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdIVFRQIEVycm9yOicsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0RGF0YUJ5UGF0aChkYXRhOiBhbnksIHBhdGg6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgcGFydCkgPT4gYWNjICYmIGFjY1twYXJ0XSwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RJdGVtcyhldmVudD86IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQ7XHJcblxyXG4gICAgY29uc3QgdmFsdWVzQXJyYXkgPSB0aGlzLnNlbGVjdGVkVmFsdWUubWFwKFxyXG4gICAgICAoaXRlbSkgPT4gYCR7aXRlbS5sYWJlbH18JHtpdGVtLnZhbHVlfWBcclxuICAgICk7XHJcbiAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IHZhbHVlc0FycmF5O1xyXG4gICAgY29uc3Qgc2NvcmVSZXN1bHQgPSB0aGlzLnNjb3JlQ2FsY1NlcnZpY2UuY2FsY3VsYXRlU2NvcmVGcm9tQW5zd2VyKFxyXG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlcixcclxuICAgICAgdGhpcy5xdWVzdGlvblxyXG4gICAgKTtcclxuICAgIHRoaXMucXVlc3Rpb24uc2NvcmUgPSBzY29yZVJlc3VsdD8uc2NvcmVzO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPT0gMCAmJiB0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uYDtcclxuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbk1lc3NhZ2UgPSBgVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uYDtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPCB0aGlzLm1pbmltdW1TZWxlY3Rpb24gfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA+IHRoaXMubWF4aW11bVNlbGVjdGlvblxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgc2VsZWN0ZWQgb3B0aW9ucyBtdXN0IGJlIGJldHdlZW4gJHt0aGlzLm1pbmltdW1TZWxlY3Rpb259ICYgJHt0aGlzLm1heGltdW1TZWxlY3Rpb259YDtcclxuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbk1lc3NhZ2UgPSBgc2VsZWN0ZWQgb3B0aW9ucyBtdXN0IGJlIGJldHdlZW4gJHt0aGlzLm1pbmltdW1TZWxlY3Rpb259ICYgJHt0aGlzLm1heGltdW1TZWxlY3Rpb259YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5jaGlsZExvZ2ljcykge1xyXG4gICAgICB0aGlzLnVwZGF0ZUNoaWxkTG9naWNzKHRoaXMucXVlc3Rpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbnN3ZXJDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIGFuc3dlcjogdGhpcy5xdWVzdGlvbi5hbnN3ZXIsXHJcbiAgICAgIG1heFBvc3NpYmxlU2NvcmU6IHRoaXMubWF4UG9zc2libGVTY29yZSxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYW5zd2VycyA9IEFycmF5LmlzQXJyYXkodGhpcy5xdWVzdGlvbi5hbnN3ZXIpID8gdGhpcy5xdWVzdGlvbi5hbnN3ZXIgOiBbXTtcclxuICAgIGNvbnN0IHBhcnNlZEFuc3dlcnMgPSBhbnN3ZXJzLm1hcCgoYW5zOmFueSkgPT4gYW5zLnNwbGl0KCd8JylbMV0pO1xyXG4gICAgdGhpcy53aGVuQ2xhdXNlU2VydmljZS5zZXRRdWVzdGlvbkFuc3dlcih0aGlzLnF1ZXN0aW9uLmlkLHBhcnNlZEFuc3dlcnMpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2hpbGRMb2dpY3MocXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLmNoaWxkTG9naWNzICYmIEFycmF5LmlzQXJyYXkocXVlc3Rpb24uY2hpbGRMb2dpY3MpKSB7XHJcbiAgICAgIHF1ZXN0aW9uLmNoaWxkTG9naWNzLmZvckVhY2goKGNoaWxkTG9naWM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT0gJ1NJTkdMRScpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoY2hpbGRMb2dpYyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlWzBdPy5sYWJlbDtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVDb25kaXRpb24oXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRMb2dpYy5jb25kaXRpb24sXHJcbiAgICAgICAgICAgICAgICBjaGlsZExvZ2ljLmlucHV0VmFsdWVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGNoaWxkTG9naWMuc2hvd0xvZ2ljID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoY2hpbGRMb2dpYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gJ01VTFRJUExFJykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBjaGlsZExvZ2ljLnNob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckFuc3dlcnNSZWN1cnNpdmVseShjaGlsZExvZ2ljKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcChcclxuICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLmxhYmVsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlTXVsdGlwbGVDb25kaXRpb24oXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlcyxcclxuICAgICAgICAgICAgICAgIGNoaWxkTG9naWMuY29uZGl0aW9uLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRMb2dpYy5pbnB1dFZhbHVlXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KGNoaWxkTG9naWMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KGxvZ2ljOiBhbnkpIHtcclxuICAgIGlmICghbG9naWMgfHwgIWxvZ2ljLnJvd3MpIHJldHVybjtcclxuXHJcbiAgICBsb2dpYy5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgIHJvdy5ncmlkLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpdGVtLmVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmIChpdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiYgZWxlbWVudCkge1xyXG4gICAgICAgICAgLy8gQ2xlYXIgYW5zd2VyIGlmIHByZXNlbnRcclxuICAgICAgICAgIGlmICgnYW5zd2VyJyBpbiBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuYW5zd2VyID0gJyc7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY2xlYXIgY2hpbGRMb2dpY3MgaWYgYW55XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZExvZ2ljcyAmJiBlbGVtZW50LmNoaWxkTG9naWNzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZWxlbWVudC5jaGlsZExvZ2ljcy5mb3JFYWNoKChjaGlsZExvZ2ljOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KGNoaWxkTG9naWMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpdGVtLmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJiBlbGVtZW50ICYmIGVsZW1lbnQucm93cykge1xyXG4gICAgICAgICAgLy8gU1VCRk9STSBjb250YWlucyBpdHMgb3duIHJvd3Mgc3RydWN0dXJlIGxpa2UgYSBmb3JtXHJcbiAgICAgICAgICB0aGlzLmNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KHsgcm93czogZWxlbWVudC5yb3dzIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQ29uZGl0aW9uKGFuc3dlcjogYW55LCBjb25kaXRpb246IHN0cmluZywgaW5wdXRWYWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzdHJpbmdJbnB1dFZhbHVlID0gQXJyYXkuaXNBcnJheShpbnB1dFZhbHVlKVxyXG4gICAgICA/IGlucHV0VmFsdWUubWFwKCh2YWwpID0+IHZhbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgIDogaW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgYW5zd2VyID0gQXJyYXkuaXNBcnJheShhbnN3ZXIpXHJcbiAgICAgID8gYW5zd2VyPy5tYXAoKGFucykgPT4gYW5zLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgIDogYW5zd2VyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xyXG4gICAgICBjYXNlICchPSc6XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlciAhPSBpbnB1dFZhbHVlO1xyXG4gICAgICBjYXNlICc9JzpcclxuICAgICAgICByZXR1cm4gYW5zd2VyID09IGlucHV0VmFsdWU7XHJcbiAgICAgIGNhc2UgJ0lOJzpcclxuICAgICAgICByZXR1cm4gc3RyaW5nSW5wdXRWYWx1ZS5pbmNsdWRlcyhhbnN3ZXIpO1xyXG4gICAgICBjYXNlICdOT1QgSU4nOlxyXG4gICAgICAgIHJldHVybiAhc3RyaW5nSW5wdXRWYWx1ZS5pbmNsdWRlcyhhbnN3ZXIpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV2YWx1YXRlTXVsdGlwbGVDb25kaXRpb24oXHJcbiAgICBhbnN3ZXJzOiBhbnksXHJcbiAgICBjb25kaXRpb246IHN0cmluZyxcclxuICAgIGlucHV0VmFsdWU6IGFueVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc3RyaW5nSW5wdXRWYWx1ZSA9IEFycmF5LmlzQXJyYXkoaW5wdXRWYWx1ZSlcclxuICAgICAgPyBpbnB1dFZhbHVlLm1hcCgodmFsKSA9PiB2YWwudG9TdHJpbmcoKSlcclxuICAgICAgOiBpbnB1dFZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICBhbnN3ZXJzID0gQXJyYXkuaXNBcnJheShhbnN3ZXJzKVxyXG4gICAgICA/IGFuc3dlcnM/Lm1hcCgoYW5zd2VyKSA9PiBhbnN3ZXIudG9Mb3dlckNhc2UoKSlcclxuICAgICAgOiBhbnN3ZXJzLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xyXG4gICAgICBjYXNlICchPSc6XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlcnMuZXZlcnkoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIgIT0gc3RyaW5nSW5wdXRWYWx1ZSk7XHJcbiAgICAgIGNhc2UgJz0nOlxyXG4gICAgICAgIHJldHVybiBhbnN3ZXJzLnNvbWUoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIgPT0gc3RyaW5nSW5wdXRWYWx1ZSk7XHJcbiAgICAgIGNhc2UgJ0lOJzpcclxuICAgICAgICByZXR1cm4gYW5zd2Vycy5zb21lKChhbnN3ZXI6IGFueSkgPT4gc3RyaW5nSW5wdXRWYWx1ZS5pbmNsdWRlcyhhbnN3ZXIpKTtcclxuICAgICAgY2FzZSAnTk9UIElOJzpcclxuICAgICAgICByZXR1cm4gYW5zd2Vycy5ldmVyeShcclxuICAgICAgICAgIChhbnN3ZXI6IGFueSkgPT4gIXN0cmluZ0lucHV0VmFsdWUuaW5jbHVkZXMoYW5zd2VyKVxyXG4gICAgICAgICk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlVmFsaWRhdGlvbihcclxuICAgIGlzVmFsaWQ6IGJvb2xlYW4sXHJcbiAgICBtZXNzYWdlOiBzdHJpbmcgPSAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCdcclxuICApIHtcclxuICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnNldEludmFsaWQodGhpcy5xdWVzdGlvbi5pZCwgbWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pbkxpbmUgfHwgdGhpcy5pbkNhcmRcclxuICAgICAgPyBgJHt0aGlzLnN1Ym1pc3Npb25JbmRleH0tJHt0aGlzLnF1ZXN0aW9uLmlkfWBcclxuICAgICAgOiBgJHt0aGlzLnF1ZXN0aW9uLmlkfWA7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcclxuICB9XHJcblxyXG4gIGdldCBlcnJvck1lc3NhZ2UoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUGFnaW5hdGlvbihhcGlDb25maWc6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hlY2tWYWx1ZVNvdXJjZSA9IChhcnI6IGFueVtdKSA9PlxyXG4gICAgICBBcnJheS5pc0FycmF5KGFycikgJiZcclxuICAgICAgYXJyLnNvbWUoXHJcbiAgICAgICAgKGl0ZW0pID0+XHJcbiAgICAgICAgICBpdGVtPy52YWx1ZVNvdXJjZSA9PT0gJ1BBR0VfSU5ERVgnIHx8XHJcbiAgICAgICAgICBpdGVtPy52YWx1ZVNvdXJjZSA9PT0gJ1BBR0VfU0laRSdcclxuICAgICAgKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBjaGVja1ZhbHVlU291cmNlKGFwaUNvbmZpZy5oZWFkZXJzKSB8fFxyXG4gICAgICBjaGVja1ZhbHVlU291cmNlKGFwaUNvbmZpZy5wYXJhbXMpIHx8XHJcbiAgICAgIGNoZWNrVmFsdWVTb3VyY2UoYXBpQ29uZmlnLnBhdGhWYXJpYWJsZXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmV4dFNldE9mSXRlbXMoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgIGlmIChcclxuICAgICAgTWF0aC5mbG9vcihlbGVtZW50LnNjcm9sbEhlaWdodCAtIGVsZW1lbnQuc2Nyb2xsVG9wKSA8PVxyXG4gICAgICAgIGVsZW1lbnQuY2xpZW50SGVpZ2h0ICYmXHJcbiAgICAgIHRoaXMuaGFzUGFnaW5hdGlvbih0aGlzLmFwaSkgLy8gT25seSBpZiBwYWdpbmF0aW9uIGlzIGNvbmZpZ3VyZWRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmxvYWROZXh0UGFnZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgZWxzZSBpZiggdGhpcy5vcHRpb25UeXBlID09PSAnREFUQUJBU0UnICYmIHRoaXMuZGJQYWdlSW5kZXggPCB0aGlzLmRiVG90YWxQYWdlcyl7XHJcbiAgICAgIHRoaXMuZGJQYWdlSW5kZXggKz0xO1xyXG4gICAgICB0aGlzLmZldGNoRGF0YUZyb21EYXRhYmFzZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkTmV4dFBhZ2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuaGFzTW9yZURhdGEpIHJldHVybjtcclxuICAgIC8vIEZpbmQgdGhlIFBBR0VfSU5ERVggcGFyYW0vaGVhZGVyL3BhdGhWYXIgYW5kIGluY3JlbWVudCBpdFxyXG4gICAgY29uc3QgdXBkYXRlVmFsdWVTb3VyY2UgPSAoYXJyOiBhbnlbXSkgPT4ge1xyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuO1xyXG4gICAgICBhcnIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnZhbHVlU291cmNlID09PSAnUEFHRV9JTkRFWCcpIHtcclxuICAgICAgICAgIGxldCBjdXJyZW50UGFnZSA9IHBhcnNlSW50KGl0ZW0uaW5wdXRWYWx1ZSB8fCAnMCcsIDEwKTtcclxuICAgICAgICAgIGl0ZW0uaW5wdXRWYWx1ZSA9IChjdXJyZW50UGFnZSArIDEpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgdXBkYXRlVmFsdWVTb3VyY2UodGhpcy5hcGkuaGVhZGVycyk7XHJcbiAgICB1cGRhdGVWYWx1ZVNvdXJjZSh0aGlzLmFwaS5wYXJhbXMpO1xyXG4gICAgdXBkYXRlVmFsdWVTb3VyY2UodGhpcy5hcGkucGF0aFZhcmlhYmxlcyk7XHJcblxyXG4gICAgLy8gQ2FsbCB5b3VyIGZldGNoIGZ1bmN0aW9uIGFnYWluXHJcbiAgICB0aGlzLmZldGNoRGF0YUZyb21BUEkodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2goc2VhcmNoVGVybTogc3RyaW5nKSB7XHJcbiAgICBpZiggdGhpcy5vcHRpb25UeXBlID09PSdEQVRBQkFTRScpe1xyXG4gICAgICB0aGlzLmRiUGFnZUluZGV4ID0wO1xyXG4gICAgICB0aGlzLmZldGNoRGF0YUZyb21EYXRhYmFzZShzZWFyY2hUZXJtLnRyaW0oKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLm9wdGlvblR5cGUgIT09ICdBUEknKSB7XHJcbiAgICAgIC8vIPCflLkgTG9jYWwgc2VhcmNoXHJcbiAgICAgIGlmIChzZWFyY2hUZXJtICYmIHNlYXJjaFRlcm0udHJpbSgpICE9PSAnJykge1xyXG4gICAgICAgIGNvbnN0IGxvd2VyU2VhcmNoID0gc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxyXG4gICAgICAgICAgb3B0aW9uLmxhYmVsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyU2VhcmNoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gUmVzZXQgdG8gZnVsbCBsaXN0IHdoZW4gc2VhcmNoIGlzIGNsZWFyZWRcclxuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSBbLi4udGhpcy5vcmlnaW5hbE9wdGlvbnNdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8g8J+UuSBBUEkgc2VhcmNoXHJcbiAgICAgIGlmIChzZWFyY2hUZXJtICYmIHNlYXJjaFRlcm0udHJpbSgpICE9PSAnJykge1xyXG4gICAgICAgIC8vIEluamVjdCBzZWFyY2ggdGVybSBpbnRvIEFQSSBjb25maWcgKGhlYWRlcnMgb3IgcGFyYW1zKVxyXG4gICAgICAgIHRoaXMuaW5qZWN0U2VhcmNoU3RyaW5nKHNlYXJjaFRlcm0udHJpbSgpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDwn5S5IENsZWFyIHRoZSBzZWFyY2ggc3RyaW5nIGZyb20gQVBJIGNvbmZpZyB3aGVuIGlucHV0IGlzIGVtcHR5XHJcbiAgICAgICAgdGhpcy5pbmplY3RTZWFyY2hTdHJpbmcoJycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZXNldCBwYWdpbmF0aW9uXHJcbiAgICAgIHRoaXMuaGFzTW9yZURhdGEgPSB0cnVlO1xyXG4gICAgICAvLyBGZXRjaCBmcmVzaCByZXN1bHRzXHJcbiAgICAgIHRoaXMuZmV0Y2hEYXRhRnJvbUFQSShmYWxzZSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmplY3RTZWFyY2hTdHJpbmcoc2VhcmNoVGVybTogc3RyaW5nKSB7XHJcbiAgICAvLyBBbHdheXMgd29yayBvbiBhIGZyZXNoIGNvcHksIGRvbuKAmXQgbXV0YXRlIHRoaXMuYXBpIGRpcmVjdGx5XHJcbiAgICB0aGlzLmFwaSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vcmlnaW5hbEFwaSkpO1xyXG5cclxuICAgIGlmICh0aGlzLmFwaT8ucGFyYW1zKSB7XHJcbiAgICAgIHRoaXMuYXBpLnBhcmFtcy5mb3JFYWNoKChwOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocC52YWx1ZVNvdXJjZSA9PT0gJ1NFQVJDSF9TVFJJTkcnKSB7XHJcbiAgICAgICAgICBwLmlucHV0VmFsdWUgPSBzZWFyY2hUZXJtO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXBpPy5oZWFkZXJzKSB7XHJcbiAgICAgIHRoaXMuYXBpLmhlYWRlcnMuZm9yRWFjaCgoaDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGgudmFsdWVTb3VyY2UgPT09ICdTRUFSQ0hfU1RSSU5HJykge1xyXG4gICAgICAgICAgaC5pbnB1dFZhbHVlID0gc2VhcmNoVGVybTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMuaW5MaW5lIHx8IHRoaXMuaW5DYXJkKSB7XHJcbiAgICAgIHRoaXMuZWxlbWVudElkID0gYHF1ZXN0aW9uLSR7dGhpcy5zdWJtaXNzaW9uSW5kZXh9LSR7dGhpcy5xdWVzdGlvbi5pZH1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbGVtZW50SWQgPSBgcXVlc3Rpb24tJHt0aGlzLnF1ZXN0aW9uLmlkfWA7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmFja2VyLnJlZ2lzdGVyRWxlbWVudCh0aGlzLmVsZW1lbnRJZCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy53aGVuQ2xhdXNlU2VydmljZS5tYXJrTG9hZENvbXBsZXRlZCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmVsZW1lbnRJZCkge1xyXG4gICAgICB0aGlzLnRyYWNrZXIudW5yZWdpc3RlckVsZW1lbnQodGhpcy5lbGVtZW50SWQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgW25nQ2xhc3NdPVwieyAnbWItNCc6ICFpbkxpbmUgfVwiXHJcbiAgY2xhc3M9XCJweC0zXCJcclxuICBbaWRdPVwiKGluTGluZSB8fCBpbkNhcmQpID8gJ3F1ZXN0aW9uLScgKyBzdWJtaXNzaW9uSW5kZXggKyAnLScgKyBxdWVzdGlvbi5pZCA6ICdxdWVzdGlvbi0nICsgcXVlc3Rpb24uaWRcIlxyXG4gIFthdHRyLm5hbWVdPVwicXVlc3Rpb24udGVzdEVsZW1lbnROYW1lXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyIG1iLTJcIiAqbmdJZj1cIiFpbkxpbmVcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvbk51bWJlclwiIFtpbm5lckhUTUxdPVwicXVlc3Rpb24ucXVlc3Rpb25OdW1iZXJcIj48L2Rpdj5cclxuICAgIDxzcGFuICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25OdW1iZXJcIiBjbGFzcz1cInNwYWNlXCI+PC9zcGFuPiA8bGFiZWw+e3sgcXVlc3Rpb24ucXVlc3Rpb24gfX08L2xhYmVsXHJcbiAgICA+Jm5ic3A7XHJcbiAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJxdWVzdGlvbj8ucmVxdWlyZWRcIj4qPC9zcGFuPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInN2Zy13cmFwcGVyIG1iLTIgaGludEljb25cIlxyXG4gICAgICBbYXR0ci5kYXRhLXRpdGxlXT1cImhpbnRcIlxyXG4gICAgICAqbmdJZj1cImhpbnRcIlxyXG4gICAgPlxyXG4gICAgICA8c3ZnXHJcbiAgICAgICAgY2xhc3M9XCJoaW50U3ZnXCJcclxuICAgICAgICB2aWV3Qm94PVwiMCAwIDMwIDMwXCJcclxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgZD1cIk0xNSAyNi4yNVYyNi4yNUM4Ljc4NjI1IDI2LjI1IDMuNzUgMjEuMjEzOCAzLjc1IDE1VjE1QzMuNzUgOC43ODYyNSA4Ljc4NjI1IDMuNzUgMTUgMy43NVYzLjc1QzIxLjIxMzggMy43NSAyNi4yNSA4Ljc4NjI1IDI2LjI1IDE1VjE1QzI2LjI1IDIxLjIxMzggMjEuMjEzOCAyNi4yNSAxNSAyNi4yNVpcIlxyXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXHJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgZD1cIk0xNSAxNi41NjIzVjE2LjI0OThDMTUgMTUuMjI4NSAxNS42MzEyIDE0LjY3NDggMTYuMjYzNyAxNC4yNDk4QzE2Ljg4MTIgMTMuODMzNSAxNy41IDEzLjI5MSAxNy41IDEyLjI5MUMxNy41IDEwLjkwOTggMTYuMzgxMyA5Ljc5MTAyIDE1IDkuNzkxMDJDMTMuNjE4NyA5Ljc5MTAyIDEyLjUgMTAuOTA5OCAxMi41IDEyLjI5MVwiXHJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcclxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTE0Ljk5ODggMjBDMTQuODI2MyAyMCAxNC42ODYzIDIwLjE0IDE0LjY4NzUgMjAuMzEyNUMxNC42ODc1IDIwLjQ4NSAxNC44Mjc1IDIwLjYyNSAxNSAyMC42MjVDMTUuMTcyNSAyMC42MjUgMTUuMzEyNSAyMC40ODUgMTUuMzEyNSAyMC4zMTI1QzE1LjMxMjUgMjAuMTQgMTUuMTcyNSAyMCAxNC45OTg4IDIwXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxyXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSA8bGliLWRyb3Bkb3duXHJcbiAgICBbaXRlbXNdPVwiY3VzdG9tT3B0aW9uc1wiXHJcbiAgICBbbXVsdGlwbGVdPVwic2VsZWN0aW9uVHlwZSA9PT0gJ1NJTkdMRScgPyBmYWxzZSA6IHRydWVcIlxyXG4gICAgKGNsaWNrKT1cInNlbGVjdEl0ZW1zKClcIlxyXG4gICAgWyhzZWxlY3RlZEl0ZW1zKV09XCJzZWxlY3RlZFZhbHVlXCJcclxuICA+PC9saWItZHJvcGRvd24+IC0tPlxyXG5cclxuICA8bGliLWRyb3Bkb3duXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlbGVjdCdcIlxyXG4gICAgW2l0ZW1zXT1cImN1c3RvbU9wdGlvbnNcIlxyXG4gICAgW211bHRpcGxlXT1cInNlbGVjdGlvblR5cGUgPT09ICdTSU5HTEUnID8gZmFsc2UgOiB0cnVlXCJcclxuICAgIFtkaXNhYmxlXT1cImRpc2FibGVFZGl0XCJcclxuICAgIChzZWxlY3RlZEl0ZW1zQ2hhbmdlKT1cInNlbGVjdEl0ZW1zKCRldmVudClcIlxyXG4gICAgWyhzZWxlY3RlZEl0ZW1zKV09XCJzZWxlY3RlZFZhbHVlXCJcclxuICAgIChvbkRyb3Bkb3duU2Nyb2xsKT1cImdldE5leHRTZXRPZkl0ZW1zKCRldmVudClcIlxyXG4gICAgKG9uU2VhcmNoKT1cInNlYXJjaCgkZXZlbnQpXCJcclxuICA+PC9saWItZHJvcGRvd24+XHJcblxyXG4gIDwhLS0gKG9uRHJvcGRvd25TY3JvbGwpPVwiZ2V0TmV4dFNldE9mSXRlbXMoJGV2ZW50KVwiXHJcbiAgKG9uU2VhcmNoKT1cInNlYXJjaCgkZXZlbnQpXCIgLS0+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJpc0ludmFsaWQgJiYgKCFpbkxpbmUgfHwgc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPT09IDApXCJcclxuICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXHJcbiAgPlxyXG4gICAge3sgZXJyb3JNZXNzYWdlIH19XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cInZhbGlkYXRpb25GYWlsZWQgJiYgIWlzSW52YWxpZFwiIGNsYXNzPVwidGV4dC1kYW5nZXIgZXJyb3ItbWVzc2FnZSBtYi0yXCI+XHJcbiAgICB7eyB2YWxpZGF0aW9uTWVzc2FnZSB9fVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
589
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1kb3duLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2Ryb3AtZG93bi1maWVsZHMvZHJvcC1kb3duLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2Ryb3AtZG93bi1maWVsZHMvZHJvcC1kb3duLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBbUJ2QixNQUFNLE9BQU8sdUJBQXVCO0lBbUNsQyxZQUNVLFdBQXdCLEVBQ3hCLEdBQXNCLEVBQ3RCLGlCQUFvQyxFQUNwQyxPQUE4QixFQUM5QixnQkFBeUMsRUFDekMsaUJBQW1DLEVBQ25DLGtCQUFxQztRQU5yQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUFDekMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBekN0QyxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ25CLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV2QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUdyQyxDQUFDO1FBRUwsVUFBSyxHQUFXLENBQUMsQ0FBQztRQUNsQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDM0IscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBQzdCLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUM3QixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUNuQyxvQkFBZSxHQUFtQixFQUFFLENBQUM7UUFDckMsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUNuQixRQUFHLEdBQVEsRUFBRSxDQUFDO1FBQ2QsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFDdEIsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFFMUIsc0JBQWlCLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDL0IsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUFFNUIsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFDM0IsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUNoQixnQkFBVyxHQUFZLEtBQUssQ0FBQztJQVVuQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWE7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxnQkFBZ0I7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1FBQ3hELElBQUksQ0FBQyxnQkFBZ0I7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1FBQ3hELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUU5RCxxQ0FBcUM7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0QsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRTtnQkFDN0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsMkZBQTJGO2dCQUMzRixNQUFNLGFBQWEsR0FDakIsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQztvQkFDbEUsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDO2dCQUVwRSxJQUFJLGFBQWEsRUFBRTtvQkFDakIseUNBQXlDO29CQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO3dCQUM3RCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM3QixPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEQsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtpQkFFSyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO29CQUM3RCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM3QixPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEQsQ0FBQyxDQUFDLENBQUE7YUFBQztZQUFBLENBQUM7U0FDUDtRQUdELHdDQUF3QztRQUN4QyxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkIsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3JFLENBQUMsTUFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDOUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO29CQUNuQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7b0JBQ25CLEtBQUssRUFBRSxFQUFFO2lCQUNWLENBQUMsQ0FDSCxDQUFDO2dCQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtvQkFDeEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7aUJBQy9CO2dCQUNELE1BQU07WUFFUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0IsTUFBTTtZQUVSLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQzFELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM3QixNQUFNO1lBRVIsS0FBSyxLQUFLO2dCQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3pEO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixNQUFNO1lBRVI7Z0JBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDekQ7UUFFRCxrQkFBa0I7UUFDbEIsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQy9DO1lBQ0EsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFFcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDckQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDdEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLE9BQU8sS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7aUJBQ3ZEO3FCQUFNO29CQUNMLE9BQU8sS0FBSyxDQUFDO2lCQUNkO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLE9BQU8sRUFBRTtnQkFDWCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDL0MsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FDM0MsQ0FBQztnQkFFRixJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2lCQUN0RDtnQkFFRyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDaEYsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRixDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDckQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN2QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBYSxFQUFDLGlCQUF3QixFQUFFO1FBQzlELE9BQU87WUFDTCxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7WUFDN0IsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtZQUMvQixZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVk7WUFDcEMsY0FBYyxFQUFFLGNBQWM7WUFDOUIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRCxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3JCLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVztnQkFDbEMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixLQUFLLEVBQUUsUUFBUSxDQUFDLFVBQVU7Z0JBQzFCLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZTthQUMxQyxDQUFDLENBQUM7U0FDSixDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQixDQUFDLGVBQW9CLEVBQUU7UUFDM0MsTUFBTSxLQUFLLEdBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUU7WUFDckQsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLE9BQU87Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2FBQ04sQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0EsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixFQUFDLElBQUksQ0FBQyxXQUFXLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUN0SCxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO2dCQUMvQyxNQUFNLFVBQVUsR0FDZCxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQzNCLENBQUMsSUFBc0MsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDM0MsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7aUJBQ2xCLENBQUMsQ0FDSCxJQUFJLEVBQUUsQ0FBQztnQkFDVixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQyxFQUFFO29CQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztpQkFDdEM7cUJBQ0k7b0JBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRzt3QkFDbkIsR0FBRyxJQUFJLENBQUMsYUFBYTt3QkFDckIsR0FBRyxVQUFVO3FCQUNkLENBQUM7aUJBQ0g7Z0JBR0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUUvQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUN4QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztpQkFDL0I7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN2RTtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQzlELENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDN0MsQ0FBQyxJQUFzQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzthQUNsQixDQUFDLENBQ0gsQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUN4QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzthQUMvQjtRQUNILENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBa0IsS0FBSyxFQUFFLFNBQWtCLEtBQUs7UUFDL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sRUFBRTtZQUMvQixzRUFBc0U7WUFDdEUsT0FBTztTQUNSO1FBQ0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV4RCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDcEIsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDeEMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssaUJBQWlCLENBQ2hELENBQUM7YUFDSDtZQUNELElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDckIsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssaUJBQWlCLENBQ2hELENBQUM7YUFDSDtTQUNGO1FBRUQsSUFBSSxDQUFDLFdBQVc7YUFDYix3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQzthQUN4RCxTQUFTLENBQ1IsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDO1lBQ1QsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFO2dCQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDaEU7aUJBQU07Z0JBQ0wsSUFBSSxHQUFHLFFBQVEsQ0FBQzthQUNqQjtZQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDeEMsSUFDRSxTQUFTLENBQUMsWUFBWTtvQkFDdEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO29CQUNyQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2pDO29CQUNBLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDZixTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQWUsRUFBRSxFQUFFO3dCQUNqRCxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUN6QixJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7NEJBQ2xDLEtBQUssSUFBSSxPQUFPLENBQUM7eUJBQ2xCOzZCQUFNOzRCQUNMLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFO2dDQUN6RCxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFDLEdBQUcsQ0FBQzs2QkFDNUI7eUJBQ0Y7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTzt3QkFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3hDLEtBQUssRUFBRSxLQUFLO3FCQUNiLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsT0FBTzt3QkFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3hDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztxQkFDekMsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO2FBQzdEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRS9DLDZDQUE2QztZQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7YUFDMUI7WUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzthQUMvQjtRQUNILENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUNGLENBQUM7SUFDTixDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBUyxFQUFFLElBQVk7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFXO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUN4QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FDeEMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQ2hFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUNwQixJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBRTFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsNkJBQTZCLENBQUM7WUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsNkJBQTZCLENBQUM7U0FDakU7YUFBTSxJQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0I7WUFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUNqRDtZQUNBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsb0NBQW9DLElBQUksQ0FBQyxnQkFBZ0IsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoSCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxvQ0FBb0MsSUFBSSxDQUFDLGdCQUFnQixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzFIO2FBQU07WUFDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUNqQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDNUIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtTQUN4QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFhO1FBQzdCLElBQUksUUFBUSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMvRCxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksUUFBUSxFQUFFO29CQUNsQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTt3QkFDbEMsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7d0JBQ3hCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDMUM7eUJBQU07d0JBQ0wsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7d0JBQ25ELElBQ0UsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixhQUFhLEVBQ2IsVUFBVSxDQUFDLFNBQVMsRUFDcEIsVUFBVSxDQUFDLFVBQVUsQ0FDdEIsRUFDRDs0QkFDQSxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzt5QkFDN0I7NkJBQU07NEJBQ0wsVUFBVSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7NEJBQzdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDMUM7cUJBQ0Y7aUJBQ0Y7cUJBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRTtvQkFDNUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7d0JBQ2xDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO3dCQUN4QixJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQzFDO3lCQUFNO3dCQUNMLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUMzQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDMUIsQ0FBQzt3QkFDRixJQUNFLElBQUksQ0FBQyx5QkFBeUIsQ0FDNUIsY0FBYyxFQUNkLFVBQVUsQ0FBQyxTQUFTLEVBQ3BCLFVBQVUsQ0FBQyxVQUFVLENBQ3RCLEVBQ0Q7NEJBQ0EsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7eUJBQzdCOzZCQUFNOzRCQUNMLFVBQVUsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDOzRCQUM3QixJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7eUJBQzFDO3FCQUNGO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxLQUFVO1FBQ2hDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUU3QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxJQUFJLE9BQU8sRUFBRTtvQkFDN0MsMEJBQTBCO29CQUMxQixJQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7d0JBQ3ZCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO3FCQUNyQjtvQkFFRCx1Q0FBdUM7b0JBQ3ZDLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ3pELE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBZSxFQUFFLEVBQUU7NEJBQzlDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQyxDQUFDLENBQUM7cUJBQ0o7aUJBQ0Y7Z0JBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksRUFBRTtvQkFDNUQsc0RBQXNEO29CQUN0RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ3REO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFXLEVBQUUsU0FBaUIsRUFBRSxVQUFlO1FBQy9ELE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDaEQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2RCxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUM1QixDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsUUFBUSxTQUFTLEVBQUU7WUFDakIsS0FBSyxJQUFJO2dCQUNQLE9BQU8sTUFBTSxJQUFJLFVBQVUsQ0FBQztZQUM5QixLQUFLLEdBQUc7Z0JBQ04sT0FBTyxNQUFNLElBQUksVUFBVSxDQUFDO1lBQzlCLEtBQUssSUFBSTtnQkFDUCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQyxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QztnQkFDRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCx5QkFBeUIsQ0FDdkIsT0FBWSxFQUNaLFNBQWlCLEVBQ2pCLFVBQWU7UUFFZixNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ2hELENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDOUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoRCxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFCLFFBQVEsU0FBUyxFQUFFO1lBQ2pCLEtBQUssSUFBSTtnQkFDUCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3BFLEtBQUssR0FBRztnQkFDTixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25FLEtBQUssSUFBSTtnQkFDUCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzFFLEtBQUssUUFBUTtnQkFDWCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQ2xCLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDcEQsQ0FBQztZQUNKO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUNkLE9BQWdCLEVBQ2hCLFVBQWtCLHdCQUF3QjtRQUUxQyxJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDNUQ7YUFBTTtZQUNMLGdFQUFnRTtTQUNqRTtJQUNILENBQUM7SUFFTyxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTTtZQUMvQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQy9DLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU8sYUFBYSxDQUFDLFNBQWM7UUFDbEMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3RDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxJQUFJLENBQ04sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLElBQUksRUFBRSxXQUFXLEtBQUssWUFBWTtnQkFDbEMsSUFBSSxFQUFFLFdBQVcsS0FBSyxXQUFXLENBQ3BDLENBQUM7UUFFSixPQUFPLENBQ0wsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUNuQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ2xDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FDMUMsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFVO1FBQzFCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNsRCxPQUFPLENBQUMsWUFBWTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxtQ0FBbUM7VUFDaEU7WUFDQSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7YUFJSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBQztZQUM5RSxJQUFJLENBQUMsV0FBVyxJQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDOUIsNERBQTREO1FBQzVELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFVLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTztZQUNoQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25CLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxZQUFZLEVBQUU7b0JBQ3JDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDaEQ7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTFDLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFrQjtRQUN2QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUksVUFBVSxFQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUUsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUMvQzthQUNJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDbEMsa0JBQWtCO1lBQ2xCLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQzFELE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUNsRCxDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsNENBQTRDO2dCQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDaEQ7U0FDRjthQUNJO1lBQ0gsZ0JBQWdCO1lBQ2hCLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLHlEQUF5RDtnQkFDekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQzVDO2lCQUFNO2dCQUNMLGlFQUFpRTtnQkFDakUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzdCO1lBRUQsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLHNCQUFzQjtZQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQWtCO1FBQ25DLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUV4RCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssZUFBZSxFQUFFO29CQUNyQyxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztpQkFDM0I7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRTtZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLGVBQWUsRUFBRTtvQkFDckMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7aUJBQzNCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUN6RTthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDakQ7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDOytHQWxxQlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsNk9DMUJwQyxxM0ZBNkVBOzs0RkRuRGEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHNCQUFzQjs2U0FLdkIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkE0QkUsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2ljIH0gZnJvbSAnLi8uLi8uLi9tb2RlbHMvbG9naWMubW9kZWwnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IEVsZW1lbnRUcmFja2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VsZW1lbnQtdHJhY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNjb3JlQ2FsY3VsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2NvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBXaGVuQ2xhdXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3doZW5DbGF1c2Uuc2VydmljZSc7XG5pbXBvcnQgeyBIaWRkZW5GaWVsZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oaWRkZW4tZmllbGQuc2VydmljZSc7XG5cbmludGVyZmFjZSBEcm9wRG93bkRhdGEge1xuICB2YWx1ZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpbWFnZTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZHJvcC1kb3duLWZpZWxkcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wLWRvd24tZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcC1kb3duLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wRG93bkZpZWxkc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgaW5MaW5lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGluQ2FyZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uSW5kZXghOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBhbnN3ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBhbnN3ZXI6IGFueTtcbiAgICBtYXhQb3NzaWJsZVNjb3JlPzogbnVtYmVyO1xuICB9PigpO1xuXG4gIGNvdW50OiBudW1iZXIgPSAwO1xuICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBoaW50OiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0aW9uVHlwZTogc3RyaW5nID0gJyc7XG4gIG1pbmltdW1TZWxlY3Rpb246IG51bWJlciA9IDA7XG4gIG1heGltdW1TZWxlY3Rpb246IG51bWJlciA9IDA7XG4gIG9wdGlvblR5cGU6IHN0cmluZyA9ICcnO1xuICBsb29rdXBUYWJsZTogc3RyaW5nID0gJyc7XG4gIGN1c3RvbU9wdGlvbnM6IERyb3BEb3duRGF0YVtdID0gW107XG4gIG9yaWdpbmFsT3B0aW9uczogRHJvcERvd25EYXRhW10gPSBbXTtcbiAgZGF0YWJhc2U6IGFueSA9IHt9O1xuICBhcGk6IGFueSA9IHt9O1xuICBvcmlnaW5hbEFwaTogYW55ID0ge307XG4gIHNlbGVjdGVkVmFsdWU6IGFueVtdID0gW107XG4gIHZhbGlkYXRpb25GYWlsZWQhOiBib29sZWFuO1xuICB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgZWxlbWVudElkOiBzdHJpbmcgPSAnJztcbiAgaGFzTW9yZURhdGE6IGJvb2xlYW4gPSB0cnVlO1xuICBtYXhQb3NzaWJsZVNjb3JlPzogbnVtYmVyO1xuICBzZWxlY3RlZFZhbHVlczogYW55W10gPSBbXTtcbiAgZGJQYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIGRiUGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBkYlRvdGFsUGFnZXM6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGRpc2FibGVFZGl0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhY2tlcjogRWxlbWVudFRyYWNrZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2NvcmVDYWxjU2VydmljZTogU2NvcmVDYWxjdWxhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aGVuQ2xhdXNlU2VydmljZTpXaGVuQ2xhdXNlU2VydmljZSxcbiAgICBwcml2YXRlIGhpZGRlbkZpZWxkU2VydmljZTpIaWRkZW5GaWVsZFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmFsdWVBc3NpZ25lZCgpO1xuICB9XG5cbiAgb25WYWx1ZUNoYW5nZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5zZWxlY3RJdGVtcygpO1xuICB9XG5cbiAgdmFsdWVBc3NpZ25lZCgpIHtcbiAgICB0aGlzLmNvdW50ID0gdGhpcy5xdWVzdGlvbi5jb3VudDtcbiAgICB0aGlzLnJlcXVpcmVkID0gdGhpcy5xdWVzdGlvbi5yZXF1aXJlZDtcbiAgICB0aGlzLmhpbnQgPSB0aGlzLnF1ZXN0aW9uLmhpbnQ7XG4gICAgdGhpcy5zZWxlY3Rpb25UeXBlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLnNlbGVjdGlvblR5cGU7XG4gICAgdGhpcy5taW5pbXVtU2VsZWN0aW9uID1cbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5taW5pbXVtU2VsZWN0aW9uO1xuICAgIHRoaXMubWF4aW11bVNlbGVjdGlvbiA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWF4aW11bVNlbGVjdGlvbjtcbiAgICB0aGlzLm9wdGlvblR5cGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5vcHRpb25UeXBlO1xuXG4gICAgLy8gLS0tIENoZWNrIGlmIGFuc3dlciBpcyBwcmVzZW50IC0tLVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFuc3dlciAmJiBBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24uYW5zd2VyKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9uVHlwZSA9PT0gJ0FQSScpIHtcbiAgICAgICAgdGhpcy5hcGkgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5hcGk7XG4gICAgICAgIHRoaXMub3JpZ2luYWxBcGkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYXBpKSk7XG4gICAgICAgIC8vIOKchSBDaGVjayBpZiBwYWdpbmF0aW9uIGlzIGVuYWJsZWQgKHBhZ2VJbmRleCArIHBhZ2VTaXplIGV4aXN0IGluIHBhcmFtcyB3aXRoIHZhbHVlU291cmNlKVxuICAgICAgICBjb25zdCBoYXNQYWdpbmF0aW9uID1cbiAgICAgICAgICB0aGlzLmFwaT8ucGFyYW1zPy5zb21lKChwOiBhbnkpID0+IHAudmFsdWVTb3VyY2UgPT09ICdQQUdFX0lOREVYJykgJiZcbiAgICAgICAgICB0aGlzLmFwaT8ucGFyYW1zPy5zb21lKChwOiBhbnkpID0+IHAudmFsdWVTb3VyY2UgPT09ICdQQUdFX1NJWkUnKTtcblxuICAgICAgICBpZiAoaGFzUGFnaW5hdGlvbikge1xuICAgICAgICAgIC8vIOKchSBQb3B1bGF0ZSBzZWxlY3RlZCB2YWx1ZXMgZnJvbSBhbnN3ZXJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdGhpcy5xdWVzdGlvbi5hbnN3ZXIubWFwKChhbnM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBhbnMuc3BsaXQoJ3wnKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0gOiBwYXJ0c1swXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25UeXBlID09PSAnREFUQUJBU0UnKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLnF1ZXN0aW9uLmFuc3dlci5tYXAoKGFuczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBhbnMuc3BsaXQoJ3wnKTtcbiAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSA/IHBhcnRzWzFdIDogcGFydHNbMF07XG4gICAgICAgIH0pfTtcbiAgICB9XG5cblxuICAgIC8vIC0tLSBIYW5kbGUgZGlmZmVyZW50IG9wdGlvbiB0eXBlcyAtLS1cbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9uVHlwZSkge1xuICAgICAgY2FzZSAnT1BUSU9OJzpcbiAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24uY3VzdG9tT3B0aW9ucy5tYXAoXG4gICAgICAgICAgKG9wdGlvbjogeyB2YWx1ZTogc3RyaW5nIH0pID0+ICh7XG4gICAgICAgICAgICBsYWJlbDogb3B0aW9uLnZhbHVlLFxuICAgICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIGltYWdlOiAnJyxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IFsuLi50aGlzLmN1c3RvbU9wdGlvbnNdO1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5hbnN3ZXIpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21PcHRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnTE9PS1VQJzpcbiAgICAgICAgdGhpcy5sb29rdXBUYWJsZSA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQub3B0aW9uLmxvb2t1cFRhYmxlO1xuICAgICAgICB0aGlzLmZldGNoRGF0YUZyb21Mb29rdXAoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0RBVEFCQVNFJzpcbiAgICAgICAgdGhpcy5kYXRhYmFzZSA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQub3B0aW9uLmRhdGFiYXNlO1xuICAgICAgICB0aGlzLmZldGNoRGF0YUZyb21EYXRhYmFzZSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQVBJJzpcbiAgICAgICAgaWYgKCF0aGlzLmFwaSB8fCBPYmplY3Qua2V5cyh0aGlzLmFwaSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5hcGkgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5hcGk7XG4gICAgICAgICAgdGhpcy5vcmlnaW5hbEFwaSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5hcGkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZldGNoRGF0YUZyb21BUEkoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBvcHRpb24gdHlwZTonLCB0aGlzLm9wdGlvblR5cGUpO1xuICAgIH1cblxuICAgIC8vIC0tLSBTY29yaW5nIC0tLVxuICAgIGlmIChcbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuc2NvcmluZyAmJlxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5zY29yaW5nLmVuYWJsZVNjb3JpbmdcbiAgICApIHtcbiAgICAgIHRoaXMubWF4UG9zc2libGVTY29yZSA9XG4gICAgICAgIHRoaXMuc2NvcmVDYWxjU2VydmljZS5nZXRNYXhQb3NzaWJsZVNjb3JlRm9yUXVlc3Rpb24odGhpcy5xdWVzdGlvbik7XG4gICAgICB0aGlzLnF1ZXN0aW9uLm1heFBvc3NpYmxlU2NvcmUgPSB0aGlzLm1heFBvc3NpYmxlU2NvcmU7XG4gICAgfVxuICB9XG5cbiAgaW5pdGlhbGl6ZUN1c3RvbU9wdGlvbigpIHtcblxuICAgIHRoaXMuY3VzdG9tT3B0aW9ucy5mb3JFYWNoKChvcHRpb246IGFueSkgPT4ge1xuICAgICAgY29uc3QgaXNNYXRjaCA9IHRoaXMucXVlc3Rpb24/LmFuc3dlcj8uc29tZSgoYTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gYS50cmltKCkuc3BsaXQoJ3wnKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gcGFydHNbMF07XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJ0c1sxXTtcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gb3B0aW9uLnZhbHVlICYmIGxhYmVsID09IG9wdGlvbi5sYWJlbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5zb21lKFxuICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbS52YWx1ZSA9PT0gb3B0aW9uLnZhbHVlXG4gICAgKTtcblxuICAgIGlmICghYWxyZWFkeUV4aXN0cykge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gWy4uLnRoaXMuc2VsZWN0ZWRWYWx1ZSwgb3B0aW9uXTtcbiAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYW5zd2VycyA9IEFycmF5LmlzQXJyYXkodGhpcy5xdWVzdGlvbi5hbnN3ZXIpID8gdGhpcy5xdWVzdGlvbi5hbnN3ZXIgOiBbXTtcbiAgICAgICAgICBjb25zdCBwYXJzZWRBbnN3ZXJzID0gYW5zd2Vycy5tYXAoKGFuczphbnkpID0+IGFucy5zcGxpdCgnfCcpWzFdKTtcbiAgICAgICAgICB0aGlzLndoZW5DbGF1c2VTZXJ2aWNlLnNldFF1ZXN0aW9uQW5zd2VyKHRoaXMucXVlc3Rpb24uaWQscGFyc2VkQW5zd2Vycyx0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5jaGlsZExvZ2ljcyAmJiB0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xuICAgICAgICB0aGlzLnVwZGF0ZUNoaWxkTG9naWNzKHRoaXMucXVlc3Rpb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdHJhbnNmb3JtRGF0YWJhc2VPYmplY3QoZGF0YWJhc2U6IGFueSxzZWxlY3RlZFZhbHVlczpzdHJpbmdbXT1bXSkge1xuICAgIHJldHVybiB7XG4gICAgICB0YWJsZU5hbWU6IGRhdGFiYXNlLnRhYmxlTmFtZSxcbiAgICAgIHZhbHVlRmllbGQ6IGRhdGFiYXNlLnZhbHVlRmllbGQsXG4gICAgICBsYWJlbEZpZWxkOiBkYXRhYmFzZS5sYWJlbEZpZWxkLFxuICAgICAgbGFiZWxQYXR0ZXJuOiBkYXRhYmFzZT8ubGFiZWxQYXR0ZXJuLFxuICAgICAgc2VsZWN0ZWRWYWx1ZXM6IHNlbGVjdGVkVmFsdWVzLFxuICAgICAgY3JpdGVyaWE6IGRhdGFiYXNlLmNyaXRlcmlhLm1hcCgoY3JpdGVyaWE6IGFueSkgPT4gKHtcbiAgICAgICAgZmllbGQ6IGNyaXRlcmlhLmZpZWxkLFxuICAgICAgICB2YWx1ZVNvdXJjZTogY3JpdGVyaWE/LnZhbHVlU291cmNlLFxuICAgICAgICBjb25kaXRpb246IGNyaXRlcmlhLmNvbmRpdGlvbixcbiAgICAgICAgdmFsdWU6IGNyaXRlcmlhLmlucHV0VmFsdWUsXG4gICAgICAgIGxvZ2ljYWxPcGVyYXRvcjogY3JpdGVyaWEubG9naWNhbE9wZXJhdG9yLFxuICAgICAgfSkpLFxuICAgIH07XG4gIH1cblxuICBmZXRjaERhdGFGcm9tRGF0YWJhc2Uoc2VhcmNoU3RyaW5nOnN0cmluZz0nJykge1xuICAgY29uc3QgdmFsdWU9IHRoaXMucXVlc3Rpb24/LmFuc3dlcj8ubWFwKChhOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBbbGFiZWwsIHZhbHVlXSA9IGEuc3BsaXQoJ3wnKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWwsXG4gICAgICB2YWx1ZVxuICAgIH07XG4gIH0pXG4gICAgY29uc3QgdHJhbnNmb3JtZWREYXRhYmFzZSA9IHRoaXMudHJhbnNmb3JtRGF0YWJhc2VPYmplY3QodGhpcy5kYXRhYmFzZSx2YWx1ZSk7XG4gICAgdGhpcy5mb3JtU2VydmljZS5mZXRjaERhdGFGcm9tRGF0YWJhc2UodHJhbnNmb3JtZWREYXRhYmFzZSx0aGlzLmRiUGFnZUluZGV4LHRoaXMuZGJQYWdlU2l6ZSxzZWFyY2hTdHJpbmcsdHJ1ZSkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5kYlRvdGFsUGFnZXMgPSByZXNwb25zZS5yZXN1bHQudG90YWxQYWdlcztcbiAgICAgICAgICBjb25zdCBuZXdPcHRpb25zID1cbiAgICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdD8uY29udGVudD8ubWFwKFxuICAgICAgICAgICAgICAoaXRlbTogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0pID0+ICh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIHx8IFtdO1xuICAgICAgICAgIGlmICh0aGlzLmRiUGFnZUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSBbLi4ubmV3T3B0aW9uc107XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gW1xuICAgICAgICAgICAgICAuLi50aGlzLmN1c3RvbU9wdGlvbnMsXG4gICAgICAgICAgICAgIC4uLm5ld09wdGlvbnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSBbLi4udGhpcy5jdXN0b21PcHRpb25zXTtcblxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ3VzdG9tT3B0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGRhdGEgZnJvbSBkYXRhYmFzZTonLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hUVFAgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGZldGNoRGF0YUZyb21Mb29rdXAoKSB7XG4gICAgdGhpcy5mb3JtU2VydmljZS5mZXRjaERhdGFGcm9tTG9va3VwKHRoaXMubG9va3VwVGFibGUpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSByZXNwb25zZS5yZXN1bHQudmFsdWVzLm1hcChcbiAgICAgICAgICAoaXRlbTogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0pID0+ICh7XG4gICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gWy4uLnRoaXMuY3VzdG9tT3B0aW9uc107XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFuc3dlcikge1xuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUN1c3RvbU9wdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hUVFAgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBmZXRjaERhdGFGcm9tQVBJKGFwcGVuZDogYm9vbGVhbiA9IGZhbHNlLCBzZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IGFwaUNvbmZpZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5hcGkpKTtcbiAgICBpZiAoIXRoaXMuaGFzTW9yZURhdGEgJiYgYXBwZW5kKSB7XG4gICAgICAvLyBJZiBubyBtb3JlIGRhdGEgZnJvbSBsYXN0IGNhbGwgYW5kIHRoaXMgaXMgYW4gYXBwZW5kIGNhbGwsIHNraXAgQVBJXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFsbG93ZWRDaGFycyA9IFsnLicsICcsJywgJy0nLCAnXycsICcoJywgJyknLCAnJ107XG5cbiAgICBpZiAoc2VhcmNoKSB7XG4gICAgICBpZiAoYXBpQ29uZmlnLnBhcmFtcykge1xuICAgICAgICBhcGlDb25maWcucGFyYW1zID0gYXBpQ29uZmlnLnBhcmFtcy5maWx0ZXIoXG4gICAgICAgICAgKHA6IGFueSkgPT4gcC52YWx1ZVNvdXJjZSAhPT0gJ1NFTEVDVEVEX1ZBTFVFUydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcGlDb25maWcuaGVhZGVycykge1xuICAgICAgICBhcGlDb25maWcuaGVhZGVycyA9IGFwaUNvbmZpZy5oZWFkZXJzLmZpbHRlcihcbiAgICAgICAgICAoaDogYW55KSA9PiBoLnZhbHVlU291cmNlICE9PSAnU0VMRUNURURfVkFMVUVTJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgIC5mZXRjaERhdGFGcm9tRXh0ZXJuYWxBUEkoYXBpQ29uZmlnLCB0aGlzLnNlbGVjdGVkVmFsdWVzKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgaWYgKGFwaUNvbmZpZy5wYXRoVG9WYWx1ZSkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZXh0cmFjdERhdGFCeVBhdGgocmVzcG9uc2UsIGFwaUNvbmZpZy5wYXRoVG9WYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXNwb25zZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBhcGlDb25maWcubGFiZWxQYXR0ZXJuICYmXG4gICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXBpQ29uZmlnLmxhYmVsUGF0dGVybikgJiZcbiAgICAgICAgICAgICAgYXBpQ29uZmlnLmxhYmVsUGF0dGVybi5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbGV0IGxhYmVsID0gJyc7XG4gICAgICAgICAgICAgIGFwaUNvbmZpZy5sYWJlbFBhdHRlcm4uZm9yRWFjaCgocGF0dGVybjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4udHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChhbGxvd2VkQ2hhcnMuaW5jbHVkZXMocGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsICs9IHBhdHRlcm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtW3BhdHRlcm5dICE9PSB1bmRlZmluZWQgJiYgaXRlbVtwYXR0ZXJuXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbCArPSBpdGVtW3BhdHRlcm5dKycgJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW2FwaUNvbmZpZy52YWx1ZUZpZWxkLnRyaW0oKV0sXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVthcGlDb25maWcudmFsdWVGaWVsZC50cmltKCldLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtW2FwaUNvbmZpZy5sYWJlbEZpZWxkLnRyaW0oKV0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoYXBwZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSBbLi4udGhpcy5jdXN0b21PcHRpb25zLCAuLi5uZXdPcHRpb25zXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gbmV3T3B0aW9ucztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSBbLi4udGhpcy5jdXN0b21PcHRpb25zXTtcblxuICAgICAgICAgIC8vIElmIG5vIG5ldyBkYXRhIHJldHVybmVkLCBtYXJrIGFzIGxhc3QgcGFnZVxuICAgICAgICAgIGlmICghbmV3T3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzTW9yZURhdGEgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5hbnN3ZXIgJiYgIWFwcGVuZCAmJiAhc2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21PcHRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hUVFAgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZXh0cmFjdERhdGFCeVBhdGgoZGF0YTogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBkYXRhKTtcbiAgfVxuXG4gIHNlbGVjdEl0ZW1zKGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQ7XG5cbiAgICBjb25zdCB2YWx1ZXNBcnJheSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5tYXAoXG4gICAgICAoaXRlbSkgPT4gYCR7aXRlbS5sYWJlbH18JHtpdGVtLnZhbHVlfWBcbiAgICApO1xuICAgIHRoaXMucXVlc3Rpb24uYW5zd2VyID0gdmFsdWVzQXJyYXk7XG4gICAgY29uc3Qgc2NvcmVSZXN1bHQgPSB0aGlzLnNjb3JlQ2FsY1NlcnZpY2UuY2FsY3VsYXRlU2NvcmVGcm9tQW5zd2VyKFxuICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIsXG4gICAgICB0aGlzLnF1ZXN0aW9uXG4gICAgKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnNjb3JlID0gc2NvcmVSZXN1bHQ/LnNjb3JlcztcblxuICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IGZhbHNlO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA9PSAwICYmIHRoaXMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XG4gICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBUaGlzIGlzIGEgcmVxdWlyZWQgcXVlc3Rpb25gO1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gYFRoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbmA7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPCB0aGlzLm1pbmltdW1TZWxlY3Rpb24gfHxcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiB0aGlzLm1heGltdW1TZWxlY3Rpb25cbiAgICApIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XG4gICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBzZWxlY3RlZCBvcHRpb25zIG11c3QgYmUgYmV0d2VlbiAke3RoaXMubWluaW11bVNlbGVjdGlvbn0gJiAke3RoaXMubWF4aW11bVNlbGVjdGlvbn1gO1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gYHNlbGVjdGVkIG9wdGlvbnMgbXVzdCBiZSBiZXR3ZWVuICR7dGhpcy5taW5pbXVtU2VsZWN0aW9ufSAmICR7dGhpcy5tYXhpbXVtU2VsZWN0aW9ufWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5jaGlsZExvZ2ljcykge1xuICAgICAgdGhpcy51cGRhdGVDaGlsZExvZ2ljcyh0aGlzLnF1ZXN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5hbnN3ZXJDaGFuZ2UuZW1pdCh7XG4gICAgICBhbnN3ZXI6IHRoaXMucXVlc3Rpb24uYW5zd2VyLFxuICAgICAgbWF4UG9zc2libGVTY29yZTogdGhpcy5tYXhQb3NzaWJsZVNjb3JlLFxuICAgIH0pO1xuICAgIHRoaXMuc2VhcmNoKCcnKTtcbiAgICBjb25zdCBhbnN3ZXJzID0gQXJyYXkuaXNBcnJheSh0aGlzLnF1ZXN0aW9uLmFuc3dlcikgPyB0aGlzLnF1ZXN0aW9uLmFuc3dlciA6IFtdO1xuICAgIGNvbnN0IHBhcnNlZEFuc3dlcnMgPSBhbnN3ZXJzLm1hcCgoYW5zOmFueSkgPT4gYW5zLnNwbGl0KCd8JylbMV0pO1xuICAgIHRoaXMud2hlbkNsYXVzZVNlcnZpY2Uuc2V0UXVlc3Rpb25BbnN3ZXIodGhpcy5xdWVzdGlvbi5pZCxwYXJzZWRBbnN3ZXJzKTtcbiAgICB0aGlzLmhpZGRlbkZpZWxkU2VydmljZS51cGRhdGVIaWRkZW5GaWVsZHNPbkNoYW5nZSgpO1xuICB9XG5cbiAgdXBkYXRlQ2hpbGRMb2dpY3MocXVlc3Rpb246IGFueSkge1xuICAgIGlmIChxdWVzdGlvbi5jaGlsZExvZ2ljcyAmJiBBcnJheS5pc0FycmF5KHF1ZXN0aW9uLmNoaWxkTG9naWNzKSkge1xuICAgICAgcXVlc3Rpb24uY2hpbGRMb2dpY3MuZm9yRWFjaCgoY2hpbGRMb2dpYzogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT0gJ1NJTkdMRScpIHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBjaGlsZExvZ2ljLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoY2hpbGRMb2dpYyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVbMF0/LmxhYmVsO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgY2hpbGRMb2dpYy5jb25kaXRpb24sXG4gICAgICAgICAgICAgICAgY2hpbGRMb2dpYy5pbnB1dFZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KGNoaWxkTG9naWMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdNVUxUSVBMRScpIHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBjaGlsZExvZ2ljLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoY2hpbGRMb2dpYyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcChcbiAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbS5sYWJlbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZU11bHRpcGxlQ29uZGl0aW9uKFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVzLFxuICAgICAgICAgICAgICAgIGNoaWxkTG9naWMuY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIGNoaWxkTG9naWMuaW5wdXRWYWx1ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhckFuc3dlcnNSZWN1cnNpdmVseShjaGlsZExvZ2ljKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KGxvZ2ljOiBhbnkpIHtcbiAgICBpZiAoIWxvZ2ljIHx8ICFsb2dpYy5yb3dzKSByZXR1cm47XG5cbiAgICBsb2dpYy5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICByb3cuZ3JpZC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGl0ZW0uZWxlbWVudDtcblxuICAgICAgICBpZiAoaXRlbS5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmIGVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBDbGVhciBhbnN3ZXIgaWYgcHJlc2VudFxuICAgICAgICAgIGlmICgnYW5zd2VyJyBpbiBlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LmFuc3dlciA9ICcnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNsZWFyIGNoaWxkTG9naWNzIGlmIGFueVxuICAgICAgICAgIGlmIChlbGVtZW50LmNoaWxkTG9naWNzICYmIGVsZW1lbnQuY2hpbGRMb2dpY3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudC5jaGlsZExvZ2ljcy5mb3JFYWNoKChjaGlsZExvZ2ljOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhckFuc3dlcnNSZWN1cnNpdmVseShjaGlsZExvZ2ljKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJiBlbGVtZW50ICYmIGVsZW1lbnQucm93cykge1xuICAgICAgICAgIC8vIFNVQkZPUk0gY29udGFpbnMgaXRzIG93biByb3dzIHN0cnVjdHVyZSBsaWtlIGEgZm9ybVxuICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoeyByb3dzOiBlbGVtZW50LnJvd3MgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZXZhbHVhdGVDb25kaXRpb24oYW5zd2VyOiBhbnksIGNvbmRpdGlvbjogc3RyaW5nLCBpbnB1dFZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdHJpbmdJbnB1dFZhbHVlID0gQXJyYXkuaXNBcnJheShpbnB1dFZhbHVlKVxuICAgICAgPyBpbnB1dFZhbHVlLm1hcCgodmFsKSA9PiB2YWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgOiBpbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgYW5zd2VyID0gQXJyYXkuaXNBcnJheShhbnN3ZXIpXG4gICAgICA/IGFuc3dlcj8ubWFwKChhbnMpID0+IGFucy50b0xvd2VyQ2FzZSgpKVxuICAgICAgOiBhbnN3ZXIudG9Mb3dlckNhc2UoKTtcbiAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuICAgICAgY2FzZSAnIT0nOlxuICAgICAgICByZXR1cm4gYW5zd2VyICE9IGlucHV0VmFsdWU7XG4gICAgICBjYXNlICc9JzpcbiAgICAgICAgcmV0dXJuIGFuc3dlciA9PSBpbnB1dFZhbHVlO1xuICAgICAgY2FzZSAnSU4nOlxuICAgICAgICByZXR1cm4gc3RyaW5nSW5wdXRWYWx1ZS5pbmNsdWRlcyhhbnN3ZXIpO1xuICAgICAgY2FzZSAnTk9UIElOJzpcbiAgICAgICAgcmV0dXJuICFzdHJpbmdJbnB1dFZhbHVlLmluY2x1ZGVzKGFuc3dlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZXZhbHVhdGVNdWx0aXBsZUNvbmRpdGlvbihcbiAgICBhbnN3ZXJzOiBhbnksXG4gICAgY29uZGl0aW9uOiBzdHJpbmcsXG4gICAgaW5wdXRWYWx1ZTogYW55XG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0cmluZ0lucHV0VmFsdWUgPSBBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpXG4gICAgICA/IGlucHV0VmFsdWUubWFwKCh2YWwpID0+IHZhbC50b1N0cmluZygpKVxuICAgICAgOiBpbnB1dFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgYW5zd2VycyA9IEFycmF5LmlzQXJyYXkoYW5zd2VycylcbiAgICAgID8gYW5zd2Vycz8ubWFwKChhbnN3ZXIpID0+IGFuc3dlci50b0xvd2VyQ2FzZSgpKVxuICAgICAgOiBhbnN3ZXJzLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoIChjb25kaXRpb24pIHtcbiAgICAgIGNhc2UgJyE9JzpcbiAgICAgICAgcmV0dXJuIGFuc3dlcnMuZXZlcnkoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIgIT0gc3RyaW5nSW5wdXRWYWx1ZSk7XG4gICAgICBjYXNlICc9JzpcbiAgICAgICAgcmV0dXJuIGFuc3dlcnMuc29tZSgoYW5zd2VyOiBhbnkpID0+IGFuc3dlciA9PSBzdHJpbmdJbnB1dFZhbHVlKTtcbiAgICAgIGNhc2UgJ0lOJzpcbiAgICAgICAgcmV0dXJuIGFuc3dlcnMuc29tZSgoYW5zd2VyOiBhbnkpID0+IHN0cmluZ0lucHV0VmFsdWUuaW5jbHVkZXMoYW5zd2VyKSk7XG4gICAgICBjYXNlICdOT1QgSU4nOlxuICAgICAgICByZXR1cm4gYW5zd2Vycy5ldmVyeShcbiAgICAgICAgICAoYW5zd2VyOiBhbnkpID0+ICFzdHJpbmdJbnB1dFZhbHVlLmluY2x1ZGVzKGFuc3dlcilcbiAgICAgICAgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVWYWxpZGF0aW9uKFxuICAgIGlzVmFsaWQ6IGJvb2xlYW4sXG4gICAgbWVzc2FnZTogc3RyaW5nID0gJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnXG4gICkge1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnNldEludmFsaWQodGhpcy5xdWVzdGlvbi5pZCwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluTGluZSB8fCB0aGlzLmluQ2FyZFxuICAgICAgPyBgJHt0aGlzLnN1Ym1pc3Npb25JbmRleH0tJHt0aGlzLnF1ZXN0aW9uLmlkfWBcbiAgICAgIDogYCR7dGhpcy5xdWVzdGlvbi5pZH1gO1xuICB9XG5cbiAgZ2V0IGlzSW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEVycm9yTWVzc2FnZSh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICB9XG5cbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUGFnaW5hdGlvbihhcGlDb25maWc6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoZWNrVmFsdWVTb3VyY2UgPSAoYXJyOiBhbnlbXSkgPT5cbiAgICAgIEFycmF5LmlzQXJyYXkoYXJyKSAmJlxuICAgICAgYXJyLnNvbWUoXG4gICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgIGl0ZW0/LnZhbHVlU291cmNlID09PSAnUEFHRV9JTkRFWCcgfHxcbiAgICAgICAgICBpdGVtPy52YWx1ZVNvdXJjZSA9PT0gJ1BBR0VfU0laRSdcbiAgICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgY2hlY2tWYWx1ZVNvdXJjZShhcGlDb25maWcuaGVhZGVycykgfHxcbiAgICAgIGNoZWNrVmFsdWVTb3VyY2UoYXBpQ29uZmlnLnBhcmFtcykgfHxcbiAgICAgIGNoZWNrVmFsdWVTb3VyY2UoYXBpQ29uZmlnLnBhdGhWYXJpYWJsZXMpXG4gICAgKTtcbiAgfVxuXG4gIGdldE5leHRTZXRPZkl0ZW1zKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChcbiAgICAgIE1hdGguZmxvb3IoZWxlbWVudC5zY3JvbGxIZWlnaHQgLSBlbGVtZW50LnNjcm9sbFRvcCkgPD1cbiAgICAgICAgZWxlbWVudC5jbGllbnRIZWlnaHQgJiZcbiAgICAgIHRoaXMuaGFzUGFnaW5hdGlvbih0aGlzLmFwaSkgLy8gT25seSBpZiBwYWdpbmF0aW9uIGlzIGNvbmZpZ3VyZWRcbiAgICApIHtcbiAgICAgIHRoaXMubG9hZE5leHRQYWdlKCk7XG4gICAgfVxuXG5cblxuICAgIGVsc2UgaWYoIHRoaXMub3B0aW9uVHlwZSA9PT0gJ0RBVEFCQVNFJyAmJiB0aGlzLmRiUGFnZUluZGV4IDwgdGhpcy5kYlRvdGFsUGFnZXMpe1xuICAgICAgdGhpcy5kYlBhZ2VJbmRleCArPTE7XG4gICAgICB0aGlzLmZldGNoRGF0YUZyb21EYXRhYmFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZE5leHRQYWdlKCkge1xuICAgIGlmICghdGhpcy5oYXNNb3JlRGF0YSkgcmV0dXJuO1xuICAgIC8vIEZpbmQgdGhlIFBBR0VfSU5ERVggcGFyYW0vaGVhZGVyL3BhdGhWYXIgYW5kIGluY3JlbWVudCBpdFxuICAgIGNvbnN0IHVwZGF0ZVZhbHVlU291cmNlID0gKGFycjogYW55W10pID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm47XG4gICAgICBhcnIuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS52YWx1ZVNvdXJjZSA9PT0gJ1BBR0VfSU5ERVgnKSB7XG4gICAgICAgICAgbGV0IGN1cnJlbnRQYWdlID0gcGFyc2VJbnQoaXRlbS5pbnB1dFZhbHVlIHx8ICcwJywgMTApO1xuICAgICAgICAgIGl0ZW0uaW5wdXRWYWx1ZSA9IChjdXJyZW50UGFnZSArIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB1cGRhdGVWYWx1ZVNvdXJjZSh0aGlzLmFwaS5oZWFkZXJzKTtcbiAgICB1cGRhdGVWYWx1ZVNvdXJjZSh0aGlzLmFwaS5wYXJhbXMpO1xuICAgIHVwZGF0ZVZhbHVlU291cmNlKHRoaXMuYXBpLnBhdGhWYXJpYWJsZXMpO1xuXG4gICAgLy8gQ2FsbCB5b3VyIGZldGNoIGZ1bmN0aW9uIGFnYWluXG4gICAgdGhpcy5mZXRjaERhdGFGcm9tQVBJKHRydWUpO1xuICB9XG5cbiAgc2VhcmNoKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIGlmKCB0aGlzLm9wdGlvblR5cGUgPT09J0RBVEFCQVNFJyl7XG4gICAgICB0aGlzLmRiUGFnZUluZGV4ID0wO1xuICAgICAgdGhpcy5mZXRjaERhdGFGcm9tRGF0YWJhc2Uoc2VhcmNoVGVybS50cmltKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLm9wdGlvblR5cGUgIT09ICdBUEknKSB7XG4gICAgICAvLyDwn5S5IExvY2FsIHNlYXJjaFxuICAgICAgaWYgKHNlYXJjaFRlcm0gJiYgc2VhcmNoVGVybS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyU2VhcmNoID0gc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBvcHRpb24ubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJTZWFyY2gpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXNldCB0byBmdWxsIGxpc3Qgd2hlbiBzZWFyY2ggaXMgY2xlYXJlZFxuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSBbLi4udGhpcy5vcmlnaW5hbE9wdGlvbnNdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIPCflLkgQVBJIHNlYXJjaFxuICAgICAgaWYgKHNlYXJjaFRlcm0gJiYgc2VhcmNoVGVybS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgIC8vIEluamVjdCBzZWFyY2ggdGVybSBpbnRvIEFQSSBjb25maWcgKGhlYWRlcnMgb3IgcGFyYW1zKVxuICAgICAgICB0aGlzLmluamVjdFNlYXJjaFN0cmluZyhzZWFyY2hUZXJtLnRyaW0oKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDwn5S5IENsZWFyIHRoZSBzZWFyY2ggc3RyaW5nIGZyb20gQVBJIGNvbmZpZyB3aGVuIGlucHV0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuaW5qZWN0U2VhcmNoU3RyaW5nKCcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXQgcGFnaW5hdGlvblxuICAgICAgdGhpcy5oYXNNb3JlRGF0YSA9IHRydWU7XG4gICAgICAvLyBGZXRjaCBmcmVzaCByZXN1bHRzXG4gICAgICB0aGlzLmZldGNoRGF0YUZyb21BUEkoZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGluamVjdFNlYXJjaFN0cmluZyhzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICAvLyBBbHdheXMgd29yayBvbiBhIGZyZXNoIGNvcHksIGRvbuKAmXQgbXV0YXRlIHRoaXMuYXBpIGRpcmVjdGx5XG4gICAgdGhpcy5hcGkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ2luYWxBcGkpKTtcblxuICAgIGlmICh0aGlzLmFwaT8ucGFyYW1zKSB7XG4gICAgICB0aGlzLmFwaS5wYXJhbXMuZm9yRWFjaCgocDogYW55KSA9PiB7XG4gICAgICAgIGlmIChwLnZhbHVlU291cmNlID09PSAnU0VBUkNIX1NUUklORycpIHtcbiAgICAgICAgICBwLmlucHV0VmFsdWUgPSBzZWFyY2hUZXJtO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcGk/LmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuYXBpLmhlYWRlcnMuZm9yRWFjaCgoaDogYW55KSA9PiB7XG4gICAgICAgIGlmIChoLnZhbHVlU291cmNlID09PSAnU0VBUkNIX1NUUklORycpIHtcbiAgICAgICAgICBoLmlucHV0VmFsdWUgPSBzZWFyY2hUZXJtO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaW5MaW5lIHx8IHRoaXMuaW5DYXJkKSB7XG4gICAgICB0aGlzLmVsZW1lbnRJZCA9IGBxdWVzdGlvbi0ke3RoaXMuc3VibWlzc2lvbkluZGV4fS0ke3RoaXMucXVlc3Rpb24uaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbGVtZW50SWQgPSBgcXVlc3Rpb24tJHt0aGlzLnF1ZXN0aW9uLmlkfWA7XG4gICAgfVxuXG4gICAgdGhpcy50cmFja2VyLnJlZ2lzdGVyRWxlbWVudCh0aGlzLmVsZW1lbnRJZCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLndoZW5DbGF1c2VTZXJ2aWNlLm1hcmtMb2FkQ29tcGxldGVkKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5lbGVtZW50SWQpIHtcbiAgICAgIHRoaXMudHJhY2tlci51bnJlZ2lzdGVyRWxlbWVudCh0aGlzLmVsZW1lbnRJZCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIFtuZ0NsYXNzXT1cInsgJ21iLTQnOiAhaW5MaW5lIH1cIlxuICBjbGFzcz1cInB4LTNcIlxuICBbaWRdPVwiKGluTGluZSB8fCBpbkNhcmQpID8gJ3F1ZXN0aW9uLScgKyBzdWJtaXNzaW9uSW5kZXggKyAnLScgKyBxdWVzdGlvbi5pZCA6ICdxdWVzdGlvbi0nICsgcXVlc3Rpb24uaWRcIlxuICBbYXR0ci5uYW1lXT1cInF1ZXN0aW9uLnRlc3RFbGVtZW50TmFtZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyIG1iLTJcIiAqbmdJZj1cIiFpbkxpbmVcIj5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25OdW1iZXJcIiBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCI+PC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvbk51bWJlclwiIGNsYXNzPVwic3BhY2VcIj48L3NwYW4+IDxsYWJlbD57eyBxdWVzdGlvbi5xdWVzdGlvbiB9fTwvbGFiZWxcbiAgICA+Jm5ic3A7XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwicXVlc3Rpb24/LnJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInN2Zy13cmFwcGVyIG1iLTIgaGludEljb25cIlxuICAgICAgW2F0dHIuZGF0YS10aXRsZV09XCJoaW50XCJcbiAgICAgICpuZ0lmPVwiaGludFwiXG4gICAgPlxuICAgICAgPHN2Z1xuICAgICAgICBjbGFzcz1cImhpbnRTdmdcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDMwIDMwXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICA+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZD1cIk0xNSAyNi4yNVYyNi4yNUM4Ljc4NjI1IDI2LjI1IDMuNzUgMjEuMjEzOCAzLjc1IDE1VjE1QzMuNzUgOC43ODYyNSA4Ljc4NjI1IDMuNzUgMTUgMy43NVYzLjc1QzIxLjIxMzggMy43NSAyNi4yNSA4Ljc4NjI1IDI2LjI1IDE1VjE1QzI2LjI1IDIxLjIxMzggMjEuMjEzOCAyNi4yNSAxNSAyNi4yNVpcIlxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTUgMTYuNTYyM1YxNi4yNDk4QzE1IDE1LjIyODUgMTUuNjMxMiAxNC42NzQ4IDE2LjI2MzcgMTQuMjQ5OEMxNi44ODEyIDEzLjgzMzUgMTcuNSAxMy4yOTEgMTcuNSAxMi4yOTFDMTcuNSAxMC45MDk4IDE2LjM4MTMgOS43OTEwMiAxNSA5Ljc5MTAyQzEzLjYxODcgOS43OTEwMiAxMi41IDEwLjkwOTggMTIuNSAxMi4yOTFcIlxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTQuOTk4OCAyMEMxNC44MjYzIDIwIDE0LjY4NjMgMjAuMTQgMTQuNjg3NSAyMC4zMTI1QzE0LjY4NzUgMjAuNDg1IDE0LjgyNzUgMjAuNjI1IDE1IDIwLjYyNUMxNS4xNzI1IDIwLjYyNSAxNS4zMTI1IDIwLjQ4NSAxNS4zMTI1IDIwLjMxMjVDMTUuMzEyNSAyMC4xNCAxNS4xNzI1IDIwIDE0Ljk5ODggMjBcIlxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIDxsaWItZHJvcGRvd25cbiAgICBbaXRlbXNdPVwiY3VzdG9tT3B0aW9uc1wiXG4gICAgW211bHRpcGxlXT1cInNlbGVjdGlvblR5cGUgPT09ICdTSU5HTEUnID8gZmFsc2UgOiB0cnVlXCJcbiAgICAoY2xpY2spPVwic2VsZWN0SXRlbXMoKVwiXG4gICAgWyhzZWxlY3RlZEl0ZW1zKV09XCJzZWxlY3RlZFZhbHVlXCJcbiAgPjwvbGliLWRyb3Bkb3duPiAtLT5cblxuICA8bGliLWRyb3Bkb3duXG4gICAgW3BsYWNlaG9sZGVyXT1cIidzZWxlY3QnXCJcbiAgICBbaXRlbXNdPVwiY3VzdG9tT3B0aW9uc1wiXG4gICAgW211bHRpcGxlXT1cInNlbGVjdGlvblR5cGUgPT09ICdTSU5HTEUnID8gZmFsc2UgOiB0cnVlXCJcbiAgICBbZGlzYWJsZV09XCJkaXNhYmxlRWRpdFwiXG4gICAgKHNlbGVjdGVkSXRlbXNDaGFuZ2UpPVwic2VsZWN0SXRlbXMoJGV2ZW50KVwiXG4gICAgWyhzZWxlY3RlZEl0ZW1zKV09XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAob25Ecm9wZG93blNjcm9sbCk9XCJnZXROZXh0U2V0T2ZJdGVtcygkZXZlbnQpXCJcbiAgICAob25TZWFyY2gpPVwic2VhcmNoKCRldmVudClcIlxuICA+PC9saWItZHJvcGRvd24+XG5cbiAgPCEtLSAob25Ecm9wZG93blNjcm9sbCk9XCJnZXROZXh0U2V0T2ZJdGVtcygkZXZlbnQpXCJcbiAgKG9uU2VhcmNoKT1cInNlYXJjaCgkZXZlbnQpXCIgLS0+XG4gIDxkaXZcbiAgICAqbmdJZj1cImlzSW52YWxpZCAmJiAoIWluTGluZSB8fCBzZWxlY3RlZFZhbHVlLmxlbmd0aCA9PT0gMClcIlxuICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gID5cbiAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkICYmICFpc0ludmFsaWRcIiBjbGFzcz1cInRleHQtZGFuZ2VyIGVycm9yLW1lc3NhZ2UgbWItMlwiPlxuICAgIHt7IHZhbGlkYXRpb25NZXNzYWdlIH19XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=