rapid-text-editor 1.0.18 → 1.0.20

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.
@@ -2,7 +2,7 @@ import { Component, Input, Output, ViewChild, forwardRef, EventEmitter } from '@
2
2
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/material/dialog";
5
- import * as i2 from "@angular/material/icon";
5
+ import * as i2 from "angular2-signaturepad";
6
6
  import * as i3 from "@angular/forms";
7
7
  import * as i4 from "@angular/common";
8
8
  export class RapidTextEditorComponent {
@@ -15,6 +15,7 @@ export class RapidTextEditorComponent {
15
15
  this.contentCapture = false;
16
16
  this.height = "auto";
17
17
  this.width = "auto";
18
+ this.iconColor = '#333333';
18
19
  this.contentChange = new EventEmitter();
19
20
  this.editorContent = '';
20
21
  this.rows = 1;
@@ -22,6 +23,11 @@ export class RapidTextEditorComponent {
22
23
  this.grid = Array(49).fill(0);
23
24
  this.Math = Math;
24
25
  this.uploadedImages = [];
26
+ this.signaturePadOptions = {
27
+ minWidth: 1,
28
+ canvasWidth: 400,
29
+ canvasHeight: 200
30
+ };
25
31
  this.selectedHead = 'P';
26
32
  this.selectedFont = '14';
27
33
  this.onChange = (content) => {
@@ -82,6 +88,7 @@ export class RapidTextEditorComponent {
82
88
  characterData: true,
83
89
  subtree: true
84
90
  });
91
+ this.editor.nativeElement.blur();
85
92
  // this.initializeEditorContent('');
86
93
  // this.ensureParagraphAndFocus();
87
94
  }
@@ -365,6 +372,63 @@ export class RapidTextEditorComponent {
365
372
  drop(event) {
366
373
  // event.preventDefault();
367
374
  }
375
+ // bindImageClickEvents() {
376
+ // const editorEl = this.editor.nativeElement;
377
+ // const images = editorEl.querySelectorAll('img');
378
+ // images.forEach(img => {
379
+ // // Avoid double-binding
380
+ // img.removeEventListener('click', this.onImageClick as any);
381
+ // img.addEventListener('click', this.onImageClick.bind(this));
382
+ // });
383
+ // }
384
+ // onImageClick(event: MouseEvent) {
385
+ // event.stopPropagation();
386
+ // const img = event.target as HTMLImageElement;
387
+ // this.enableImageResize(img);
388
+ // }
389
+ // enableImageResize(img: HTMLImageElement) {
390
+ // // Remove any existing resize handles first
391
+ // this.removeImageResizeHandles();
392
+ // const wrapper = document.createElement('div');
393
+ // wrapper.classList.add('image-resize-wrapper');
394
+ // img.parentNode?.insertBefore(wrapper, img);
395
+ // wrapper.appendChild(img);
396
+ // // Add resizable handles
397
+ // const resizer = document.createElement('div');
398
+ // resizer.classList.add('resizer');
399
+ // wrapper.appendChild(resizer);
400
+ // // Handle resizing logic
401
+ // let startX = 0, startY = 0, startWidth = 0, startHeight = 0;
402
+ // resizer.addEventListener('mousedown', (e: MouseEvent) => {
403
+ // e.preventDefault();
404
+ // startX = e.clientX;
405
+ // startY = e.clientY;
406
+ // startWidth = img.width;
407
+ // startHeight = img.height;
408
+ // const onMouseMove = (e: MouseEvent) => {
409
+ // const newWidth = startWidth + (e.clientX - startX);
410
+ // const newHeight = startHeight + (e.clientY - startY);
411
+ // img.style.width = `${newWidth}px`;
412
+ // img.style.height = `${newHeight}px`;
413
+ // };
414
+ // const onMouseUp = () => {
415
+ // document.removeEventListener('mousemove', onMouseMove);
416
+ // document.removeEventListener('mouseup', onMouseUp);
417
+ // };
418
+ // document.addEventListener('mousemove', onMouseMove);
419
+ // document.addEventListener('mouseup', onMouseUp);
420
+ // });
421
+ // }
422
+ // removeImageResizeHandles() {
423
+ // const existing = this.editor.nativeElement.querySelector('.image-resize-wrapper');
424
+ // if (existing) {
425
+ // const img = existing.querySelector('img');
426
+ // if (img) {
427
+ // existing.parentNode?.insertBefore(img, existing);
428
+ // }
429
+ // existing.remove();
430
+ // }
431
+ // }
368
432
  removeImage(index) {
369
433
  this.uploadedImages.splice(index, 1);
370
434
  }
@@ -605,6 +669,22 @@ export class RapidTextEditorComponent {
605
669
  }
606
670
  });
607
671
  }
672
+ openSignatureDialog(event) {
673
+ this.insertMarker();
674
+ const dialogRef = this.dialog.open(this.signatureDialog, {
675
+ position: {
676
+ top: `${event.clientY}px`,
677
+ left: `${event.clientX}px`,
678
+ },
679
+ disableClose: true,
680
+ panelClass: 'custom-dialog-container'
681
+ });
682
+ dialogRef.afterClosed().subscribe((result) => {
683
+ if (result)
684
+ // this.editor.nativeElement.innerHTML += `<img src=${result} alt='Signature' />`
685
+ this.insertImageInEditor(result);
686
+ });
687
+ }
608
688
  updatePreview(cols, rows) {
609
689
  this.cols = cols;
610
690
  this.rows = rows;
@@ -750,15 +830,23 @@ export class RapidTextEditorComponent {
750
830
  }
751
831
  this.onChange(content);
752
832
  }
833
+ //Signature
834
+ closeSignDialog(dialogRef) {
835
+ dialogRef.close();
836
+ }
837
+ submitSignDialog(dialogRef) {
838
+ const data = this.signaturePad.toDataURL('image/png');
839
+ dialogRef.close(data);
840
+ }
753
841
  }
754
842
  RapidTextEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorComponent, deps: [{ token: i1.MatDialog }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
755
- RapidTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: RapidTextEditorComponent, selector: "rapid-text-editor", inputs: { contentCapture: "contentCapture", height: "height", width: "width" }, outputs: { contentChange: "contentChange" }, providers: [
843
+ RapidTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: RapidTextEditorComponent, selector: "rapid-text-editor", inputs: { contentCapture: "contentCapture", height: "height", width: "width", iconColor: "iconColor" }, outputs: { contentChange: "contentChange" }, providers: [
756
844
  {
757
845
  provide: NG_VALUE_ACCESSOR,
758
846
  useExisting: forwardRef(() => RapidTextEditorComponent),
759
847
  multi: true
760
848
  }
761
- ], viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, static: true }, { propertyName: "tableDialog", first: true, predicate: ["tableDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dimension\">\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\">\r\n <mat-icon>format_bold</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\">\r\n <mat-icon>format_italic</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\">\r\n <mat-icon>format_underline</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\">\r\n <mat-icon>strikethrough_s</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\">\r\n <mat-icon>format_align_left</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\">\r\n <mat-icon>format_align_center</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\">\r\n <mat-icon>format_align_right</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\">\r\n <mat-icon>format_align_justify</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\">\r\n <mat-icon>format_list_bulleted</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\">\r\n <mat-icon>format_list_numbered</mat-icon>\r\n </button>\r\n <button color=\"secondary\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\">\r\n <input type=\"file\" (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" />\r\n <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon>\r\n </button>\r\n <button (click)=\"openTableDialog($event)\" type=\"button\" color=\"secondary\"\r\n aria-label=\"Choose table rows and columns\">\r\n <mat-icon>border_all</mat-icon>\r\n </button>\r\n\r\n <button class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" color=\"secondary\" aria-label=\"Make Header\">\r\n <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\" (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri}::ng-deep .editor{position:relative;min-height:300px;border:1px solid #ccc;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}button{width:20px;height:20px;background:none;border:none;margin-left:5px;cursor:pointer}button[mat-icon-button]{margin:0 4px;width:20px!important;height:20px;background:none;border:none}.small-icon-button{width:30px;height:30px;padding:4px}.small-icon-button mat-icon{font-size:16px}button[mat-icon-button]{position:relative;overflow:hidden}input[type=file]{padding:5px;cursor:pointer;margin-left:10px}.fileInput{display:flex;justify-content:center;align-items:center}.select-wrapper{display:inline-block;position:relative;width:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;cursor:pointer;outline:none}.select-wrapper:after{content:\"\\25bc\";position:absolute;top:50%;right:15px;transform:translateY(-50%);pointer-events:none;color:#777;font-size:12px}.select-wrapper select:hover{background-color:#e9e9e9;border-color:#bbb}.select-wrapper select:focus{border-color:#007bff;background-color:#fff}.select-wrapper option{padding:8px;font-size:16px;color:#333;background-color:#fff}.toolbar{display:flex;flex-wrap:wrap;align-items:center;background-color:#f4f4f4;padding:10px;border-radius:8px;box-shadow:0 2px 8px #0000001a;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none!important;border-radius:5px;padding:8px;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}mat-icon{font-size:20px!important;color:inherit!important}input[type=number]{width:60px;padding:5px;font-size:14px;border:1px solid #ddd;border-radius:5px;text-align:center}input[type=file]{border:1px solid #ddd;border-radius:5px;padding:5px;font-size:14px;background-color:#fff;cursor:pointer}input[type=file]:hover{border-color:#007bff}.table{width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.table:hover{background-color:#0056b3;color:#fff!important}.submit{margin-top:10px;width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.submit:hover{border:none;background-color:#0056b3;color:#fff!important}.custom-dialog-container{width:auto;max-width:200px}.grid-container{display:grid;grid-template-columns:repeat(7,20px);grid-gap:5px;gap:5px}.grid-item{width:20px;height:20px;border:1px solid #ddd}.highlighted{background-color:#2196f3}div[contenteditable=false]{display:inline-block;position:relative;resize:both;overflow:hidden;border:1px dashed #ccc;margin:5px}div[contenteditable=false]:hover{border-color:#007bff}div[contenteditable=false] img{display:block;width:100%;height:auto}.uploaded-images{display:flex;flex-wrap:wrap;margin-bottom:20px}.image-preview{margin:10px;padding:5px;border:1px dashed #ccc;cursor:pointer}.image-preview img{max-width:100px;max-height:100px;object-fit:cover}.editor{border:1px solid #ccc!important;min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}\n"], components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
849
+ ], viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, static: true }, { propertyName: "tableDialog", first: true, predicate: ["tableDialog"], descendants: true }, { propertyName: "signatureDialog", first: true, predicate: ["signatureDialog"], descendants: true }, { propertyName: "signaturePad", first: true, predicate: ["sigPad"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dimension\">\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <!-- <mat-icon>format_italic</mat-icon> -->\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <!-- <mat-icon>format_underline</mat-icon> -->\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <!-- <mat-icon>strikethrough_s</mat-icon> -->\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <!-- <mat-icon>format_align_left</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <!-- <mat-icon>format_align_center</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <!-- <mat-icon>format_align_right</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <!-- <mat-icon>format_align_justify</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <!-- <mat-icon>format_list_bulleted</mat-icon> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <!-- <mat-icon>format_list_numbered</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n <button aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" />\r\n <!-- <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon> -->\r\n <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n <button (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg width=\"256px\" height=\"256px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <!-- <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"openSignatureDialog($event)\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"\uD83D\uDD0D-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"\uD83C\uDFA8-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\" (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n\r\n <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <!-- <button type=\"button\" class=\"normal\" > Close </button> -->\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri}::ng-deep .editor{position:relative;min-height:300px;border:1px solid #ccc;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}button{width:20px;height:20px;background:none;border:none;margin-left:5px;cursor:pointer}button[mat-icon-button]{margin:0 4px;width:20px!important;height:20px;background:none;border:none}.small-icon-button{width:30px;height:30px;padding:4px}.small-icon-button mat-icon{font-size:16px}button[mat-icon-button]{position:relative;overflow:hidden}input[type=file]{padding:5px;cursor:pointer;margin-left:10px}.fileInput{display:flex;justify-content:center;align-items:center}.select-wrapper{display:inline-block;position:relative;width:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;cursor:pointer;outline:none}.select-wrapper:after{content:\"\\25bc\";position:absolute;top:50%;right:15px;transform:translateY(-50%);pointer-events:none;color:#777;font-size:12px}.select-wrapper select:hover{background-color:#e9e9e9;border-color:#bbb}.select-wrapper select:focus{border-color:#007bff;background-color:#fff}.select-wrapper option{padding:8px;font-size:16px;color:#333;background-color:#fff}.toolbar{display:flex;flex-wrap:wrap;align-items:center;background-color:#f4f4f4;padding:10px;border-radius:8px;box-shadow:0 2px 8px #0000001a;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black;cursor:pointer}.tooltiptext{visibility:hidden;width:130px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1}.tooltip:hover .tooltiptext{visibility:visible}mat-icon{font-size:20px!important;color:inherit!important}input[type=number]{width:60px;padding:5px;font-size:14px;border:1px solid #ddd;border-radius:5px;text-align:center}input[type=file]{border:1px solid #ddd;border-radius:5px;padding:5px;font-size:14px;background-color:#fff;cursor:pointer}input[type=file]:hover{border-color:#007bff}.table{width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.table:hover{background-color:#0056b3;color:#fff!important}.custom-dialog-container{width:auto;max-width:200px}.grid-container{display:grid;grid-template-columns:repeat(7,20px);grid-gap:5px;gap:5px}.grid-item{width:20px;height:20px;border:1px solid #ddd}.highlighted{background-color:#2196f3}div[contenteditable=false]{display:inline-block;position:relative;resize:both;overflow:hidden;border:1px dashed #ccc;margin:5px}div[contenteditable=false]:hover{border-color:#007bff}div[contenteditable=false] img{display:block;width:100%;height:auto}.uploaded-images{display:flex;flex-wrap:wrap;margin-bottom:20px}.image-preview{margin:10px;padding:5px;border:1px dashed #ccc;cursor:pointer}.image-preview img{max-width:100px;max-height:100px;object-fit:cover}.editor{border:1px solid #ccc;min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}.image-resize-wrapper{position:relative;display:inline-block}.image-resize-wrapper .resizer{width:10px;height:10px;background:#007bff;position:absolute;bottom:0;right:0;cursor:se-resize;border-radius:50%}.normal{width:50%;height:100%;border:1px solid red;border-radius:5px;color:red;padding:10px;font-size:16px}.normal:hover{color:red}.submit{width:50%;height:100%;border:none;border-radius:5px;color:#fff;padding:10px;background-color:#151544}.submit:hover{color:#fff}.action{margin-top:10px;padding:10px;display:flex;width:100%;justify-content:end;align-items:center;gap:5px}::ng-deep .sign canvas{border:1px dotted #ccc}\n"], components: [{ type: i2.SignaturePad, selector: "signature-pad", inputs: ["options"], outputs: ["onBeginEvent", "onEndEvent"] }], directives: [{ type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
762
850
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorComponent, decorators: [{
763
851
  type: Component,
764
852
  args: [{ selector: 'rapid-text-editor', providers: [
@@ -767,13 +855,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
767
855
  useExisting: forwardRef(() => RapidTextEditorComponent),
768
856
  multi: true
769
857
  }
770
- ], template: "<div class=\"dimension\">\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\">\r\n <mat-icon>format_bold</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\">\r\n <mat-icon>format_italic</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\">\r\n <mat-icon>format_underline</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\">\r\n <mat-icon>strikethrough_s</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\">\r\n <mat-icon>format_align_left</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\">\r\n <mat-icon>format_align_center</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\">\r\n <mat-icon>format_align_right</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\">\r\n <mat-icon>format_align_justify</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\">\r\n <mat-icon>format_list_bulleted</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\">\r\n <mat-icon>format_list_numbered</mat-icon>\r\n </button>\r\n <button color=\"secondary\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\">\r\n <input type=\"file\" (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" />\r\n <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon>\r\n </button>\r\n <button (click)=\"openTableDialog($event)\" type=\"button\" color=\"secondary\"\r\n aria-label=\"Choose table rows and columns\">\r\n <mat-icon>border_all</mat-icon>\r\n </button>\r\n\r\n <button class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" color=\"secondary\" aria-label=\"Make Header\">\r\n <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\" (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri}::ng-deep .editor{position:relative;min-height:300px;border:1px solid #ccc;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}button{width:20px;height:20px;background:none;border:none;margin-left:5px;cursor:pointer}button[mat-icon-button]{margin:0 4px;width:20px!important;height:20px;background:none;border:none}.small-icon-button{width:30px;height:30px;padding:4px}.small-icon-button mat-icon{font-size:16px}button[mat-icon-button]{position:relative;overflow:hidden}input[type=file]{padding:5px;cursor:pointer;margin-left:10px}.fileInput{display:flex;justify-content:center;align-items:center}.select-wrapper{display:inline-block;position:relative;width:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;cursor:pointer;outline:none}.select-wrapper:after{content:\"\\25bc\";position:absolute;top:50%;right:15px;transform:translateY(-50%);pointer-events:none;color:#777;font-size:12px}.select-wrapper select:hover{background-color:#e9e9e9;border-color:#bbb}.select-wrapper select:focus{border-color:#007bff;background-color:#fff}.select-wrapper option{padding:8px;font-size:16px;color:#333;background-color:#fff}.toolbar{display:flex;flex-wrap:wrap;align-items:center;background-color:#f4f4f4;padding:10px;border-radius:8px;box-shadow:0 2px 8px #0000001a;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none!important;border-radius:5px;padding:8px;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}mat-icon{font-size:20px!important;color:inherit!important}input[type=number]{width:60px;padding:5px;font-size:14px;border:1px solid #ddd;border-radius:5px;text-align:center}input[type=file]{border:1px solid #ddd;border-radius:5px;padding:5px;font-size:14px;background-color:#fff;cursor:pointer}input[type=file]:hover{border-color:#007bff}.table{width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.table:hover{background-color:#0056b3;color:#fff!important}.submit{margin-top:10px;width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.submit:hover{border:none;background-color:#0056b3;color:#fff!important}.custom-dialog-container{width:auto;max-width:200px}.grid-container{display:grid;grid-template-columns:repeat(7,20px);grid-gap:5px;gap:5px}.grid-item{width:20px;height:20px;border:1px solid #ddd}.highlighted{background-color:#2196f3}div[contenteditable=false]{display:inline-block;position:relative;resize:both;overflow:hidden;border:1px dashed #ccc;margin:5px}div[contenteditable=false]:hover{border-color:#007bff}div[contenteditable=false] img{display:block;width:100%;height:auto}.uploaded-images{display:flex;flex-wrap:wrap;margin-bottom:20px}.image-preview{margin:10px;padding:5px;border:1px dashed #ccc;cursor:pointer}.image-preview img{max-width:100px;max-height:100px;object-fit:cover}.editor{border:1px solid #ccc!important;min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}\n"] }]
858
+ ], template: "<div class=\"dimension\">\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <!-- <mat-icon>format_italic</mat-icon> -->\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <!-- <mat-icon>format_underline</mat-icon> -->\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <!-- <mat-icon>strikethrough_s</mat-icon> -->\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <!-- <mat-icon>format_align_left</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <!-- <mat-icon>format_align_center</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <!-- <mat-icon>format_align_right</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <!-- <mat-icon>format_align_justify</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <!-- <mat-icon>format_list_bulleted</mat-icon> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <!-- <mat-icon>format_list_numbered</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n <button aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" />\r\n <!-- <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon> -->\r\n <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n <button (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg width=\"256px\" height=\"256px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <!-- <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"openSignatureDialog($event)\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"\uD83D\uDD0D-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"\uD83C\uDFA8-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\" (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n\r\n <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <!-- <button type=\"button\" class=\"normal\" > Close </button> -->\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri}::ng-deep .editor{position:relative;min-height:300px;border:1px solid #ccc;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}button{width:20px;height:20px;background:none;border:none;margin-left:5px;cursor:pointer}button[mat-icon-button]{margin:0 4px;width:20px!important;height:20px;background:none;border:none}.small-icon-button{width:30px;height:30px;padding:4px}.small-icon-button mat-icon{font-size:16px}button[mat-icon-button]{position:relative;overflow:hidden}input[type=file]{padding:5px;cursor:pointer;margin-left:10px}.fileInput{display:flex;justify-content:center;align-items:center}.select-wrapper{display:inline-block;position:relative;width:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;cursor:pointer;outline:none}.select-wrapper:after{content:\"\\25bc\";position:absolute;top:50%;right:15px;transform:translateY(-50%);pointer-events:none;color:#777;font-size:12px}.select-wrapper select:hover{background-color:#e9e9e9;border-color:#bbb}.select-wrapper select:focus{border-color:#007bff;background-color:#fff}.select-wrapper option{padding:8px;font-size:16px;color:#333;background-color:#fff}.toolbar{display:flex;flex-wrap:wrap;align-items:center;background-color:#f4f4f4;padding:10px;border-radius:8px;box-shadow:0 2px 8px #0000001a;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black;cursor:pointer}.tooltiptext{visibility:hidden;width:130px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1}.tooltip:hover .tooltiptext{visibility:visible}mat-icon{font-size:20px!important;color:inherit!important}input[type=number]{width:60px;padding:5px;font-size:14px;border:1px solid #ddd;border-radius:5px;text-align:center}input[type=file]{border:1px solid #ddd;border-radius:5px;padding:5px;font-size:14px;background-color:#fff;cursor:pointer}input[type=file]:hover{border-color:#007bff}.table{width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.table:hover{background-color:#0056b3;color:#fff!important}.custom-dialog-container{width:auto;max-width:200px}.grid-container{display:grid;grid-template-columns:repeat(7,20px);grid-gap:5px;gap:5px}.grid-item{width:20px;height:20px;border:1px solid #ddd}.highlighted{background-color:#2196f3}div[contenteditable=false]{display:inline-block;position:relative;resize:both;overflow:hidden;border:1px dashed #ccc;margin:5px}div[contenteditable=false]:hover{border-color:#007bff}div[contenteditable=false] img{display:block;width:100%;height:auto}.uploaded-images{display:flex;flex-wrap:wrap;margin-bottom:20px}.image-preview{margin:10px;padding:5px;border:1px dashed #ccc;cursor:pointer}.image-preview img{max-width:100px;max-height:100px;object-fit:cover}.editor{border:1px solid #ccc;min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}.image-resize-wrapper{position:relative;display:inline-block}.image-resize-wrapper .resizer{width:10px;height:10px;background:#007bff;position:absolute;bottom:0;right:0;cursor:se-resize;border-radius:50%}.normal{width:50%;height:100%;border:1px solid red;border-radius:5px;color:red;padding:10px;font-size:16px}.normal:hover{color:red}.submit{width:50%;height:100%;border:none;border-radius:5px;color:#fff;padding:10px;background-color:#151544}.submit:hover{color:#fff}.action{margin-top:10px;padding:10px;display:flex;width:100%;justify-content:end;align-items:center;gap:5px}::ng-deep .sign canvas{border:1px dotted #ccc}\n"] }]
771
859
  }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { contentCapture: [{
772
860
  type: Input
773
861
  }], height: [{
774
862
  type: Input
775
863
  }], width: [{
776
864
  type: Input
865
+ }], iconColor: [{
866
+ type: Input
777
867
  }], contentChange: [{
778
868
  type: Output
779
869
  }], editor: [{
@@ -782,5 +872,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
782
872
  }], tableDialog: [{
783
873
  type: ViewChild,
784
874
  args: ['tableDialog']
875
+ }], signatureDialog: [{
876
+ type: ViewChild,
877
+ args: ['signatureDialog']
878
+ }], signaturePad: [{
879
+ type: ViewChild,
880
+ args: ['sigPad']
785
881
  }] } });
786
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yYXBpZC10ZXh0LWVkaXRvci9zcmMvbGliL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQTBCLFVBQVUsRUFBRSxZQUFZLEVBQXdELE1BQU0sZUFBZSxDQUFDO0FBRWhNLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBZ0J6RSxNQUFNLE9BQU8sd0JBQXdCO0lBZW5DLFlBQW9CLE1BQWlCLEVBQzNCLEVBQWMsRUFDZCxRQUFtQixFQUNuQixLQUFpQixFQUNqQixPQUEwQjtRQUpoQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQzNCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFqQjNCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLFdBQU0sR0FBVyxNQUFNLENBQUM7UUFDeEIsVUFBSyxHQUFXLE1BQU0sQ0FBQztRQUN0QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFHN0Msa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDbkMsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLFNBQUks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LEVBQUU7Z0JBQ1gsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgT25DaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgZm9yd2FyZFJlZiwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIFNpbXBsZUNoYW5nZXMsIFJlbmRlcmVyMn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmFwaWQtdGV4dC1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhcGlkVGV4dEVkaXRvckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG4gIFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmFwaWRUZXh0RWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgY29udGVudENhcHR1cmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9IFwiYXV0b1wiO1xyXG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSBcImF1dG9cIjtcclxuICBAT3V0cHV0KCkgY29udGVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRvciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgndGFibGVEaWFsb2cnKSB0YWJsZURpYWxvZyE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHJpdmF0ZSBlZGl0b3JDb250ZW50OiBzdHJpbmcgPSAnJztcclxuICByb3dzOiBudW1iZXIgPSAxO1xyXG4gIGNvbHM6IG51bWJlciA9IDE7XHJcbiAgZ3JpZCA9IEFycmF5KDQ5KS5maWxsKDApO1xyXG4gIE1hdGggPSBNYXRoO1xyXG4gIHVwbG9hZGVkSW1hZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBcclxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIF9jaGFuZ2U6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZygnQnVpbGQgLTEnKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50Q2FwdHVyZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGVuYWJsZWQuJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGRpc2FibGVkLicpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5pbml0aWFsaXplRWRpdG9yQ29udGVudCgnJyk7XHJcbiAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snaGVpZ2h0J10gfHwgY2hhbmdlc1snd2lkdGgnXSkge1xyXG4gICAgICB0aGlzLmFwcGx5RGltZW5zaW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseURpbWVuc2lvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkaW1lbnNpb25FbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaW1lbnNpb24nKTtcclxuICAgIGlmICh0aGlzLndpZHRoKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZGltZW5zaW9uRWxlbWVudCwgJ3dpZHRoJywgdGhpcy53aWR0aCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKTtcclxuICAgIGlmKHRoaXMuaGVpZ2h0KXtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlZGl0b3JFbGVtZW50LCAnaGVpZ2h0JywgdGhpcy5oZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKTtcclxuICAgIGlmIChlZGl0b3IgJiYgKGVkaXRvci5pbm5lckhUTUwudHJpbSgpID09PSBcIlwiIHx8IGVkaXRvci5pbm5lckhUTUwudHJpbSgpID09PSBcIjxicj5cIikpIHtcclxuICAgICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2V0U3RhcnQoZWRpdG9yLCAwKTtcclxuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPlxcdTIwMEI8L3A+J1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpKTtcclxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXHJcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gdGhpcy5pbml0aWFsaXplRWRpdG9yQ29udGVudCgnJyk7XHJcbiAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKSB7XHJcblxyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcclxuXHJcbiAgICAvLyBJZiBlZGl0b3IgaXMgZW1wdHkgb3IgZG9lc24ndCBoYXZlIGEgPHA+IGFzIHRoZSBsYXN0IGVsZW1lbnRcclxuICAgIGlmICghZWRpdG9yLmlubmVySFRNTC50cmltKCkpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGVkaXRvci5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgZmlyc3RDaGlsZC50YWdOYW1lICE9PSAnUCcpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gZWRpdG9yLmlubmVySFRNTDtcclxuICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj4ke2NvbnRlbnR9PC9wPmA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3AnKTtcclxuICAgIGlmIChwKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHApO1xyXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTsgXHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9jdXMgdGhlIGVkaXRvclxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRWRpdG9yQ29udGVudChkYXRhOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmICghZWRpdG9yKSByZXR1cm47XHJcblxyXG4gICAgLy8gSWYgY29udGVudCBoYXMgbm8gSFRNTCB0YWdzLCB3cmFwIHdpdGggPHA+XHJcbiAgICBjb25zdCBoYXNIdG1sVGFncyA9IC88W14+XSs+Ly50ZXN0KGRhdGEpO1xyXG4gICAgaWYgKCFoYXNIdG1sVGFncykge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+JHtkYXRhfTwvcD5gO1xyXG4gICAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gZGF0YTtcclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcblxyXG4gIG9uQ29udGVudENoYW5nZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbnRlbnRDYXB0dXJlKSB7XHJcbiAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XHJcbiAgICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgICB0aGlzLmVkaXRvckNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXB0dXJlZCBDb250ZW50IChDaGlsZCk6JywgdGhpcy5lZGl0b3JDb250ZW50KTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdCh0aGlzLmVkaXRvckNvbnRlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29udGVudDtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkSGVhZDogYW55ID0gJ1AnO1xyXG4gIHNlbGVjdGVkRm9udDogYW55ID0gJzE0JztcclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09ICc8YnI+JyB8fCB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PSAnJykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSGVhZCA9ICdQJztcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvbnQgPSAnMTQnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgd3JpdGVWYWx1ZShjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudCB8fCAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKCkge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIC8vIHNldEZvbnRTaXplKGV2ZW50OiBFdmVudCkge1xyXG4gIC8vICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xyXG4gIC8vICAgY29uc3Qgc2l6ZSA9IHNlbGVjdC52YWx1ZTtcclxuICAvLyAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAvLyAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcbiAgLy8gICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gIC8vICAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcclxuICAvLyAgICAgY29uc3QgcGFyZW50ID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ7XHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICBwYXJlbnQgJiZcclxuICAvLyAgICAgICBwYXJlbnQuY2xhc3NMaXN0ICYmXHJcbiAgLy8gICAgICAgQXJyYXkuZnJvbShwYXJlbnQuY2xhc3NMaXN0KS5zb21lKChjOiBzdHJpbmcpID0+IGMuc3RhcnRzV2l0aCgnZnMtJykpXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIHBhcmVudC5zdHlsZS5mb250U2l6ZSA9IGAke3NpemV9cHhgO1xyXG4gIC8vICAgICAgIHBhcmVudC5jbGFzc05hbWUgPSBgZnMtJHtzaXplfWA7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAvLyAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gYCR7c2l6ZX1weGA7XHJcbiAgLy8gICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgLy8gICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgZWxzZSB7XHJcbiAgLy8gICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgLy8gICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSBgJHtzaXplfXB4YDtcclxuICAvLyAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgLy8gICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKSk7IC8vIHplcm8td2lkdGggc3BhY2VcclxuICAvLyAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcclxuICAvLyAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gIC8vICAgICBuZXdSYW5nZS5zZXRTdGFydChzcGFuLmZpcnN0Q2hpbGQgYXMgTm9kZSwgMSk7XHJcbiAgLy8gICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gIC8vICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgLy8gICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBvbkVkaXRvcktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBoYW5kbGUgRW50ZXIgb3IgYXJyb3cga2V5c1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnQmFja1NwYWNlJyApIHtcclxuICAgICAgdGhpcy51cGRhdGVDdXJyZW50Rm9ybWF0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDdXJyZW50Rm9ybWF0KCkge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGU7XHJcbiAgICBpZiAoIWFuY2hvck5vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgcGFyZW50RWxlbSA9IGFuY2hvck5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXHJcbiAgICAgID8gKGFuY2hvck5vZGUgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgIDogKGFuY2hvck5vZGUucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XHJcblxyXG4gICAgaWYgKCFwYXJlbnRFbGVtKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRldGVjdGVkSGVhZCA9ICdQJztcclxuICAgIGxldCBkZXRlY3RlZEZvbnQgPSAnMTQnOyAvLyBkZWZhdWx0XHJcblxyXG4gICAgLy8gVHJhdmVyc2UgdXB3YXJkIHRvIGRldGVjdCBmb3JtYXR0aW5nXHJcbiAgICB3aGlsZSAocGFyZW50RWxlbSAmJiBwYXJlbnRFbGVtICE9PSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRhZyA9IHBhcmVudEVsZW0udGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgLy8gRGV0ZWN0IGhlYWRpbmdcclxuICAgICAgaWYgKFsnSDEnLCAnSDInLCAnSDMnLCAnSDQnLCAnSDUnLCAnSDYnLCAnUCddLmluY2x1ZGVzKHRhZykpIHtcclxuICAgICAgICBkZXRlY3RlZEhlYWQgPSB0YWc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERldGVjdCBpbmxpbmUgZm9udC1zaXplIGZyb20gc3R5bGUgb3IgY2xhc3NcclxuICAgICAgY29uc3QgZm9udFNpemUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtKS5mb250U2l6ZTtcclxuICAgICAgaWYgKGZvbnRTaXplKSB7XHJcbiAgICAgICAgY29uc3QgcHggPSBwYXJzZUludChmb250U2l6ZS5yZXBsYWNlKCdweCcsICcnKSwgMTApO1xyXG4gICAgICAgIGlmICghaXNOYU4ocHgpKSB7XHJcbiAgICAgICAgICBkZXRlY3RlZEZvbnQgPSBweC50b1N0cmluZygpO1xyXG4gICAgICAgICAgYnJlYWs7IC8vIGZvdW5kIHRoZSBjbG9zZXN0IHZhbGlkIGZvbnQgc2l6ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcGFyZW50RWxlbSA9IHBhcmVudEVsZW0ucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgYm91bmQgcHJvcGVydGllcyBpZiBjaGFuZ2VkXHJcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRIZWFkICE9PSBkZXRlY3RlZEhlYWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEhlYWQgPSBkZXRlY3RlZEhlYWQ7XHJcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb250ICE9PSBkZXRlY3RlZEZvbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvbnQgPSBkZXRlY3RlZEZvbnQ7XHJcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0Rm9udFNpemUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICBjb25zdCBzaXplID0gc2VsZWN0LnZhbHVlO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuXHJcbiAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAvLyBOb24tZW1wdHkgc2VsZWN0aW9uXHJcbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIHNwYW4uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsIGAke3NpemV9cHhgLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJhbmdlLnN1cnJvdW5kQ29udGVudHMoc3Bhbik7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIElmIHNlbGVjdGlvbiBzcGFucyBtdWx0aXBsZSBlbGVtZW50cywgdXNlIGV4ZWNDb21tYW5kIGZhbGxiYWNrXHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvbnRTaXplJywgZmFsc2UsICc3Jyk7IC8vIHRlbXBvcmFyeSBsYXJnZXN0IHNpemVcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdmb250W3NpemU9XCI3XCJdJykuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3NpemUnKTtcclxuICAgICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDb2xsYXBzZWQgc2VsZWN0aW9uIChubyB0ZXh0IHNlbGVjdGVkKVxyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBzcGFuLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpKTsgLy8gemVyby13aWR0aCBzcGFjZVxyXG4gICAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG5cclxuICAgICAgLy8gTW92ZSBjdXJzb3IgaW5zaWRlIHNwYW5cclxuICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICBuZXdSYW5nZS5zZXRTdGFydChzcGFuLmZpcnN0Q2hpbGQgYXMgTm9kZSwgMSk7XHJcbiAgICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcclxuICAgIHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpO1xyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldEhlYWRpbmcoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICBjb25zdCB0YWcgPSBzZWxlY3QudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG5ld0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XHJcblxyXG4gICAgc3dpdGNoICh0YWcpIHtcclxuICAgICAgY2FzZSAnSDEnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICczMnB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0gyJzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMjhweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICdib2xkJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdIMyc6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzI0cHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnYm9sZCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDQnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcyMHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g1JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMThweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICc2MDAnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g2JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMTZweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICc2MDAnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1AnOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcxNHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ25vcm1hbCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcclxuICAgIGlmIChzZWxlY3RlZFRleHQpIHtcclxuICAgICAgbmV3RWxlbS50ZXh0Q29udGVudCA9IHNlbGVjdGVkVGV4dDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0VsZW0uaW5uZXJIVE1MID0gJ1xcdTIwMEInOyAvLyBLZWVwcyBjdXJzb3IgdmlzaWJsZVxyXG4gICAgfVxyXG5cclxuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XHJcbiAgICByYW5nZS5pbnNlcnROb2RlKG5ld0VsZW0pO1xyXG5cclxuICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG5ld1JhbmdlLnNldFN0YXJ0KG5ld0VsZW0sIG5ld0VsZW0uY2hpbGROb2Rlcy5sZW5ndGgpO1xyXG4gICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG5cclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG5cclxuICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KTtcclxuICAgIGVkaXRvci5kaXNwYXRjaEV2ZW50KGlucHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvcm1hdChjb21tYW5kOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCAnJyk7XHJcbiAgfVxyXG5cclxuICAvL0ltYWdlIFNlY3Rpb25cclxuXHJcbiAgYWxsb3dEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBpbWFnZSBkcmFnIHN0YXJ0XHJcbiAgZHJhZyhldmVudDogRHJhZ0V2ZW50LCBpbWFnZVVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBldmVudC5kYXRhVHJhbnNmZXI/LnNldERhdGEoXCJ0ZXh0XCIsIGltYWdlVXJsKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBkcm9wIGV2ZW50IGluIHRoZSBlZGl0b3JcclxuICBkcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVJbWFnZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRJbWFnZUluRWRpdG9yKGltYWdlVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghZWRpdG9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBpbWFnZSBlbGVtZW50XHJcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgIGltZy5zcmMgPSBpbWFnZVVybDtcclxuICAgIGltZy5zdHlsZS5tYXhXaWR0aCA9ICcxMDAlJztcclxuICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgIGltZy5zdHlsZS53aWR0aCA9ICczMDBweCc7XHJcbiAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBpbWFnZSB0byBhbGxvdyByZXNpemluZ1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgd3JhcHBlci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XHJcbiAgICB3cmFwcGVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsgIC8vIEVuc3VyZXMgdGhlIHdyYXBwZXIgb25seSB0YWtlcyB1cCBzcGFjZSBmb3IgdGhlIGltYWdlXHJcbiAgICB3cmFwcGVyLnN0eWxlLm1hcmdpbiA9ICcxMHB4JztcclxuICAgIHdyYXBwZXIuc3R5bGUucGFkZGluZyA9ICc1cHgnO1xyXG4gICAgd3JhcHBlci5zdHlsZS5ib3JkZXIgPSAnMXB4IGRhc2hlZCAjY2NjJzsgLy8gT3B0aW9uYWwgYm9yZGVyIHRvIGluZGljYXRlIHRoZSBpbWFnZSBhcmVhXHJcblxyXG4gICAgLy8gQXBwZW5kIHRoZSBpbWFnZSB0byB0aGUgd3JhcHBlclxyXG4gICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xyXG5cclxuICAgIC8vIEFwcGVuZCB0aGUgd3JhcHBlciB0byB0aGUgZWRpdG9yXHJcbiAgICBlZGl0b3IuYXBwZW5kQ2hpbGQod3JhcHBlcik7XHJcblxyXG4gICAgLy8gTWFrZSB0aGUgaW1hZ2UgcmVzaXphYmxlXHJcbiAgICB0aGlzLm1ha2VJbWFnZVJlc2l6YWJsZSh3cmFwcGVyLCBpbWcpO1xyXG5cclxuICAgIC8vIE9wdGlvbmFsbHksIGFkZCBhIHRleHQgbm9kZSB0byBtYWludGFpbiBjdXJzb3IgcG9zaXRpb24gYWZ0ZXIgYXBwZW5kaW5nIHRoZSBpbWFnZVxyXG4gICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpOyAgLy8gSW52aXNpYmxlIGNoYXJhY3RlciB0byBtYWludGFpbiBwb3NpdGlvblxyXG4gICAgZWRpdG9yLmFwcGVuZENoaWxkKHRleHROb2RlKTtcclxuXHJcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICByYW5nZS5zZXRTdGFydEFmdGVyKHdyYXBwZXIpO1xyXG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYWtlSW1hZ2VSZXNpemFibGUod3JhcHBlcjogSFRNTEVsZW1lbnQsIGltZzogSFRNTEltYWdlRWxlbWVudCk6IHZvaWQge1xyXG4gICAgbGV0IGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgIGxldCBzdGFydFggPSAwO1xyXG4gICAgbGV0IHN0YXJ0WSA9IDA7XHJcbiAgICBsZXQgc3RhcnRXaWR0aCA9IDA7XHJcbiAgICBsZXQgc3RhcnRIZWlnaHQgPSAwO1xyXG5cclxuICAgIC8vIENyZWF0ZSByZXNpemUgaGFuZGxlcyBmb3IgdGhlIGltYWdlXHJcbiAgICBjb25zdCBjcmVhdGVSZXNpemVIYW5kbGUgPSAoXHJcbiAgICAgIGN1cnNvcjogc3RyaW5nLFxyXG4gICAgICBwb3NpdGlvblN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcclxuICAgICAgcmVzaXplQ2FsbGJhY2s6IChkZWx0YVg6IG51bWJlciwgZGVsdGFZOiBudW1iZXIpID0+IHZvaWRcclxuICAgICkgPT4ge1xyXG4gICAgICBjb25zdCBoYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgaGFuZGxlLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgaGFuZGxlLnN0eWxlLndpZHRoID0gJzEwcHgnO1xyXG4gICAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzEwcHgnO1xyXG4gICAgICBoYW5kbGUuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDAsIDAsIDAsIDAuNSknO1xyXG4gICAgICBoYW5kbGUuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xyXG4gICAgICBPYmplY3QuYXNzaWduKGhhbmRsZS5zdHlsZSwgcG9zaXRpb25TdHlsZXMpO1xyXG5cclxuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChyZXNpemVFdmVudCkgPT4ge1xyXG4gICAgICAgIGlzUmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICAgIHN0YXJ0WCA9IHJlc2l6ZUV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgc3RhcnRZID0gcmVzaXplRXZlbnQuY2xpZW50WTtcclxuICAgICAgICBzdGFydFdpZHRoID0gaW1nLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIHN0YXJ0SGVpZ2h0ID0gaW1nLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNSZXNpemluZykge1xyXG4gICAgICAgICAgICBjb25zdCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcclxuICAgICAgICAgICAgY29uc3QgZGVsdGFZID0gbW92ZUV2ZW50LmNsaWVudFkgLSBzdGFydFk7XHJcbiAgICAgICAgICAgIHJlc2l6ZUNhbGxiYWNrKGRlbHRhWCwgZGVsdGFZKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoYW5kbGUpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGQgcmVzaXppbmcgaGFuZGxlcyB0byB0aGUgd3JhcHBlciBmb3IgdGhlIGltYWdlXHJcbiAgICBjcmVhdGVSZXNpemVIYW5kbGUoXHJcbiAgICAgICdudy1yZXNpemUnLFxyXG4gICAgICB7IHRvcDogJy01cHgnLCBsZWZ0OiAnLTVweCcgfSxcclxuICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XHJcbiAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7c3RhcnRXaWR0aCAtIGRlbHRhWH1weGA7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0IC0gZGVsdGFZfXB4YDtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgJ3NlLXJlc2l6ZScsXHJcbiAgICAgIHsgYm90dG9tOiAnLTVweCcsIHJpZ2h0OiAnLTVweCcgfSxcclxuICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XHJcbiAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7c3RhcnRXaWR0aCArIGRlbHRhWH1weGA7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0ICsgZGVsdGFZfXB4YDtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGluc2VydEltYWdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmIChpbnB1dD8uZmlsZXMpIHtcclxuICAgICAgQXJyYXkuZnJvbShpbnB1dC5maWxlcykuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbWFnZVVybCA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXMucHVzaChpbWFnZVVybCk7IC8vIFN0b3JlIGltYWdlIFVSTCBpbiB0aGUgYXJyYXlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnZlcnRJbWFnZShmaWxlOiBGaWxlKTogUHJvbWlzZTxGaWxlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoZmlsZS50eXBlICE9PSAnaW1hZ2UvcG5nJykge1xyXG4gICAgICAgIHJlc29sdmUoZmlsZSk7IC8vIFJldHVybiB0aGUgb3JpZ2luYWwgZmlsZSBpZiBpdCdzIG5vdCBhIFBOR1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGltZy5zcmMgPSBlLnRhcmdldC5yZXN1bHQ7XHJcblxyXG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICAgIGlmICghY3R4KSB7XHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgY2FudmFzIGNvbnRleHQnKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodDtcclxuXHJcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgICBjYW52YXMudG9CbG9iKFxyXG4gICAgICAgICAgICBibG9iID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYmxvYikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QganBnRmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgZmlsZS5uYW1lLnJlcGxhY2UoL1xcLnBuZyQvLCAnLmpwZycpLCB7IHR5cGU6ICdpbWFnZS9qcGVnJyB9KTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoanBnRmlsZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjb252ZXJ0IFBORyB0byBKUEcnKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnaW1hZ2UvanBlZycsXHJcbiAgICAgICAgICAgIDAuOTUgLy8gUXVhbGl0eSBmYWN0b3IgZm9yIEpQRUdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUnKSk7XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGluc2VydEltYWdlVG9FZGl0b3IoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoIWVkaXRvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgd3JhcHBlci5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyID0gJzFweCBkYXNoZWQgI2NjYyc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5tYXJnaW4gPSAnMTBweCc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5wYWRkaW5nID0gJzVweCc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5ib3JkZXJCbG9ja0NvbG9yID0gJyMwMDdCRkYnO1xyXG4gICAgICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zcmMgPSBpbWFnZVVybDtcclxuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9ICczMDBweCc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcbiAgICAgICAgbGV0IGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc3RhcnRYID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRZID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRXaWR0aCA9IDA7XHJcbiAgICAgICAgbGV0IHN0YXJ0SGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlUmVzaXplSGFuZGxlID0gKFxyXG4gICAgICAgICAgY3Vyc29yOiBzdHJpbmcsXHJcbiAgICAgICAgICBwb3NpdGlvblN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcclxuICAgICAgICAgIHJlc2l6ZUNhbGxiYWNrOiAoZGVsdGFYOiBudW1iZXIsIGRlbHRhWTogbnVtYmVyKSA9PiB2b2lkXHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzEwcHgnO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLmJhY2tncm91bmQgPSAncmdiYSgwLCAwLCAwLCAwLjUpJztcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGhhbmRsZS5zdHlsZSwgcG9zaXRpb25TdHlsZXMpO1xyXG5cclxuICAgICAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAocmVzaXplRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHN0YXJ0WCA9IHJlc2l6ZUV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgICAgIHN0YXJ0WSA9IHJlc2l6ZUV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIHN0YXJ0SGVpZ2h0ID0gaW1nLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpc1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhWSA9IG1vdmVFdmVudC5jbGllbnRZIC0gc3RhcnRZO1xyXG4gICAgICAgICAgICAgICAgcmVzaXplQ2FsbGJhY2soZGVsdGFYLCBkZWx0YVkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoYW5kbGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAgICAgJ253LXJlc2l6ZScsXHJcbiAgICAgICAgICB7IHRvcDogJy01cHgnLCBsZWZ0OiAnLTVweCcgfSxcclxuICAgICAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoIC0gZGVsdGFYfXB4YDtcclxuICAgICAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0IC0gZGVsdGFZfXB4YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgICAgICdzZS1yZXNpemUnLFxyXG4gICAgICAgICAgeyBib3R0b206ICctNXB4JywgcmlnaHQ6ICctNXB4JyB9LFxyXG4gICAgICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XHJcbiAgICAgICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggKyBkZWx0YVh9cHhgO1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgKyBkZWx0YVl9cHhgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xyXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKTtcclxuICAgICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKHdyYXBwZXIpO1xyXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuVGFibGVEaWFsb2coZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5zZXJ0TWFya2VyKCk7XHJcbiAgICB0aGlzLnJvd3MgPSAxO1xyXG4gICAgdGhpcy5jb2xzID0gMTtcclxuXHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMudGFibGVEaWFsb2csIHtcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICB0b3A6IGAke2V2ZW50LmNsaWVudFl9cHhgLFxyXG4gICAgICAgIGxlZnQ6IGAke2V2ZW50LmNsaWVudFh9cHhgLFxyXG4gICAgICB9LFxyXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5pbnNlcnRUYWJsZShyZXN1bHQucm93cywgcmVzdWx0LmNvbHMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVByZXZpZXcoY29sczogbnVtYmVyLCByb3dzOiBudW1iZXIpIHtcclxuICAgIHRoaXMuY29scyA9IGNvbHM7XHJcbiAgICB0aGlzLnJvd3MgPSByb3dzO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0aW9uKGNvbEluZGV4OiBudW1iZXIsIHJvd0luZGV4OiBudW1iZXIsIGRpYWxvZ1JlZjogYW55KSB7XHJcbiAgICB0aGlzLmNvbHMgPSBjb2xJbmRleDtcclxuICAgIHRoaXMucm93cyA9IHJvd0luZGV4O1xyXG4gICAgZGlhbG9nUmVmLmNsb3NlKHsgcm93czogdGhpcy5yb3dzLCBjb2xzOiB0aGlzLmNvbHMgfSk7IC8vIENsb3NlIGRpYWxvZyB3aXRoIHNlbGVjdGlvblxyXG4gIH1cclxuXHJcbiAgbWFrZUZpcnN0Um93SGVhZGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIC8vIENoZWNrIGlmIHNlbGVjdGlvbiBpcyBpbnNpZGUgdGhlIGVkaXRvclxyXG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0aW9uSW5zaWRlRWRpdG9yKGVkaXRvciwgc2VsZWN0aW9uKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IHRhYmxlIHRvIHRoZSBzZWxlY3Rpb25cclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5maW5kQ2xvc2VzdFRhYmxlKHNlbGVjdGVkTm9kZSk7XHJcbiAgICBpZiAoIXRhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IHJvdyBjZWxscyB0byBoZWFkZXIgY2VsbHNcclxuICAgIGNvbnN0IGZpcnN0Um93ID0gdGFibGUucm93c1swXTtcclxuICAgIGlmIChmaXJzdFJvdykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0Um93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2VsbCA9IGZpcnN0Um93LmNlbGxzW2ldO1xyXG4gICAgICAgIGNvbnN0IHRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTtcclxuICAgICAgICB0aC5pbm5lckhUTUwgPSBjZWxsLmlubmVySFRNTDtcclxuICAgICAgICB0aC5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICB0aC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0YxRjFGMCc7XHJcbiAgICAgICAgdGguc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XHJcbiAgICAgICAgdGguc3R5bGUuYm9yZGVyQ29sbGFwc2UgPSAnY29sbGFwc2UnO1xyXG4gICAgICAgIHRoLnN0eWxlLnBhZGRpbmcgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS5wYWRkaW5nOyAvLyBSZXRhaW4gcGFkZGluZ1xyXG4gICAgICAgIHRoLnN0eWxlLndpZHRoID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2VsbCkud2lkdGg7IC8vIFJldGFpbiB3aWR0aFxyXG4gICAgICAgIHRoLnN0eWxlLmhlaWdodCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLmhlaWdodDtcclxuICAgICAgICBmaXJzdFJvdy5yZXBsYWNlQ2hpbGQodGgsIGNlbGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlZGl0b3IuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZENsb3Nlc3RUYWJsZShub2RlOiBOb2RlKTogSFRNTFRhYmxlRWxlbWVudCB8IG51bGwge1xyXG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gZG9jdW1lbnQpIHtcclxuICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09ICdUQUJMRScpIHtcclxuICAgICAgICByZXR1cm4gbm9kZSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgICB9XHJcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydE1hcmtlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpO1xyXG4gICAgICBjb25zdCBtYXJrZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIG1hcmtlci5pZCA9ICd0YWJsZS1tYXJrZXInO1xyXG4gICAgICBtYXJrZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShtYXJrZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5zZXJ0VGFibGUocm93czogc3RyaW5nLCBjb2xzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvd0NvdW50ID0gcGFyc2VJbnQocm93cywgMTApO1xyXG4gICAgY29uc3QgY29sQ291bnQgPSBwYXJzZUludChjb2xzLCAxMCk7XHJcblxyXG4gICAgaWYgKGlzTmFOKHJvd0NvdW50KSB8fCBpc05hTihjb2xDb3VudCkgfHwgcm93Q291bnQgPCAxIHx8IGNvbENvdW50IDwgMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IG1hcmtlciA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCcjdGFibGUtbWFya2VyJyk7XHJcblxyXG4gICAgY29uc3QgdGFibGVIVE1MID0gdGhpcy5jcmVhdGVUYWJsZUhUTUwocm93Q291bnQsIGNvbENvdW50KTtcclxuICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gdGFibGVIVE1MO1xyXG4gICAgY29uc3QgdGFibGUgPSB0ZW1wRGl2LmZpcnN0RWxlbWVudENoaWxkO1xyXG5cclxuICAgIGlmIChtYXJrZXIgJiYgdGFibGUpIHtcclxuICAgICAgbWFya2VyLnBhcmVudE5vZGUhLnJlcGxhY2VDaGlsZCh0YWJsZSwgbWFya2VyKTtcclxuICAgICAgdGhpcy5zZXRDdXJzb3JUb0ZpcnN0Q2VsbCh0YWJsZSBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICAgIGVkaXRvci5mb2N1cygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZmFsbGJhY2sgaWYgbm8gbWFya2VyLCBqdXN0IGFwcGVuZFxyXG4gICAgICB0aGlzLmFwcGVuZFRhYmxlKGVkaXRvciwgcm93Q291bnQsIGNvbENvdW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50OiBudW1iZXIsIGNvbENvdW50OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRhYmxlSFRNTCA9ICc8dGFibGUgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IHdpZHRoOiAxMDAlOyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcIj4nO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XHJcbiAgICAgIHRhYmxlSFRNTCArPSAnPHRyPic7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sQ291bnQ7IGorKykge1xyXG4gICAgICAgIHRhYmxlSFRNTCArPSBgPHRkIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGhlaWdodDogMmVtOyBwYWRkaW5nOiAuNGVtOyBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwidGV4dGJveFwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIj48L3RkPmA7XHJcbiAgICAgIH1cclxuICAgICAgdGFibGVIVE1MICs9ICc8L3RyPic7XHJcbiAgICB9XHJcbiAgICB0YWJsZUhUTUwgKz0gJzwvdGFibGU+JztcclxuICAgIHJldHVybiB0YWJsZUhUTUw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGVuZFRhYmxlKGVkaXRvcjogSFRNTEVsZW1lbnQsIHJvd0NvdW50OiBudW1iZXIsIGNvbENvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRoaXMuY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICBlZGl0b3IuaW5uZXJIVE1MICs9IHRhYmxlSFRNTDtcclxuICAgIGNvbnN0IGxhc3RJbnNlcnRlZFRhYmxlID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlOmxhc3QtY2hpbGQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIHRoaXMuc2V0Q3Vyc29yVG9GaXJzdENlbGwobGFzdEluc2VydGVkVGFibGUpO1xyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzU2VsZWN0aW9uSW5zaWRlRWRpdG9yKGVkaXRvcjogSFRNTEVsZW1lbnQsIHNlbGVjdGlvbjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgbm9kZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKG5vZGUgPT09IGVkaXRvcikgcmV0dXJuIHRydWU7XHJcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDdXJzb3JUb0ZpcnN0Q2VsbCh0YWJsZTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpcnN0Q2VsbCA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3RyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKGZpcnN0Q2VsbCkge1xyXG4gICAgICBmaXJzdENlbGwuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAndHJ1ZScpO1xyXG4gICAgICBmaXJzdENlbGwuZm9jdXMoKTtcclxuICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICBuZXdSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZmlyc3RDZWxsKTsgLy8gU2VsZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgY2VsbFxyXG4gICAgICBuZXdSYW5nZS5jb2xsYXBzZSh0cnVlKTsgLy8gQ29sbGFwc2UgdG8gdGhlIHN0YXJ0XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnNlcnRQYWdlQnJlYWsoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYWdlQnJlYWsgPSBgPGRpdiBzdHlsZT1cInBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcIj48YnIgLz48L2Rpdj5gO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgcGFnZUJyZWFrKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdENvbnRlbnQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYoIWVkaXRvcikgcmV0dXJuO1xyXG4gICAgY29uc3QgY29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7IC8vIEdldCB0aGUgSFRNTCBjb250ZW50IGZyb20gdGhlIGVkaXRvclxyXG4gICAgY29uc3QgcGxhaW5UZXh0Q29udGVudCA9IGVkaXRvci5pbm5lclRleHQ7IC8vIE9wdGlvbmFsbHksIGdldCBwbGFpbiB0ZXh0IGNvbnRlbnRcclxuICAgIGlmICghZWRpdG9yLmlubmVySFRNTC50cmltKCkpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nO1xyXG4gICAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZGltZW5zaW9uXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJpY2gtdGV4dC1lZGl0b3JcIj5cclxuICAgIDwhLS0gVG9vbGJhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyXCI+XHJcbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIZWFkXCIgKGNoYW5nZSk9XCJzZXRIZWFkaW5nKCRldmVudClcIj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XCI+UGFyYWdyYXBoPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgxXCIgc3R5bGU9XCJmb250LXNpemU6IDMycHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5IMTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJIMlwiIHN0eWxlPVwiZm9udC1zaXplOiAyOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XCI+SDI8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1wiPkgzPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg0XCIgc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5INDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcIj5INTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINlwiIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcIj5INjwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgICAgPHNlbGVjdCBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZvbnRcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwic2V0Rm9udFNpemUoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjEyXCI+MTJweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE0XCIgc2VsZWN0ZWQ+MTRweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE2cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE2XCI+MTZweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE4XCI+MThweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjIwXCI+MjBweDwvb3B0aW9uPiAgXHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjRcIj4yNHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjhweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjhcIj4yOHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMzJweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMzJcIj4zMnB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogNDhweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiNDhcIj40OHB4PC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ2JvbGQnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQm9sZFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYm9sZDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiSXRhbGljXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9pdGFsaWM8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgndW5kZXJsaW5lJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlVuZGVybGluZVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfdW5kZXJsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ3N0cmlrZXRocm91Z2gnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiU3RyaWtldGhyb3VnaFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5zdHJpa2V0aHJvdWdoX3M8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUxlZnQnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQWxpZ24gTGVmdFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fbGVmdDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5Q2VudGVyJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNlbnRlclwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fY2VudGVyPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlSaWdodCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJBbGlnbiBSaWdodFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fcmlnaHQ8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUZ1bGwnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiSnVzdGlmeVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fanVzdGlmeTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlVub3JkZXJlZCBMaXN0XCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9saXN0X2J1bGxldGVkPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ2luc2VydE9yZGVyZWRMaXN0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIk9yZGVyZWQgTGlzdFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfbGlzdF9udW1iZXJlZDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cIkluc2VydCBJbWFnZVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJpbnNlcnRJbWFnZVRvRWRpdG9yKCRldmVudClcIlxyXG4gICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC01MCU7IHRvcDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgb3BhY2l0eTogMDsgY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxyXG4gICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lO1wiPmluc2VydF9waG90b19vdXRsaW5lZDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJvcGVuVGFibGVEaWFsb2coJGV2ZW50KVwiIHR5cGU9XCJidXR0b25cIiBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNob29zZSB0YWJsZSByb3dzIGFuZCBjb2x1bW5zXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmJvcmRlcl9hbGw8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtYi0xXCIgKGNsaWNrKT1cIm1ha2VGaXJzdFJvd0hlYWRlcigpXCIgdHlwZT1cImJ1dHRvblwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cIk1ha2UgSGVhZGVyXCI+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDIwcHg7XCIgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICBwYWdlX2hlYWRlclxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJlZGl0b3JcIiBpZD1cImVkaXRvclwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiAjZWRpdG9yIChpbnB1dCk9XCJzdWJtaXRDb250ZW50KClcIiAoYmx1cik9XCJvbkJsdXIoKVwiIChrZXl1cCk9XCJvbkVkaXRvcktleVVwKCRldmVudClcIiAobW91c2V1cCk9XCJ1cGRhdGVDdXJyZW50Rm9ybWF0KClcIlxyXG4gICAgICAoZHJvcCk9XCJkcm9wKCRldmVudClcIiAoZHJhZ292ZXIpPVwiYWxsb3dEcm9wKCRldmVudClcIj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVEaWFsb2cgbGV0LWRpYWxvZ1JlZj1cImRpYWxvZ1JlZlwiPlxyXG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+Q2hvb3NlIFRhYmxlIFNpemU8L2gyPlxyXG4gICAgPG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2VsbCBvZiBncmlkOyBsZXQgaSA9IGluZGV4XCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdncmlkLWl0ZW0nOiB0cnVlLFxyXG4gICAgICAgICdoaWdobGlnaHRlZCc6IGkgJSA3IDwgY29scyAmJiBNYXRoLmZsb29yKGkgLyA3KSA8IHJvd3NcclxuICAgICAgfVwiIChtb3VzZWVudGVyKT1cInVwZGF0ZVByZXZpZXcoaSAlIDcgKyAxLCBNYXRoLmZsb29yKGkgLyA3KSArIDEpXCJcclxuICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVTZWxlY3Rpb24oaSAlIDcgKyAxLCBNYXRoLmZsb29yKGkgLyA3KSArIDEsIGRpYWxvZ1JlZilcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxwPnt7IHJvd3MgfX0geCB7eyBjb2xzIH19IDwvcD5cclxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG4iXX0=
882
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yYXBpZC10ZXh0LWVkaXRvci9zcmMvbGliL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQTBCLFVBQVUsRUFBRSxZQUFZLEVBQXdELE1BQU0sZUFBZSxDQUFDO0FBRWhNLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBaUJ6RSxNQUFNLE9BQU8sd0JBQXdCO0lBd0JuQyxZQUFvQixNQUFpQixFQUMzQixFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsS0FBaUIsRUFDakIsT0FBMEI7UUFKaEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBMUIzQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxXQUFNLEdBQVcsTUFBTSxDQUFDO1FBQ3hCLFVBQUssR0FBVyxNQUFNLENBQUM7UUFDdkIsY0FBUyxHQUFXLFNBQVMsQ0FBQztRQUM3QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFLN0Msa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDbkMsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFD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U0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxTQUFjO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQzs7c0hBbDlCVSx3QkFBd0I7MEdBQXhCLHdCQUF3QixpTUFUeEI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztZQUN2RCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsMGJDaEJILHk4c0JBa0lBOzRGRC9HYSx3QkFBd0I7a0JBYnBDLFNBQVM7K0JBQ0UsbUJBQW1CLGFBR2xCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDOzRCQUN2RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjswTUFLUSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNnQyxNQUFNO3NCQUE1QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1gsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNNLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNQLFlBQVk7c0JBQWhDLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIE9uQ2hhbmdlcywgVGVtcGxhdGVSZWYsIGZvcndhcmRSZWYsIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBSZW5kZXJlcjJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpZ25hdHVyZVBhZCB9IGZyb20gJ2FuZ3VsYXIyLXNpZ25hdHVyZXBhZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhcGlkLXRleHQtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSYXBpZFRleHRFZGl0b3JDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxuICBcclxufSlcclxuZXhwb3J0IGNsYXNzIFJhcGlkVGV4dEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGNvbnRlbnRDYXB0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSBcImF1dG9cIjtcclxuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gXCJhdXRvXCI7XHJcbiAgQElucHV0KCkgaWNvbkNvbG9yOiBzdHJpbmcgPSAnIzMzMzMzMyc7XHJcbiAgQE91dHB1dCgpIGNvbnRlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAVmlld0NoaWxkKCdlZGl0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBlZGl0b3IhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlRGlhbG9nJykgdGFibGVEaWFsb2chOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NpZ25hdHVyZURpYWxvZycpIHNpZ25hdHVyZURpYWxvZyE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2lnUGFkJykgc2lnbmF0dXJlUGFkITogU2lnbmF0dXJlUGFkO1xyXG4gIHByaXZhdGUgZWRpdG9yQ29udGVudDogc3RyaW5nID0gJyc7XHJcbiAgcm93czogbnVtYmVyID0gMTtcclxuICBjb2xzOiBudW1iZXIgPSAxO1xyXG4gIGdyaWQgPSBBcnJheSg0OSkuZmlsbCgwKTtcclxuICBNYXRoID0gTWF0aDtcclxuICB1cGxvYWRlZEltYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBcclxuICBzaWduYXR1cmVQYWRPcHRpb25zID0ge1xyXG4gICAgbWluV2lkdGg6IDEsXHJcbiAgICBjYW52YXNXaWR0aDogNDAwLFxyXG4gICAgY2FudmFzSGVpZ2h0OiAyMDBcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBcclxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIF9jaGFuZ2U6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZygnQnVpbGQgLTEnKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50Q2FwdHVyZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGVuYWJsZWQuJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGRpc2FibGVkLicpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5pbml0aWFsaXplRWRpdG9yQ29udGVudCgnJyk7XHJcbiAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snaGVpZ2h0J10gfHwgY2hhbmdlc1snd2lkdGgnXSkge1xyXG4gICAgICB0aGlzLmFwcGx5RGltZW5zaW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseURpbWVuc2lvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkaW1lbnNpb25FbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaW1lbnNpb24nKTtcclxuICAgIGlmICh0aGlzLndpZHRoKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZGltZW5zaW9uRWxlbWVudCwgJ3dpZHRoJywgdGhpcy53aWR0aCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKTtcclxuICAgIGlmKHRoaXMuaGVpZ2h0KXtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlZGl0b3JFbGVtZW50LCAnaGVpZ2h0JywgdGhpcy5oZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKTtcclxuICAgIFxyXG4gICAgaWYgKGVkaXRvciAmJiAoZWRpdG9yLmlubmVySFRNTC50cmltKCkgPT09IFwiXCIgfHwgZWRpdG9yLmlubmVySFRNTC50cmltKCkgPT09IFwiPGJyPlwiKSkge1xyXG4gICAgICBlZGl0b3IuZm9jdXMoKTtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICByYW5nZS5zZXRTdGFydChlZGl0b3IsIDApO1xyXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy51cGRhdGVDdXJyZW50Rm9ybWF0KCkpO1xyXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcclxuICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuXHJcbiAgICAvLyB0aGlzLmluaXRpYWxpemVFZGl0b3JDb250ZW50KCcnKTtcclxuICAgIC8vIHRoaXMuZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKTtcclxuXHJcbiAgfVxyXG5cclxuICBlbnN1cmVQYXJhZ3JhcGhBbmRGb2N1cygpIHtcclxuXHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xyXG5cclxuICAgIC8vIElmIGVkaXRvciBpcyBlbXB0eSBvciBkb2Vzbid0IGhhdmUgYSA8cD4gYXMgdGhlIGxhc3QgZWxlbWVudFxyXG4gICAgaWYgKCFlZGl0b3IuaW5uZXJIVE1MLnRyaW0oKSkge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj5cXHUyMDBCPC9wPic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBmaXJzdENoaWxkID0gZWRpdG9yLmZpcnN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmICghZmlyc3RDaGlsZCB8fCBmaXJzdENoaWxkLnRhZ05hbWUgIT09ICdQJykge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MO1xyXG4gICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSBgPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPiR7Y29udGVudH08L3A+YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHAgPSBlZGl0b3IucXVlcnlTZWxlY3RvcigncCcpO1xyXG4gICAgaWYgKHApIHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMocCk7XHJcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpOyBcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGb2N1cyB0aGUgZWRpdG9yXHJcbiAgICBlZGl0b3IuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVFZGl0b3JDb250ZW50KGRhdGE6IHN0cmluZykge1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcclxuXHJcbiAgICAvLyBJZiBjb250ZW50IGhhcyBubyBIVE1MIHRhZ3MsIHdyYXAgd2l0aCA8cD5cclxuICAgIGNvbnN0IGhhc0h0bWxUYWdzID0gLzxbXj5dKz4vLnRlc3QoZGF0YSk7XHJcbiAgICBpZiAoIWhhc0h0bWxUYWdzKSB7XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSBgPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDtcIj4ke2RhdGF9PC9wPmA7XHJcbiAgICAgIC8vIHRoaXMuZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSBkYXRhO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgfVxyXG5cclxuXHJcbiAgb25Db250ZW50Q2hhbmdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29udGVudENhcHR1cmUpIHtcclxuICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKTtcclxuICAgICAgaWYgKGVkaXRvcikge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yQ29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NhcHR1cmVkIENvbnRlbnQgKENoaWxkKTonLCB0aGlzLmVkaXRvckNvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMuY29udGVudENoYW5nZS5lbWl0KHRoaXMuZWRpdG9yQ29udGVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZW50KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5lZGl0b3JDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRIZWFkOiBhbnkgPSAnUCc7XHJcbiAgc2VsZWN0ZWRGb250OiBhbnkgPSAnMTQnO1xyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT0gJzxicj4nIHx8IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09ICcnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRIZWFkID0gJ1AnO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRm9udCA9ICcxNCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jaGFuZ2UuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xyXG5cclxuICB3cml0ZVZhbHVlKGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50IHx8ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKSB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gc2V0Rm9udFNpemUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgLy8gICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgLy8gICBjb25zdCBzaXplID0gc2VsZWN0LnZhbHVlO1xyXG4gIC8vICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gIC8vICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuICAvLyAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgLy8gICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xyXG4gIC8vICAgICBjb25zdCBwYXJlbnQgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZT8ucGFyZW50RWxlbWVudDtcclxuICAvLyAgICAgaWYgKFxyXG4gIC8vICAgICAgIHBhcmVudCAmJlxyXG4gIC8vICAgICAgIHBhcmVudC5jbGFzc0xpc3QgJiZcclxuICAvLyAgICAgICBBcnJheS5mcm9tKHBhcmVudC5jbGFzc0xpc3QpLnNvbWUoKGM6IHN0cmluZykgPT4gYy5zdGFydHNXaXRoKCdmcy0nKSlcclxuICAvLyAgICAgKSB7XHJcbiAgLy8gICAgICAgcGFyZW50LnN0eWxlLmZvbnRTaXplID0gYCR7c2l6ZX1weGA7XHJcbiAgLy8gICAgICAgcGFyZW50LmNsYXNzTmFtZSA9IGBmcy0ke3NpemV9YDtcclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gIC8vICAgICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSBgJHtzaXplfXB4YDtcclxuICAvLyAgICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAvLyAgICAgICByYW5nZS5zdXJyb3VuZENvbnRlbnRzKHNwYW4pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICBlbHNlIHtcclxuICAvLyAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAvLyAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IGAke3NpemV9cHhgO1xyXG4gIC8vICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAvLyAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpKTsgLy8gemVyby13aWR0aCBzcGFjZVxyXG4gIC8vICAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG4gIC8vICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgLy8gICAgIG5ld1JhbmdlLnNldFN0YXJ0KHNwYW4uZmlyc3RDaGlsZCBhcyBOb2RlLCAxKTtcclxuICAvLyAgICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgLy8gICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAvLyAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIG9uRWRpdG9yS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIGhhbmRsZSBFbnRlciBvciBhcnJvdyBrZXlzXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdCYWNrU3BhY2UnICkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRGb3JtYXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUN1cnJlbnRGb3JtYXQoKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGFuY2hvck5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcclxuICAgIGlmICghYW5jaG9yTm9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBwYXJlbnRFbGVtID0gYW5jaG9yTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcclxuICAgICAgPyAoYW5jaG9yTm9kZSBhcyBIVE1MRWxlbWVudClcclxuICAgICAgOiAoYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcclxuXHJcbiAgICBpZiAoIXBhcmVudEVsZW0pIHJldHVybjtcclxuXHJcbiAgICBsZXQgZGV0ZWN0ZWRIZWFkID0gJ1AnO1xyXG4gICAgbGV0IGRldGVjdGVkRm9udCA9ICcxNCc7IC8vIGRlZmF1bHRcclxuXHJcbiAgICAvLyBUcmF2ZXJzZSB1cHdhcmQgdG8gZGV0ZWN0IGZvcm1hdHRpbmdcclxuICAgIHdoaWxlIChwYXJlbnRFbGVtICYmIHBhcmVudEVsZW0gIT09IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgdGFnID0gcGFyZW50RWxlbS50YWdOYW1lLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAvLyBEZXRlY3QgaGVhZGluZ1xyXG4gICAgICBpZiAoWydIMScsICdIMicsICdIMycsICdINCcsICdINScsICdINicsICdQJ10uaW5jbHVkZXModGFnKSkge1xyXG4gICAgICAgIGRldGVjdGVkSGVhZCA9IHRhZztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGV0ZWN0IGlubGluZSBmb250LXNpemUgZnJvbSBzdHlsZSBvciBjbGFzc1xyXG4gICAgICBjb25zdCBmb250U2l6ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW0pLmZvbnRTaXplO1xyXG4gICAgICBpZiAoZm9udFNpemUpIHtcclxuICAgICAgICBjb25zdCBweCA9IHBhcnNlSW50KGZvbnRTaXplLnJlcGxhY2UoJ3B4JywgJycpLCAxMCk7XHJcbiAgICAgICAgaWYgKCFpc05hTihweCkpIHtcclxuICAgICAgICAgIGRldGVjdGVkRm9udCA9IHB4LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBicmVhazsgLy8gZm91bmQgdGhlIGNsb3Nlc3QgdmFsaWQgZm9udCBzaXplXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBwYXJlbnRFbGVtID0gcGFyZW50RWxlbS5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBib3VuZCBwcm9wZXJ0aWVzIGlmIGNoYW5nZWRcclxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEhlYWQgIT09IGRldGVjdGVkSGVhZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSGVhZCA9IGRldGVjdGVkSGVhZDtcclxuICAgICAgY2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZvbnQgIT09IGRldGVjdGVkRm9udCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRm9udCA9IGRldGVjdGVkRm9udDtcclxuICAgICAgY2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzZXRGb250U2l6ZShldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGVjdCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudDtcclxuICAgIGNvbnN0IHNpemUgPSBzZWxlY3QudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG5cclxuICAgIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XHJcbiAgICAgIC8vIE5vbi1lbXB0eSBzZWxlY3Rpb25cclxuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgc3Bhbi5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgYCR7c2l6ZX1weGAsICdpbXBvcnRhbnQnKTtcclxuICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLy8gSWYgc2VsZWN0aW9uIHNwYW5zIG11bHRpcGxlIGVsZW1lbnRzLCB1c2UgZXhlY0NvbW1hbmQgZmFsbGJhY2tcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgJzcnKTsgLy8gdGVtcG9yYXJ5IGxhcmdlc3Qgc2l6ZVxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ZvbnRbc2l6ZT1cIjdcIl0nKS5mb3JFYWNoKChlbDogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc2l6ZScpO1xyXG4gICAgICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsIGAke3NpemV9cHhgLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENvbGxhcHNlZCBzZWxlY3Rpb24gKG5vIHRleHQgc2VsZWN0ZWQpXHJcbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIHNwYW4uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsIGAke3NpemV9cHhgLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBCJykpOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXHJcbiAgICAgIHJhbmdlLmluc2VydE5vZGUoc3Bhbik7XHJcblxyXG4gICAgICAvLyBNb3ZlIGN1cnNvciBpbnNpZGUgc3BhblxyXG4gICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICAgIG5ld1JhbmdlLnNldFN0YXJ0KHNwYW4uZmlyc3RDaGlsZCBhcyBOb2RlLCAxKTtcclxuICAgICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xyXG4gICAgdGhpcy51cGRhdGVDdXJyZW50Rm9ybWF0KCk7XHJcbiAgICB0aGlzLl9jaGFuZ2UuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVhZGluZyhldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGVjdCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudDtcclxuICAgIGNvbnN0IHRhZyA9IHNlbGVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmICghZWRpdG9yKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbmV3RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRhZykge1xyXG4gICAgICBjYXNlICdIMSc6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzMycHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnYm9sZCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDInOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcyOHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0gzJzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMjRweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICdib2xkJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdINCc6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzIwcHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnYm9sZCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDUnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcxOHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJzYwMCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDYnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcxNnB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJzYwMCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnUCc6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzE0cHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnbm9ybWFsJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xyXG4gICAgaWYgKHNlbGVjdGVkVGV4dCkge1xyXG4gICAgICBuZXdFbGVtLnRleHRDb250ZW50ID0gc2VsZWN0ZWRUZXh0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3RWxlbS5pbm5lckhUTUwgPSAnXFx1MjAwQic7IC8vIEtlZXBzIGN1cnNvciB2aXNpYmxlXHJcbiAgICB9XHJcblxyXG4gICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcclxuICAgIHJhbmdlLmluc2VydE5vZGUobmV3RWxlbSk7XHJcblxyXG4gICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgbmV3UmFuZ2Uuc2V0U3RhcnQobmV3RWxlbSwgbmV3RWxlbS5jaGlsZE5vZGVzLmxlbmd0aCk7XHJcbiAgICBuZXdSYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcblxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcblxyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGNvbnN0IGlucHV0RXZlbnQgPSBuZXcgRXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0pO1xyXG4gICAgZWRpdG9yLmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZm9ybWF0KGNvbW1hbmQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsICcnKTtcclxuICB9XHJcblxyXG4gIC8vSW1hZ2UgU2VjdGlvblxyXG5cclxuICBhbGxvd0Ryb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGltYWdlIGRyYWcgc3RhcnRcclxuICBkcmFnKGV2ZW50OiBEcmFnRXZlbnQsIGltYWdlVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGV2ZW50LmRhdGFUcmFuc2Zlcj8uc2V0RGF0YShcInRleHRcIiwgaW1hZ2VVcmwpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGRyb3AgZXZlbnQgaW4gdGhlIGVkaXRvclxyXG4gIGRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIC8vIGJpbmRJbWFnZUNsaWNrRXZlbnRzKCkge1xyXG4gIC8vICAgY29uc3QgZWRpdG9yRWwgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xyXG4gIC8vICAgY29uc3QgaW1hZ2VzID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvckFsbCgnaW1nJyk7XHJcblxyXG4gIC8vICAgaW1hZ2VzLmZvckVhY2goaW1nID0+IHtcclxuICAvLyAgICAgLy8gQXZvaWQgZG91YmxlLWJpbmRpbmdcclxuICAvLyAgICAgaW1nLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkltYWdlQ2xpY2sgYXMgYW55KTtcclxuICAvLyAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkltYWdlQ2xpY2suYmluZCh0aGlzKSk7XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIG9uSW1hZ2VDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gIC8vICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgLy8gICBjb25zdCBpbWcgPSBldmVudC50YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcclxuICAvLyAgIHRoaXMuZW5hYmxlSW1hZ2VSZXNpemUoaW1nKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGVuYWJsZUltYWdlUmVzaXplKGltZzogSFRNTEltYWdlRWxlbWVudCkge1xyXG4gIC8vICAgLy8gUmVtb3ZlIGFueSBleGlzdGluZyByZXNpemUgaGFuZGxlcyBmaXJzdFxyXG4gIC8vICAgdGhpcy5yZW1vdmVJbWFnZVJlc2l6ZUhhbmRsZXMoKTtcclxuXHJcbiAgLy8gICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgLy8gICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2ltYWdlLXJlc2l6ZS13cmFwcGVyJyk7XHJcbiAgLy8gICBpbWcucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIGltZyk7XHJcbiAgLy8gICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcblxyXG4gIC8vICAgLy8gQWRkIHJlc2l6YWJsZSBoYW5kbGVzXHJcbiAgLy8gICBjb25zdCByZXNpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgLy8gICByZXNpemVyLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6ZXInKTtcclxuICAvLyAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQocmVzaXplcik7XHJcblxyXG4gIC8vICAgLy8gSGFuZGxlIHJlc2l6aW5nIGxvZ2ljXHJcbiAgLy8gICBsZXQgc3RhcnRYID0gMCwgc3RhcnRZID0gMCwgc3RhcnRXaWR0aCA9IDAsIHN0YXJ0SGVpZ2h0ID0gMDtcclxuXHJcbiAgLy8gICByZXNpemVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgLy8gICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAvLyAgICAgc3RhcnRYID0gZS5jbGllbnRYO1xyXG4gIC8vICAgICBzdGFydFkgPSBlLmNsaWVudFk7XHJcbiAgLy8gICAgIHN0YXJ0V2lkdGggPSBpbWcud2lkdGg7XHJcbiAgLy8gICAgIHN0YXJ0SGVpZ2h0ID0gaW1nLmhlaWdodDtcclxuXHJcbiAgLy8gICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAvLyAgICAgICBjb25zdCBuZXdXaWR0aCA9IHN0YXJ0V2lkdGggKyAoZS5jbGllbnRYIC0gc3RhcnRYKTtcclxuICAvLyAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBzdGFydEhlaWdodCArIChlLmNsaWVudFkgLSBzdGFydFkpO1xyXG4gIC8vICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcclxuICAvLyAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YDtcclxuICAvLyAgICAgfTtcclxuXHJcbiAgLy8gICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcclxuICAvLyAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgLy8gICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgLy8gICAgIH07XHJcblxyXG4gIC8vICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgLy8gICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyByZW1vdmVJbWFnZVJlc2l6ZUhhbmRsZXMoKSB7XHJcbiAgLy8gICBjb25zdCBleGlzdGluZyA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmltYWdlLXJlc2l6ZS13cmFwcGVyJyk7XHJcbiAgLy8gICBpZiAoZXhpc3RpbmcpIHtcclxuICAvLyAgICAgY29uc3QgaW1nID0gZXhpc3RpbmcucXVlcnlTZWxlY3RvcignaW1nJyk7XHJcbiAgLy8gICAgIGlmIChpbWcpIHtcclxuICAvLyAgICAgICBleGlzdGluZy5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoaW1nLCBleGlzdGluZyk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZXhpc3RpbmcucmVtb3ZlKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgcmVtb3ZlSW1hZ2UoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRlZEltYWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgaW5zZXJ0SW1hZ2VJbkVkaXRvcihpbWFnZVVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoIWVkaXRvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFZGl0b3IgZWxlbWVudCBub3QgZm91bmQuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgaW1hZ2UgZWxlbWVudFxyXG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICBpbWcuc3JjID0gaW1hZ2VVcmw7XHJcbiAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICBpbWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICBpbWcuc3R5bGUud2lkdGggPSAnMzAwcHgnO1xyXG4gICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuXHJcbiAgICAvLyBDcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgaW1hZ2UgdG8gYWxsb3cgcmVzaXppbmdcclxuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHdyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgd3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7ICAvLyBFbnN1cmVzIHRoZSB3cmFwcGVyIG9ubHkgdGFrZXMgdXAgc3BhY2UgZm9yIHRoZSBpbWFnZVxyXG4gICAgd3JhcHBlci5zdHlsZS5tYXJnaW4gPSAnMTBweCc7XHJcbiAgICB3cmFwcGVyLnN0eWxlLnBhZGRpbmcgPSAnNXB4JztcclxuICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyID0gJzFweCBkYXNoZWQgI2NjYyc7IC8vIE9wdGlvbmFsIGJvcmRlciB0byBpbmRpY2F0ZSB0aGUgaW1hZ2UgYXJlYVxyXG5cclxuICAgIC8vIEFwcGVuZCB0aGUgaW1hZ2UgdG8gdGhlIHdyYXBwZXJcclxuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTtcclxuXHJcbiAgICAvLyBBcHBlbmQgdGhlIHdyYXBwZXIgdG8gdGhlIGVkaXRvclxyXG4gICAgZWRpdG9yLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xyXG5cclxuICAgIC8vIE1ha2UgdGhlIGltYWdlIHJlc2l6YWJsZVxyXG4gICAgdGhpcy5tYWtlSW1hZ2VSZXNpemFibGUod3JhcHBlciwgaW1nKTtcclxuXHJcbiAgICAvLyBPcHRpb25hbGx5LCBhZGQgYSB0ZXh0IG5vZGUgdG8gbWFpbnRhaW4gY3Vyc29yIHBvc2l0aW9uIGFmdGVyIGFwcGVuZGluZyB0aGUgaW1hZ2VcclxuICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKTsgIC8vIEludmlzaWJsZSBjaGFyYWN0ZXIgdG8gbWFpbnRhaW4gcG9zaXRpb25cclxuICAgIGVkaXRvci5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcih3cmFwcGVyKTtcclxuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFrZUltYWdlUmVzaXphYmxlKHdyYXBwZXI6IEhUTUxFbGVtZW50LCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGxldCBpc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICBsZXQgc3RhcnRYID0gMDtcclxuICAgIGxldCBzdGFydFkgPSAwO1xyXG4gICAgbGV0IHN0YXJ0V2lkdGggPSAwO1xyXG4gICAgbGV0IHN0YXJ0SGVpZ2h0ID0gMDtcclxuXHJcbiAgICAvLyBDcmVhdGUgcmVzaXplIGhhbmRsZXMgZm9yIHRoZSBpbWFnZVxyXG4gICAgY29uc3QgY3JlYXRlUmVzaXplSGFuZGxlID0gKFxyXG4gICAgICBjdXJzb3I6IHN0cmluZyxcclxuICAgICAgcG9zaXRpb25TdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXHJcbiAgICAgIHJlc2l6ZUNhbGxiYWNrOiAoZGVsdGFYOiBudW1iZXIsIGRlbHRhWTogbnVtYmVyKSA9PiB2b2lkXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3QgaGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS53aWR0aCA9ICcxMHB4JztcclxuICAgICAgaGFuZGxlLnN0eWxlLmhlaWdodCA9ICcxMHB4JztcclxuICAgICAgaGFuZGxlLnN0eWxlLmJhY2tncm91bmQgPSAncmdiYSgwLCAwLCAwLCAwLjUpJztcclxuICAgICAgaGFuZGxlLnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcclxuICAgICAgT2JqZWN0LmFzc2lnbihoYW5kbGUuc3R5bGUsIHBvc2l0aW9uU3R5bGVzKTtcclxuXHJcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAocmVzaXplRXZlbnQpID0+IHtcclxuICAgICAgICBpc1Jlc2l6aW5nID0gdHJ1ZTtcclxuICAgICAgICBzdGFydFggPSByZXNpemVFdmVudC5jbGllbnRYO1xyXG4gICAgICAgIHN0YXJ0WSA9IHJlc2l6ZUV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgc3RhcnRXaWR0aCA9IGltZy5vZmZzZXRXaWR0aDtcclxuICAgICAgICBzdGFydEhlaWdodCA9IGltZy5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzUmVzaXppbmcpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWSA9IG1vdmVFdmVudC5jbGllbnRZIC0gc3RhcnRZO1xyXG4gICAgICAgICAgICByZXNpemVDYWxsYmFjayhkZWx0YVgsIGRlbHRhWSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xyXG4gICAgICAgICAgaXNSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaGFuZGxlKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gQWRkIHJlc2l6aW5nIGhhbmRsZXMgdG8gdGhlIHdyYXBwZXIgZm9yIHRoZSBpbWFnZVxyXG4gICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAnbnctcmVzaXplJyxcclxuICAgICAgeyB0b3A6ICctNXB4JywgbGVmdDogJy01cHgnIH0sXHJcbiAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggLSBkZWx0YVh9cHhgO1xyXG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtzdGFydEhlaWdodCAtIGRlbHRhWX1weGA7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBjcmVhdGVSZXNpemVIYW5kbGUoXHJcbiAgICAgICdzZS1yZXNpemUnLFxyXG4gICAgICB7IGJvdHRvbTogJy01cHgnLCByaWdodDogJy01cHgnIH0sXHJcbiAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggKyBkZWx0YVh9cHhgO1xyXG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtzdGFydEhlaWdodCArIGRlbHRhWX1weGA7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRJbWFnZShldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoaW5wdXQ/LmZpbGVzKSB7XHJcbiAgICAgIEFycmF5LmZyb20oaW5wdXQuZmlsZXMpLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzLnB1c2goaW1hZ2VVcmwpOyAvLyBTdG9yZSBpbWFnZSBVUkwgaW4gdGhlIGFycmF5XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0SW1hZ2UoZmlsZTogRmlsZSk6IFByb21pc2U8RmlsZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKGZpbGUudHlwZSAhPT0gJ2ltYWdlL3BuZycpIHtcclxuICAgICAgICByZXNvbHZlKGZpbGUpOyAvLyBSZXR1cm4gdGhlIG9yaWdpbmFsIGZpbGUgaWYgaXQncyBub3QgYSBQTkdcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBpbWcuc3JjID0gZS50YXJnZXQucmVzdWx0O1xyXG5cclxuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgICAgICBpZiAoIWN0eCkge1xyXG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IGNhbnZhcyBjb250ZXh0JykpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY2FudmFzLndpZHRoID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xyXG4gICAgICAgICAgY2FudmFzLnRvQmxvYihcclxuICAgICAgICAgICAgYmxvYiA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGJsb2IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpwZ0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGUubmFtZS5yZXBsYWNlKC9cXC5wbmckLywgJy5qcGcnKSwgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGpwZ0ZpbGUpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gY29udmVydCBQTkcgdG8gSlBHJykpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2ltYWdlL2pwZWcnLFxyXG4gICAgICAgICAgICAwLjk1IC8vIFF1YWxpdHkgZmFjdG9yIGZvciBKUEVHXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZWFkIHRoZSBmaWxlJykpO1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBpbnNlcnRJbWFnZVRvRWRpdG9yKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltYWdlVXJsID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKCFlZGl0b3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHdyYXBwZXIuY29udGVudEVkaXRhYmxlID0gJ2ZhbHNlJztcclxuICAgICAgICB3cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuICAgICAgICB3cmFwcGVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcclxuICAgICAgICB3cmFwcGVyLnN0eWxlLmJvcmRlciA9ICcxcHggZGFzaGVkICNjY2MnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUubWFyZ2luID0gJzEwcHgnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUucGFkZGluZyA9ICc1cHgnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyQmxvY2tDb2xvciA9ICcjMDA3QkZGJztcclxuICAgICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgICAgICBpbWcuc3JjID0gaW1hZ2VVcmw7XHJcbiAgICAgICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSAnMzAwcHgnO1xyXG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XHJcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xyXG4gICAgICAgIGxldCBpc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHN0YXJ0WCA9IDA7XHJcbiAgICAgICAgbGV0IHN0YXJ0WSA9IDA7XHJcbiAgICAgICAgbGV0IHN0YXJ0V2lkdGggPSAwO1xyXG4gICAgICAgIGxldCBzdGFydEhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGNyZWF0ZVJlc2l6ZUhhbmRsZSA9IChcclxuICAgICAgICAgIGN1cnNvcjogc3RyaW5nLFxyXG4gICAgICAgICAgcG9zaXRpb25TdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXHJcbiAgICAgICAgICByZXNpemVDYWxsYmFjazogKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcikgPT4gdm9pZFxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLndpZHRoID0gJzEwcHgnO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLmhlaWdodCA9ICcxMHB4JztcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwgMCwgMCwgMC41KSc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihoYW5kbGUuc3R5bGUsIHBvc2l0aW9uU3R5bGVzKTtcclxuXHJcbiAgICAgICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHJlc2l6ZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlzUmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBzdGFydFggPSByZXNpemVFdmVudC5jbGllbnRYO1xyXG4gICAgICAgICAgICBzdGFydFkgPSByZXNpemVFdmVudC5jbGllbnRZO1xyXG4gICAgICAgICAgICBzdGFydFdpZHRoID0gaW1nLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICBzdGFydEhlaWdodCA9IGltZy5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXNSZXNpemluZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBtb3ZlRXZlbnQuY2xpZW50WSAtIHN0YXJ0WTtcclxuICAgICAgICAgICAgICAgIHJlc2l6ZUNhbGxiYWNrKGRlbHRhWCwgZGVsdGFZKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICBpc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaGFuZGxlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgICAgICdudy1yZXNpemUnLFxyXG4gICAgICAgICAgeyB0b3A6ICctNXB4JywgbGVmdDogJy01cHgnIH0sXHJcbiAgICAgICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7c3RhcnRXaWR0aCAtIGRlbHRhWH1weGA7XHJcbiAgICAgICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtzdGFydEhlaWdodCAtIGRlbHRhWX1weGA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjcmVhdGVSZXNpemVIYW5kbGUoXHJcbiAgICAgICAgICAnc2UtcmVzaXplJyxcclxuICAgICAgICAgIHsgYm90dG9tOiAnLTVweCcsIHJpZ2h0OiAnLTVweCcgfSxcclxuICAgICAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoICsgZGVsdGFYfXB4YDtcclxuICAgICAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0ICsgZGVsdGFZfXB4YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGVkaXRvci5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcclxuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBCJyk7XHJcbiAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHRleHROb2RlKTtcclxuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcih3cmFwcGVyKTtcclxuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblRhYmxlRGlhbG9nKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmluc2VydE1hcmtlcigpO1xyXG4gICAgdGhpcy5yb3dzID0gMTtcclxuICAgIHRoaXMuY29scyA9IDE7XHJcblxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLnRhYmxlRGlhbG9nLCB7XHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgdG9wOiBgJHtldmVudC5jbGllbnRZfXB4YCxcclxuICAgICAgICBsZWZ0OiBgJHtldmVudC5jbGllbnRYfXB4YCxcclxuICAgICAgfSxcclxuICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuaW5zZXJ0VGFibGUocmVzdWx0LnJvd3MsIHJlc3VsdC5jb2xzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuU2lnbmF0dXJlRGlhbG9nKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmluc2VydE1hcmtlcigpO1xyXG5cclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5zaWduYXR1cmVEaWFsb2csIHtcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICB0b3A6IGAke2V2ZW50LmNsaWVudFl9cHhgLFxyXG4gICAgICAgIGxlZnQ6IGAke2V2ZW50LmNsaWVudFh9cHhgLFxyXG4gICAgICB9LFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmKHJlc3VsdClcclxuICAgICAgICAvLyB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArPSBgPGltZyBzcmM9JHtyZXN1bHR9IGFsdD0nU2lnbmF0dXJlJyAvPmBcclxuICAgICAgdGhpcy5pbnNlcnRJbWFnZUluRWRpdG9yKHJlc3VsdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVByZXZpZXcoY29sczogbnVtYmVyLCByb3dzOiBudW1iZXIpIHtcclxuICAgIHRoaXMuY29scyA9IGNvbHM7XHJcbiAgICB0aGlzLnJvd3MgPSByb3dzO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0aW9uKGNvbEluZGV4OiBudW1iZXIsIHJvd0luZGV4OiBudW1iZXIsIGRpYWxvZ1JlZjogYW55KSB7XHJcbiAgICB0aGlzLmNvbHMgPSBjb2xJbmRleDtcclxuICAgIHRoaXMucm93cyA9IHJvd0luZGV4O1xyXG4gICAgZGlhbG9nUmVmLmNsb3NlKHsgcm93czogdGhpcy5yb3dzLCBjb2xzOiB0aGlzLmNvbHMgfSk7IC8vIENsb3NlIGRpYWxvZyB3aXRoIHNlbGVjdGlvblxyXG4gIH1cclxuXHJcbiAgbWFrZUZpcnN0Um93SGVhZGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIC8vIENoZWNrIGlmIHNlbGVjdGlvbiBpcyBpbnNpZGUgdGhlIGVkaXRvclxyXG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0aW9uSW5zaWRlRWRpdG9yKGVkaXRvciwgc2VsZWN0aW9uKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IHRhYmxlIHRvIHRoZSBzZWxlY3Rpb25cclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5maW5kQ2xvc2VzdFRhYmxlKHNlbGVjdGVkTm9kZSk7XHJcbiAgICBpZiAoIXRhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IHJvdyBjZWxscyB0byBoZWFkZXIgY2VsbHNcclxuICAgIGNvbnN0IGZpcnN0Um93ID0gdGFibGUucm93c1swXTtcclxuICAgIGlmIChmaXJzdFJvdykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0Um93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2VsbCA9IGZpcnN0Um93LmNlbGxzW2ldO1xyXG4gICAgICAgIGNvbnN0IHRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTtcclxuICAgICAgICB0aC5pbm5lckhUTUwgPSBjZWxsLmlubmVySFRNTDtcclxuICAgICAgICB0aC5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICB0aC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0YxRjFGMCc7XHJcbiAgICAgICAgdGguc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XHJcbiAgICAgICAgdGguc3R5bGUuYm9yZGVyQ29sbGFwc2UgPSAnY29sbGFwc2UnO1xyXG4gICAgICAgIHRoLnN0eWxlLnBhZGRpbmcgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS5wYWRkaW5nOyAvLyBSZXRhaW4gcGFkZGluZ1xyXG4gICAgICAgIHRoLnN0eWxlLndpZHRoID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2VsbCkud2lkdGg7IC8vIFJldGFpbiB3aWR0aFxyXG4gICAgICAgIHRoLnN0eWxlLmhlaWdodCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLmhlaWdodDtcclxuICAgICAgICBmaXJzdFJvdy5yZXBsYWNlQ2hpbGQodGgsIGNlbGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlZGl0b3IuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZENsb3Nlc3RUYWJsZShub2RlOiBOb2RlKTogSFRNTFRhYmxlRWxlbWVudCB8IG51bGwge1xyXG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gZG9jdW1lbnQpIHtcclxuICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09ICdUQUJMRScpIHtcclxuICAgICAgICByZXR1cm4gbm9kZSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgICB9XHJcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydE1hcmtlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuY2xvbmVSYW5nZSgpO1xyXG4gICAgICBjb25zdCBtYXJrZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIG1hcmtlci5pZCA9ICd0YWJsZS1tYXJrZXInO1xyXG4gICAgICBtYXJrZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShtYXJrZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5zZXJ0VGFibGUocm93czogc3RyaW5nLCBjb2xzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvd0NvdW50ID0gcGFyc2VJbnQocm93cywgMTApO1xyXG4gICAgY29uc3QgY29sQ291bnQgPSBwYXJzZUludChjb2xzLCAxMCk7XHJcblxyXG4gICAgaWYgKGlzTmFOKHJvd0NvdW50KSB8fCBpc05hTihjb2xDb3VudCkgfHwgcm93Q291bnQgPCAxIHx8IGNvbENvdW50IDwgMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IG1hcmtlciA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCcjdGFibGUtbWFya2VyJyk7XHJcblxyXG4gICAgY29uc3QgdGFibGVIVE1MID0gdGhpcy5jcmVhdGVUYWJsZUhUTUwocm93Q291bnQsIGNvbENvdW50KTtcclxuICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gdGFibGVIVE1MO1xyXG4gICAgY29uc3QgdGFibGUgPSB0ZW1wRGl2LmZpcnN0RWxlbWVudENoaWxkO1xyXG5cclxuICAgIGlmIChtYXJrZXIgJiYgdGFibGUpIHtcclxuICAgICAgbWFya2VyLnBhcmVudE5vZGUhLnJlcGxhY2VDaGlsZCh0YWJsZSwgbWFya2VyKTtcclxuICAgICAgdGhpcy5zZXRDdXJzb3JUb0ZpcnN0Q2VsbCh0YWJsZSBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICAgIGVkaXRvci5mb2N1cygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZmFsbGJhY2sgaWYgbm8gbWFya2VyLCBqdXN0IGFwcGVuZFxyXG4gICAgICB0aGlzLmFwcGVuZFRhYmxlKGVkaXRvciwgcm93Q291bnQsIGNvbENvdW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50OiBudW1iZXIsIGNvbENvdW50OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRhYmxlSFRNTCA9ICc8dGFibGUgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IHdpZHRoOiAxMDAlOyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcIj4nO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XHJcbiAgICAgIHRhYmxlSFRNTCArPSAnPHRyPic7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sQ291bnQ7IGorKykge1xyXG4gICAgICAgIHRhYmxlSFRNTCArPSBgPHRkIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGhlaWdodDogMmVtOyBwYWRkaW5nOiAuNGVtOyBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwidGV4dGJveFwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIj48L3RkPmA7XHJcbiAgICAgIH1cclxuICAgICAgdGFibGVIVE1MICs9ICc8L3RyPic7XHJcbiAgICB9XHJcbiAgICB0YWJsZUhUTUwgKz0gJzwvdGFibGU+JztcclxuICAgIHJldHVybiB0YWJsZUhUTUw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGVuZFRhYmxlKGVkaXRvcjogSFRNTEVsZW1lbnQsIHJvd0NvdW50OiBudW1iZXIsIGNvbENvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRoaXMuY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICBlZGl0b3IuaW5uZXJIVE1MICs9IHRhYmxlSFRNTDtcclxuICAgIGNvbnN0IGxhc3RJbnNlcnRlZFRhYmxlID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlOmxhc3QtY2hpbGQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIHRoaXMuc2V0Q3Vyc29yVG9GaXJzdENlbGwobGFzdEluc2VydGVkVGFibGUpO1xyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzU2VsZWN0aW9uSW5zaWRlRWRpdG9yKGVkaXRvcjogSFRNTEVsZW1lbnQsIHNlbGVjdGlvbjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgbm9kZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKG5vZGUgPT09IGVkaXRvcikgcmV0dXJuIHRydWU7XHJcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDdXJzb3JUb0ZpcnN0Q2VsbCh0YWJsZTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpcnN0Q2VsbCA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3RyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKGZpcnN0Q2VsbCkge1xyXG4gICAgICBmaXJzdENlbGwuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAndHJ1ZScpO1xyXG4gICAgICBmaXJzdENlbGwuZm9jdXMoKTtcclxuICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICBuZXdSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZmlyc3RDZWxsKTsgLy8gU2VsZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgY2VsbFxyXG4gICAgICBuZXdSYW5nZS5jb2xsYXBzZSh0cnVlKTsgLy8gQ29sbGFwc2UgdG8gdGhlIHN0YXJ0XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnNlcnRQYWdlQnJlYWsoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYWdlQnJlYWsgPSBgPGRpdiBzdHlsZT1cInBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcIj48YnIgLz48L2Rpdj5gO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgcGFnZUJyZWFrKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdENvbnRlbnQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYoIWVkaXRvcikgcmV0dXJuO1xyXG4gICAgY29uc3QgY29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7IC8vIEdldCB0aGUgSFRNTCBjb250ZW50IGZyb20gdGhlIGVkaXRvclxyXG4gICAgY29uc3QgcGxhaW5UZXh0Q29udGVudCA9IGVkaXRvci5pbm5lclRleHQ7IC8vIE9wdGlvbmFsbHksIGdldCBwbGFpbiB0ZXh0IGNvbnRlbnRcclxuICAgIGlmICghZWRpdG9yLmlubmVySFRNTC50cmltKCkpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nO1xyXG4gICAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xyXG4gIH1cclxuXHJcbiAgLy9TaWduYXR1cmVcclxuXHJcbiAgY2xvc2VTaWduRGlhbG9nKGRpYWxvZ1JlZjogYW55KXtcclxuICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuICBzdWJtaXRTaWduRGlhbG9nKGRpYWxvZ1JlZjogYW55KXtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNpZ25hdHVyZVBhZC50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xyXG4gICAgZGlhbG9nUmVmLmNsb3NlKGRhdGEpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZGltZW5zaW9uXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJpY2gtdGV4dC1lZGl0b3JcIj5cclxuICAgIDwhLS0gVG9vbGJhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyXCI+XHJcbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIZWFkXCIgKGNoYW5nZSk9XCJzZXRIZWFkaW5nKCRldmVudClcIj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XCI+UGFyYWdyYXBoPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgxXCIgc3R5bGU9XCJmb250LXNpemU6IDMycHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5IMTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJIMlwiIHN0eWxlPVwiZm9udC1zaXplOiAyOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XCI+SDI8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1wiPkgzPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg0XCIgc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5INDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcIj5INTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINlwiIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcIj5INjwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgICAgPHNlbGVjdCBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZvbnRcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwic2V0Rm9udFNpemUoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjEyXCI+MTJweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE0XCIgc2VsZWN0ZWQ+MTRweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE2cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE2XCI+MTZweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE4XCI+MThweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjIwXCI+MjBweDwvb3B0aW9uPiAgXHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjRcIj4yNHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjhweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjhcIj4yOHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMzJweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMzJcIj4zMnB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogNDhweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiNDhcIj40OHB4PC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ2JvbGQnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQm9sZFwiIHRpdGxlPVwiQm9sZFwiID5cclxuICAgICAgICA8c3ZnICBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZpZXdCb3g9XCItNi41IDAgMjggMzJcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8dGl0bGU+Ym9sZDwvdGl0bGU+IDxwYXRoIGQ9XCJNMCAyNS41MzF2MS4zNDRjMS4wNjMtMC4wMzEgMS45MzgtMC4wNjMgMi41NjMtMC4wOTQgMC42MjUgMCAxLjA5NC0wLjAzMSAxLjMxMy0wLjAzMSAxLjY1Ni0wLjEyNSAzLjA2My0wLjIxOSA0LjI4MS0wLjE4OGwyLjgxMyAwLjA2M2MyLjQzOCAwIDQuMjUtMC4zMTMgNS43NS0xIDAuNzE5LTAuMzQ0IDEuMzQ0LTAuODQ0IDEuOTY5LTEuNTMxIDAuNDY5LTAuNDY5IDAuODEzLTEuMDMxIDEuMDMxLTEuNjU2IDAuMjUtMC44NDQgMC4zNzUtMS41OTQgMC4zNzUtMi4yODEgMC0yLjUtMS43MTktNC42MjUtNS4wOTQtNS40MDYgMC41MzEtMC4yNSAxLjAzMS0wLjUgMS4zNzUtMC42ODhzMC42MjUtMC4zMTMgMC43ODEtMC40MzhjMS4xODgtMC44NzUgMS43ODEtMS45MDYgMS43ODEtMy4yODEgMC0wLjU5NC0wLjA5NC0xLjE4OC0wLjI4MS0xLjcxOS0wLjM3NS0xLjA5NC0xLjIxOS0yLTIuNDA2LTIuNTYzLTAuNTMxLTAuMzEzLTEuMDMxLTAuNDY5LTEuMzc1LTAuNTMxLTAuOTM4LTAuMjUtMS44NDQtMC4zNzUtMi43MTktMC4zNzVoLTEuMDk0Yy0wLjIxOSAwLTAuNDA2IDAtMC41MzEtMC4wMzFoLTAuNWMtMC4wNjMgMC0wLjE1NiAwLTAuMjUgMC4wMzFoLTAuNjI1bC01LjQwNiAwLjE1Ni0zLjcxOSAwLjA5NCAwLjA2MyAxLjE4OGMwLjg3NSAwLjEyNSAxLjQwNiAwLjE4OCAxLjYyNSAwLjE4OCAwLjQzOCAwIDAuNzgxIDAuMDk0IDAuOTY5IDAuMjE5IDAuMDk0IDAgMC4xNTYgMC4wNjMgMC4xODggMC4xMjUgMC4wNjMgMC4yMTkgMC4xMjUgMC42ODggMC4xNTYgMS41NjMgMC4wNjMgMS41NjMgMC4wNjMgMi44MTMgMC4wNjMgMy43NSAwLjAzMSAwLjk2OSAwLjAzMSAxLjYyNSAwLjA5NCAydjcuMDMxYzAgMS4yMTktMC4wMzEgMi4xMjUtMC4xNTYgMi43NS0wLjAzMSAwLjIxOS0wLjEyNSAwLjQzOC0wLjI4MSAwLjY4OC0wLjQzOCAwLjE4OC0xIDAuMzc1LTEuNzUgMC40NjktMC4zNzUgMC4wNjMtMC43MTkgMC4xMjUtMSAwLjE1NnpNNy43MTkgMTQuMjgxdi0yLjQ2OWMwLjA2My0xLjcxOSAwLTIuOTY5LTAuMDMxLTMuOTY5LTAuMDYzLTAuNDM4LTAuMDYzLTAuODQ0LTAuMDYzLTEuMDYzIDAuNzUtMC4xNTYgMS4zNDQtMC4yMTkgMS44NDQtMC4yMTkgMS42MjUgMCAyLjg0NCAwLjM0NCAzLjY1NiAxLjA5NCAwLjgxMyAwLjY4OCAxLjIxOSAxLjU2MyAxLjIxOSAyLjY1NiAwIDIuOTY5LTEuNzUgNC4wOTQtNS4wNjMgNC4wOTQtMC41NjMgMC0xLjA5NC0wLjAzMS0xLjU2My0wLjEyNXpNNy43MTkgMjAuNDA2di00LjVjMC4zMTMtMC4wNjMgMC43NS0wLjEyNSAxLjQzOC0wLjEyNSAxLjU5NC0wLjAzMSAyLjgxMyAwLjEyNSAzLjU2MyAwLjQzOCAxLjUzMSAwLjU2MyAyLjU5NCAyLjE4OCAyLjU5NCA0LjM0NCAwIDEuMDMxLTAuMjE5IDEuODQ0LTAuNTYzIDIuNTYzLTAuMzc1IDAuNzE5LTAuOTA2IDEuMjE5LTEuNzE5IDEuNTk0LTEuNjU2IDAuNzgxLTMuNzE5IDAuNzE5LTUuMTI1IDAuMTI1LTAuMDk0LTAuMjUtMC4xMjUtMC40MzgtMC4xMjUtMC41OTR6XCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiSXRhbGljXCIgdGl0bGU9XCJJdGFsaWNcIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfaXRhbGljPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiNCAwIDIwIDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxnIGlkPVwiRWRpdCAvIEl0YWxpY1wiPiA8cGF0aCBpZD1cIlZlY3RvclwiIGQ9XCJNOCAxOUgxME0xMCAxOUgxMk0xMCAxOUwxNCA1TTEyIDVIMTRNMTQgNUgxNlwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ3VuZGVybGluZScpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJVbmRlcmxpbmVcIiB0aXRsZT1cIlVuZGVybGluZVwiPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF91bmRlcmxpbmU8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCI0IDAgMTggMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPGcgaWQ9XCJFZGl0IC8gVW5kZXJsaW5lXCI+IDxwYXRoIGlkPVwiVmVjdG9yXCIgZD1cIk02IDE5SDE4TTggNVYxMUM4IDEzLjIwOTEgOS43OTA4NiAxNSAxMiAxNUMxNC4yMDkxIDE1IDE2IDEzLjIwOTEgMTYgMTFWNVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ3N0cmlrZXRocm91Z2gnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiU3RyaWtldGhyb3VnaFwiIHRpdGxlPVwiU3RyaWtldGhyb3VnaFwiPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPnN0cmlrZXRocm91Z2hfczwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjQgMCAyMCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8ZyBpZD1cIkVkaXQgLyBTdHJpa2V0aHJvdWdoXCI+IDxwYXRoIGlkPVwiVmVjdG9yXCIgZD1cIk0xMi4wMDA1IDEyLjAwMDFDMTIuODk1OSAxMi4wMDAxIDEzLjc3NDkgMTIuMTkyNSAxNC41NDU3IDEyLjU1NzFDMTQuODkzOSAxMi43MjE4IDE1LjIxNDYgMTIuOTE5MiAxNS41MDA5IDEzLjE0MzdDMTUuODQ4NCAxMy40MTYyIDE2LjE0NTcgMTMuNzI5IDE2LjM4MjIgMTQuMDczMkMxNi44MTM2IDE0LjcwMDkgMTcuMDI2MyAxNS40MDk2IDE2Ljk5ODIgMTYuMTI1NkMxNi45NyAxNi44NDE2IDE2LjcwMiAxNy41Mzg1IDE2LjIyMjIgMTguMTQzM0MxNS43NDI0IDE4Ljc0ODEgMTUuMDY4NCAxOS4yMzg2IDE0LjI3MDUgMTkuNTYzOEMxMy40NzI3IDE5Ljg4OSAxMi41ODAyIDIwLjAzNzMgMTEuNjg2NSAxOS45OTIzQzEwLjc5MjggMTkuOTQ3MyA5LjkzMTA0IDE5LjcxMDggOS4xOTA0MyAxOS4zMDgyQzguNDQ5ODIgMTguOTA1NSA3Ljg1NzgyIDE4LjM1MTQgNy40NzY1NiAxNy43MDMyTTEyLjAwMDUgMTIuMDAwMUg0TTEyLjAwMDUgMTIuMDAwMUgyME0xNi41MjQzIDYuMjk3MThDMTYuMTQzIDUuNjQ5IDE1LjU1MTIgNS4wOTQ2MiAxNC44MTA1IDQuNjkxOTdDMTQuMDY5OSA0LjI4OTMyIDEzLjIwNzYgNC4wNTI4NyAxMi4zMTQgNC4wMDc4OUMxMS40MjAzIDMuOTYyOTEgMTAuNTI3OCA0LjExMDkxIDkuNzI5OTggNC40MzYxM0M4LjkzMjEzIDQuNzYxMzUgOC4yNTgxMiA1LjI1MjA1IDcuNzc4MzIgNS44NTY4OUM3LjI5ODUyIDYuNDYxNzMgNy4wMzA1NyA3LjE1ODg1IDcuMDAyNDQgNy44NzQ4NUM2Ljk5NDIgOC4wODQ2MyA3LjAwNjY5IDguMjkzNDUgNy4wMzkyNCA4LjUwMDE0XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUxlZnQnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQWxpZ24gTGVmdFwiIHRpdGxlPVwiQWxpZ24gTGVmdFwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fbGVmdDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xMSAxSDFWM0gxMVYxWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEgNUgxNVY3SDFWNVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xMSA5SDFWMTFIMTFWOVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSAxM0gxVjE1SDE1VjEzWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5Q2VudGVyJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNlbnRlclwiIHRpdGxlPVwiQWxpZ24gQ2VudGVyXCIgPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9hbGlnbl9jZW50ZXI8L21hdC1pY29uPiAtLT5cclxuICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMTUgMUgxVjNIMTVWMVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xIDVIMTVWN0gxVjVaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTUgOUgxVjExSDE1VjlaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTEgMTNIMVYxNUgxMVYxM1pcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeVJpZ2h0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkFsaWduIFJpZ2h0XCIgdGl0bGU9XCJBbGlnbiBSaWdodFwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fcmlnaHQ8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xNSAxSDVWM0gxNVYxWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEgNUgxNVY3SDFWNVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSA5SDVWMTFIMTVWOVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSAxM0gxVjE1SDE1VjEzWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5RnVsbCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJKdXN0aWZ5XCIgdGl0bGU9XCJKdXN0aWZ5XCIgPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9hbGlnbl9qdXN0aWZ5PC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZpZXdCb3g9XCIwIC0yLjUgMjkgMjlcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+PHBhdGggZD1cIm0xLjMzNCAyLjY2NmgyNi42NjVjLjAxMSAwIC4wMjQuMDAxLjAzNy4wMDEuNzM3IDAgMS4zMzQtLjU5NyAxLjMzNC0xLjMzNHMtLjU5Ny0xLjMzNC0xLjMzNC0xLjMzNGMtLjAxMyAwLS4wMjYgMC0uMDM5LjAwMWguMDAyLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDJ6XCI+PC9wYXRoPjxwYXRoIGQ9XCJtMjcuOTk5IDUuMzMzaC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuMDExIDAgLjAyNC4wMDEuMDM3LjAwMS43MzcgMCAxLjMzNC0uNTk3IDEuMzM0LTEuMzM0cy0uNTk3LTEuMzM0LTEuMzM0LTEuMzM0Yy0uMDEzIDAtLjAyNiAwLS4wMzkuMDAxelwiPjwvcGF0aD48cGF0aCBkPVwibTI3Ljk5OSAxMC42NjdoLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDIgMjYuNjY1Yy43Mi0uMDIxIDEuMjk2LS42MSAxLjI5Ni0xLjMzM3MtLjU3Ni0xLjMxMi0xLjI5NC0xLjMzM3pcIj48L3BhdGg+PHBhdGggZD1cIm0yNy45OTkgMjEuMzMzaC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuNzItLjAyMSAxLjI5Ni0uNjEgMS4yOTYtMS4zMzNzLS41NzYtMS4zMTItMS4yOTQtMS4zMzN6XCI+PC9wYXRoPjxwYXRoIGQ9XCJtMjcuOTk5IDE2aC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuNzItLjAyMSAxLjI5Ni0uNjEgMS4yOTYtMS4zMzNzLS41NzYtMS4zMTItMS4yOTQtMS4zMzN6XCI+PC9wYXRoPjwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJmb3JtYXQoJ2luc2VydFVub3JkZXJlZExpc3QnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiVW5vcmRlcmVkIExpc3RcIiB0aXRsZT1cIkJ1bGxldCBMaXN0XCIgPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9saXN0X2J1bGxldGVkPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2aWV3Qm94PVwiMCAwIDM2IDQ4XCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+PHBhdGggZD1cIk04IDIxYy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3pNOCA5Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3ptMCAyNC4zM2MtMS40NyAwLTIuNjcgMS4xOS0yLjY3IDIuNjdzMS4yIDIuNjcgMi42NyAyLjY3IDIuNjctMS4xOSAyLjY3LTIuNjctMS4yLTIuNjctMi42Ny0yLjY3ek0xNCAzOGgyOHYtNEgxNHY0em0wLTEyaDI4di00SDE0djR6bTAtMTZ2NGgyOHYtNEgxNHpcIj48L3BhdGg+PC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0T3JkZXJlZExpc3QnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiT3JkZXJlZCBMaXN0XCIgdGl0bGU9XCJOdW1iZXJlZCBMaXN0XCIgPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9saXN0X251bWJlcmVkPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZlcnNpb249XCIxLjFcIiBpZD1cIkNhcGFfMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB2aWV3Qm94PVwiMCAwIDk0LjQ3OSA5NC40NzlcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8Zz4gPGc+IDxwYXRoIGQ9XCJNOTIuNDc5LDYuODIxSDI2LjgyM2MtMS4xMDQsMC0yLDAuODk2LTIsMlYxOS41OGMwLDEuMTA0LDAuODk2LDIsMiwyaDY1LjY1NmMxLjEwNCwwLDItMC44OTYsMi0yVjguODIxIEM5NC40NzksNy43MTcsOTMuNTg0LDYuODIxLDkyLjQ3OSw2LjgyMXpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNOTIuNDc5LDQwLjQ1N0gyNi44MjNjLTEuMTA0LDAtMiwwLjg5Ni0yLDJ2MTAuNzYxYzAsMS4xMDQsMC44OTYsMiwyLDJoNjUuNjU2YzEuMTA0LDAsMi0wLjg5NiwyLTJWNDIuNDU3IEM5NC40NzksNDEuMzUyLDkzLjU4NCw0MC40NTcsOTIuNDc5LDQwLjQ1N3pcIj48L3BhdGg+IDxwYXRoIGQ9XCJNOTIuNDc5LDc1LjEwOUgyNi44MjNjLTEuMTA0LDAtMiwwLjg5Ni0yLDJ2MTAuNzU5YzAsMS4xMDQsMC44OTYsMiwyLDJoNjUuNjU2YzEuMTA0LDAsMi0wLjg5NiwyLTJWNzcuMTA5IEM5NC40NzksNzYuMDA0LDkzLjU4NCw3NS4xMDksOTIuNDc5LDc1LjEwOXpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMS44NDIsMTEuMTA0YzAuNDIzLDAuMDUxLDAuODQ4LTAuMDgsMS4xNjctMC4zNmwwLjkxNC0wLjc5OXYxMi45NzNjMCwwLjgyOCwwLjY3MiwxLjUsMS41LDEuNWgxLjU0NiBjMC44MjgsMCwxLjUtMC42NzIsMS41LTEuNVY1LjU2N2MwLTAuODI4LTAuNjcyLTEuNS0xLjUtMS41SDUuMzc4Yy0wLjM1NiwwLTAuNzAxLDAuMTI3LTAuOTczLDAuMzU4TDAuNTI3LDcuNzI4IGMtMC41ODksMC41MDEtMC43LDEuMzY5LTAuMjU2LDIuMDAzbDAuNTIyLDAuNzQ1QzEuMDQsMTAuODI1LDEuNDIsMTEuMDUzLDEuODQyLDExLjEwNHpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMi41NDYsMzcuNWMtMC42NDcsMC4yMy0xLjA1NiwwLjg3Mi0wLjk5LDEuNTU2bDAuMDk2LDAuOTk5YzAuMDQ4LDAuNDk3LDAuMzM5LDAuOTM4LDAuNzc4LDEuMTc2IGMwLjQzOCwwLjIzOCwwLjk2NywwLjI0MywxLjQwOSwwLjAxMWMxLjE4LTAuNjE1LDEuOTIzLTAuNzc1LDIuOTIyLTAuNTM0YzAuNzEsMC4xNjMsMS4xODgsMC41ODYsMS40MzgsMS4yMjUgYzAuMzc4LDEuMTQzLDAuMzk1LDIuOTU3LTIuODU0LDYuODczbC0yLjUwNiwyLjk5NmMtMC41ODksMC42ODgtMC45OSwxLjExOS0xLjMwMiwxLjQwNGMtMC4zMTIsMC4yODQtMC40ODgsMC42ODgtMC40ODgsMS4xMDcgdjEuNDc1YzAsMC44MjgsMC42NzIsMS41LDEuNSwxLjVoOS4xMzJjMC44MjgsMCwxLjUtMC42NzIsMS41LTEuNVY1NS4wMWMwLTAuODI4LTAuNjcyLTEuNS0xLjUtMS41SDYuODk2IGMwLjQ1OC0wLjUxNSwxLjAzNy0xLjIxMSwxLjcxNi0yLjA2M2MyLjgwMy0zLjQ2OCw1LjA2MS02LjY0NSw0LjI5Mi0xMC4zNzZjLTAuMzA5LTEuNjcyLTEuMjQ3LTIuOTY2LTIuNzMxLTMuNzUyIGMtMC44MjYtMC40MjQtMS44NzktMC42MzktMy4xMjctMC42MzlDNS42MjksMzYuNjgsNC4wMzEsMzYuOTcxLDIuNTQ2LDM3LjV6XCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEwLjQ5MSw3OS41MTZjMC4yNS0wLjEzNSwwLjQ4Ny0wLjI4OSwwLjc0LTAuNDgzYzEuNzE4LTEuMzEzLDEuODAxLTMuMzM1LDEuNzg2LTMuODg1IGMtMC4wMDEtMS44NzgtMC43MTItMy4zMTgtMi4xNjYtNC40MDFjLTEuMDI2LTAuNzctMi41MzQtMS4xNzctNC4zNjEtMS4xNzdjLTEuMzQ3LDAtMi43ODcsMC4yMTItNC4wNTcsMC41OTYgYy0wLjY2OCwwLjIwMi0xLjEwNywwLjgzOS0xLjA2MywxLjUzM2wwLjA1OCwwLjg4YzAuMDMxLDAuNDcxLDAuMjgsMC44OTYsMC42NzMsMS4xNTVjMC4zOTQsMC4yNTksMC44ODYsMC4zMTksMS4zMjcsMC4xNTkgYzAuODY0LTAuMzA3LDEuNTcxLTAuNDUsMi4yMjMtMC40NWMwLjIyOSwwLDAuNDU3LDAuMDE5LDAuNzIyLDAuMDYzYzAuOTQsMC4xMjcsMS41NjMsMC41NDksMS45LDEuMjgzIGMwLjIzNywwLjUyLDAuMTksMS40NDUtMC4wODMsMS44ODVjLTAuNjU0LDEuMDE0LTIuNDM4LDEuMjE3LTMuNDQzLDEuMjVjLTAuODEsMC4wMjQtMS40NTMsMC42ODgtMS40NTMsMS40OTh2MC42NTggYzAsMC44MjgsMC42ODcsMS41LDEuNTE1LDEuNWMxLjU3NSwwLDIuMzExLDAuMzA5LDIuNTk2LDAuNDg1YzAuNzM3LDAuNDY1LDEuMDY1LDEuMDQzLDEuMDY2LDEuOTE4IGMwLjAyNSwwLjkxMi0wLjM0OCwxLjYwNi0xLjEyOSwyLjEyMWMtMS4wMTQsMC42NTEtMi42NCwwLjY0Ny00LjUwNSwwLjAzMmMtMC40MzgtMC4xNDYtMC45MTgtMC4wODItMS4zMDIsMC4xNzUgYy0wLjM4NCwwLjI1NS0wLjYyOSwwLjY3Mi0wLjY2NSwxLjEzMmwtMC4wNjgsMC44NzJDMC43NSw4OC45NzMsMS4xMzUsODkuNTg4LDEuNzUsODkuODNjMC4zMywwLjEzLDAuNTUxLDAuMTgzLDEuMDIyLDAuMjgxIGMwLjg1NywwLjE5NiwxLjg0LDAuMzAyLDIuODQyLDAuMzAyYzEuNDkzLDAsNC4yNDgtMC4yNDcsNS45NDQtMS45MTljMS42NTctMS42OSwxLjk3NC00LjExLDEuNTYtNS43MjkgQzEyLjYzNiw4MC43MDQsMTEuNDYxLDc5Ljk0NiwxMC40OTEsNzkuNTE2elwiPjwvcGF0aD4gPC9nPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gIGFyaWEtbGFiZWw9XCJJbnNlcnQgSW1hZ2VcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1wiIHRpdGxlPVwiSW5zZXJ0IEltYWdlXCIgPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIChjaGFuZ2UpPVwiaW5zZXJ0SW1hZ2VUb0VkaXRvcigkZXZlbnQpXCJcclxuICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtNTAlOyB0b3A6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG9wYWNpdHk6IDA7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbiBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lO1wiPmluc2VydF9waG90b19vdXRsaW5lZDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjIgMSAyMCAyMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTE0LjI2NDcgMTUuOTM3N0wxMi41NDczIDE0LjIzNDZDMTEuNzU4IDEzLjQ1MTkgMTEuMzYzMyAxMy4wNjA1IDEwLjkwODkgMTIuOTEzN0MxMC41MDkyIDEyLjc4NDUgMTAuMDc5IDEyLjc4NDUgOS42NzkyMiAxMi45MTM3QzkuMjI0ODUgMTMuMDYwNSA4LjgzMDE3IDEzLjQ1MTkgOC4wNDA4MiAxNC4yMzQ2TDQuMDQxOTMgMTguMjYyMk0xNC4yNjQ3IDE1LjkzNzdMMTQuNjA2IDE1LjU5OTFDMTUuNDEyIDE0Ljc5OTkgMTUuODE0OSAxNC40MDAzIDE2LjI3NzMgMTQuMjU0NUMxNi42ODM5IDE0LjEyNjIgMTcuMTIwOCAxNC4xMzEyIDE3LjUyNDQgMTQuMjY4OEMxNy45ODMyIDE0LjQyNTMgMTguMzc2OSAxNC44MzQgMTkuMTY0MiAxNS42NTE1TDIwIDE2LjUwMDFNMTQuMjY0NyAxNS45Mzc3TDE4LjIyIDE5Ljk2MjhNMTguMjIgMTkuOTYyOEMxNy44NzAzIDIwIDE3LjQyMTMgMjAgMTYuOCAyMEg3LjJDNi4wNzk4OSAyMCA1LjUxOTg0IDIwIDUuMDkyMDIgMTkuNzgyQzQuNzE1NyAxOS41OTAzIDQuNDA5NzMgMTkuMjg0MyA0LjIxNzk5IDE4LjkwOEM0LjEyNTgzIDE4LjcyNzEgNC4wNzI2NCAxOC41MjI2IDQuMDQxOTMgMTguMjYyMk0xOC4yMiAxOS45NjI4QzE4LjUwMDcgMTkuOTMyOSAxOC43MTc1IDE5Ljg3OTEgMTguOTA4IDE5Ljc4MkMxOS4yODQzIDE5LjU5MDMgMTkuNTkwMyAxOS4yODQzIDE5Ljc4MiAxOC45MDhDMjAgMTguNDgwMiAyMCAxNy45MjAxIDIwIDE2LjhWMTNNMTEgNEg3LjJDNi4wNzk4OSA0IDUuNTE5ODQgNCA1LjA5MjAyIDQuMjE3OTlDNC43MTU3IDQuNDA5NzMgNC40MDk3MyA0LjcxNTY5IDQuMjE3OTkgNS4wOTIwMkM0IDUuNTE5ODQgNCA2LjA3OTkgNCA3LjJWMTYuOEM0IDE3LjQ0NjYgNCAxNy45MDY2IDQuMDQxOTMgMTguMjYyMk0xOCA5VjZNMTggNlYzTTE4IDZIMjFNMTggNkgxNVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJvcGVuVGFibGVEaWFsb2coJGV2ZW50KVwiIHR5cGU9XCJidXR0b25cIiAgdGl0bGU9XCJUYWJsZVwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNob29zZSB0YWJsZSByb3dzIGFuZCBjb2x1bW5zXCI+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Ym9yZGVyX2FsbDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNTZweFwiIGhlaWdodD1cIjI1NnB4XCIgdmlld0JveD1cIjIgMTIgMjAgM1wiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTMgOUgyMU0zIDE1SDIxTTkgOUw5IDIwTTE1IDlMMTUgMjBNNi4yIDIwSDE3LjhDMTguOTIwMSAyMCAxOS40ODAyIDIwIDE5LjkwOCAxOS43ODJDMjAuMjg0MyAxOS41OTAzIDIwLjU5MDMgMTkuMjg0MyAyMC43ODIgMTguOTA4QzIxIDE4LjQ4MDIgMjEgMTcuOTIwMSAyMSAxNi44VjcuMkMyMSA2LjA3OTkgMjEgNS41MTk4NCAyMC43ODIgNS4wOTIwMkMyMC41OTAzIDQuNzE1NjkgMjAuMjg0MyA0LjQwOTczIDE5LjkwOCA0LjIxNzk5QzE5LjQ4MDIgNCAxOC45MjAxIDQgMTcuOCA0SDYuMkM1LjA3OTkgNCA0LjUxOTg0IDQgNC4wOTIwMiA0LjIxNzk5QzMuNzE1NjkgNC40MDk3MyAzLjQwOTczIDQuNzE1NjkgMy4yMTc5OSA1LjA5MjAyQzMgNS41MTk4NCAzIDYuMDc5ODkgMyA3LjJWMTYuOEMzIDE3LjkyMDEgMyAxOC40ODAyIDMuMjE3OTkgMTguOTA4QzMuNDA5NzMgMTkuMjg0MyAzLjcxNTY5IDE5LjU5MDMgNC4wOTIwMiAxOS43ODJDNC41MTk4NCAyMCA1LjA3OTg5IDIwIDYuMiAyMFpcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtYi0xXCIgKGNsaWNrKT1cIm1ha2VGaXJzdFJvd0hlYWRlcigpXCIgdHlwZT1cImJ1dHRvblwiICBhcmlhLWxhYmVsPVwiTWFrZSBIZWFkZXJcIiB0aXRsZT1cIlRhYmxlIEhlYWRlclwiID5cclxuICAgICAgICA8IS0tIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4O1wiIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgcGFnZV9oZWFkZXJcclxuICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgIDxzdmcgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2aWV3Qm94PVwiMCAwIDE5MjAgMTkyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTIxMy4zMzMgMEM5NS41MTI2IDAgMCA5NS41MTI2IDAgMjEzLjMzM1YxNzA2LjY3QzAgMTgyNC40OSA5NS41MTI2IDE5MjAgMjEzLjMzMyAxOTIwSDE3MDYuNjdDMTgyNC40OSAxOTIwIDE5MjAgMTgyNC40OSAxOTIwIDE3MDYuNjdWMjEzLjMzM0MxOTIwIDk1LjUxMjYgMTgyNC40OSAwIDE3MDYuNjcgMEgyMTMuMzMzWk0yNjYuNjY3IDc0Ni42NjdDMjM3LjIxMSA3NDYuNjY3IDIxMy4zMzMgNzIyLjc4OCAyMTMuMzMzIDY5My4zMzNWMzczLjMzM0MyMTMuMzMzIDM0My44NzggMjM3LjIxMSAzMjAgMjY2LjY2NyAzMjBIMTY1My4zM0MxNjgyLjc5IDMyMCAxNzA2LjY3IDM0My44NzggMTcwNi42NyAzNzMuMzMzVjY5My4zMzNDMTcwNi42NyA3MjIuNzg4IDE2ODIuNzkgNzQ2LjY2NyAxNjUzLjMzIDc0Ni42NjdIMjY2LjY2N1pcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJvcGVuU2lnbmF0dXJlRGlhbG9nKCRldmVudClcIiB0eXBlPVwiYnV0dG9uXCIgIHRpdGxlPVwiU2lnbmF0dXJlXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2hvb3NlIHRhYmxlIHJvd3MgYW5kIGNvbHVtbnNcIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5ib3JkZXJfYWxsPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI4IDI4XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiBmaWxsPVwiIzAwMDAwMFwiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8IS0tIFVwbG9hZGVkIHRvOiBTVkcgUmVwbywgd3d3LnN2Z3JlcG8uY29tLCBHZW5lcmF0b3I6IFNWRyBSZXBvIE1peGVyIFRvb2xzIC0tPiA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gPGcgaWQ9XCLwn5SNLVByb2R1Y3QtSWNvbnNcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPiA8ZyBpZD1cImljX2ZsdWVudF9zaWduYXR1cmVfMjhfcmVndWxhclwiIGZpbGw9XCIjMjEyMTIxXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiPiA8cGF0aCBkPVwiTTE2LjQ3OTg5NTYsMjEuMDAxOTU3OCBMMTYuNzUsMjEgQzE3Ljk3MDIzNTIsMjEgMTguNjExMjQ0MSwyMS41MDU4MDMyIDE5LjQwMjA2MjcsMjIuNzA0MTY2MiBMMTkuNzk1ODI3OCwyMy4zMTI0NDA5IEMyMC4xMDI4MjY2LDIzLjc2NjkzOCAyMC4yOTQ0Mzc0LDIzLjk1NzMyNDcgMjAuNTM1Nzg0LDI0LjA1Njc5MjkgQzIwLjk2ODQ4NzMsMjQuMjM1MTI2NiAyMS4zMjcxMDA4LDI0LjE0NzQ0NDYgMjIuNjQ0MDc4MiwyMy41MTMzMjEzIEwyMy4wNDczMjczLDIzLjMxNzAzMTkgQzIzLjg3MDk5ODIsMjIuOTEyNjcxMSAyNC40MzMwMjg2LDIyLjY4MTE2MDYgMjUuMDY4MDk4MywyMi41MjIzOTMxIEMyNS40Njk5NDQ1LDIyLjQyMTkzMTYgMjUuODc3MTQ1MywyMi42NjYyNTIxIDI1Ljk3NzYwNjksMjMuMDY4MDk4MyBDMjYuMDc4MDY4NCwyMy40Njk5NDQ1IDI1LjgzMzc0NzksMjMuODc3MTQ1MyAyNS40MzE5MDE3LDIzLjk3NzYwNjkgQzI1LjAzNzE2MDYsMjQuMDc2MjkyMiAyNC42NTg5NDY1LDI0LjIxNzg4MTkgMjQuMTY0MTM2NCwyNC40NDU4OTk3IEwyMy4wMDU0ODk5LDI1LjAwMzI2NzMgQzIxLjQzNzYzMDIsMjUuNzQzNjk0NCAyMC45MDU5MDA5LDI1LjgzMTczMjEgMTkuOTY0MjE2LDI1LjQ0MzYyNzUgQzE5LjMzOTEyMzcsMjUuMTg2MDAyOCAxOC45ODM2NzY1LDI0LjgxMzI5OCAxOC40NjM1NjM5LDI0LjAxODAyMjcgTDE4LjI2ODg5MDMsMjMuNzE0MDg0OSBDMTcuNzA3MTExMiwyMi44Mjg4NzMxIDE3LjQwNTc3OTQsMjIuNTM4NDUzOCAxNi44Njg4NDQ0LDIyLjUwMzY2NTUgTDE2Ljc1LDIyLjUgQzE2LjIwMTczMDYsMjIuNSAxNi4wOTMzMTA0LDIyLjU2ODQ1NzIgMTQuMDA5MjgxLDI0LjExNTAyNDEgQzEyLjI2NzAzOTUsMjUuNDA3OTQ4OCAxMC45MzgzMzU5LDI2LjAyNTQ5ODQgOS4yNDg2NDI0MywyNi4wMjU0OTg0IEM3LjE4ODcyODY5LDI2LjAyNTQ5ODQgNS4yNDc3MzM2NywyNS42NDcwNjcgMy40MzE0NTg3NSwyNC44OTA1MzYzIEw2LjMxMzc3ODAzLDI0LjIyNDE3ODQgQzcuMjU3Njk0MDQsMjQuNDI1MDc2MiA4LjIzNTY3MTQzLDI0LjUyNTQ5ODQgOS4yNDg2NDI0MywyNC41MjU0OTg0IEMxMC41MzkzMDM1LDI0LjUyNTQ5ODQgMTEuNjA5MTI5LDI0LjAyODI2OTEgMTMuMTE1Mzc5NiwyMi45MTA0NzQzIEwxNC4yNzU0NDQsMjIuMDU0NTQ4OCBDMTUuNTQ2ODA2NSwyMS4xMzA0OTAzIDE1LjgyOTYxMTMsMjEuMDE2MDMyIDE2LjQ3OTg5NTYsMjEuMDAxOTU3OCBMMTYuNDc5ODk1NiwyMS4wMDE5NTc4IFogTTIyLjc3NzA5ODgsMy4yMjIwODk3OSBDMjQuNDUwNzIyMyw0Ljg5NTcxMzMgMjQuNDUwNzU2Niw3LjYwOTE2MDc5IDIyLjc3NzE4ODksOS4yODI4MTMyNCBMMjEuNzQxNjU1LDEwLjMxODQ0NzUgQzIyLjg5MzYyNjMsMTEuNzE5OTY1NyAyMi44NTIxNTI2LDEzLjIwNTM3NzQgMjEuNzgxMTAzMSwxNC4yNzk1NTYgTDE4Ljc4MDA3MjcsMTcuMjgwNTg3NCBMMTguNzgwMDcyNywxNy4yODA1ODc0IEMxOC40ODcwMzc0LDE3LjU3MzMzODQgMTguMDEyMTYzNywxNy41NzMxMDggMTcuNzE5NDEyNiwxNy4yODAwNzI3IEMxNy40MjY2NjE2LDE2Ljk4NzAzNzQgMTcuNDI2ODkyLDE2LjUxMjE2MzcgMTcuNzE5OTI3MywxNi4yMTk0MTI2IEwyMC43MTg4OTY5LDEzLjIyMDQ0NCBDMjEuMjAzOTU3MSwxMi43MzM5NjY4IDIxLjI2MDAwMjEsMTIuMTI5OTk4MyAyMC42Nzg5NDEsMTEuMzgxODk0NSBMMTAuMDg0NTQzNywyMS45NzYxMDExIEM5Ljc4NjM1NDU5LDIyLjI3NDMwNTMgOS40MTAzNjExNywyMi40ODI3MDUgOC45OTk0NDcwMywyMi41Nzc1MzEzIEwyLjkxODY0NDYzLDIzLjk4MDc5MzQgQzIuMzc4NTkwNjEsMjQuMTA1NDIxMiAxLjg5NDU3ODc1LDIzLjYyMTQwOTQgMi4wMTkyMDY2LDIzLjA4MTM1NTQgTDMuNDIyNDc3OTQsMTcuMDAwNTEyOSBDMy41MTcyOTU1NywxNi41ODk2MzY1IDMuNzI1NjY1ODksMTYuMjEzNjczNiA0LjAyMzgyNzYsMTUuOTE1NDk2OCBMMTYuNzE2NTAxOSwzLjIyMjE3OTkyIEMxOC4zOTAwNDE1LDEuNTQ4NTU1NTUgMjEuMTAzNDM0OSwxLjU0ODUxMDU5IDIyLjc3NzA5ODgsMy4yMjIwODk3OSBaIE0xNy43NzcxODg5LDQuMjgyODEzMjQgTDUuMDg0NTE0NjIsMTYuOTc2MTMwMiBDNC45ODUxMjczOCwxNy4wNzU1MjI0IDQuOTE1NjcwNjEsMTcuMjAwODQzNCA0Ljg4NDA2NDczLDE3LjMzNzgwMjIgTDMuNzUwNjI0OCwyMi4yNDkzNzUyIEw4LjY2MjE1Nzc3LDIxLjExNTk0NDUgQzguNzk5MTI5MTUsMjEuMDg0MzM1NyA4LjkyNDQ2MDI5LDIxLjAxNDg2OTIgOS4wMjM4NTY2NSwyMC45MTU0Njc4IEwyMS43MTY1MDE5LDguMjIyMTc5OTIgQzIyLjgwNDMwNjMsNy4xMzQzMjA0OSAyMi44MDQyODYyLDUuMzcwNjA0NzggMjEuNzE2NDU4OCw0LjI4Mjc3MDEgQzIwLjYyODU5MTQsMy4xOTQ5NjUwNyAxOC44NjQ5NTA2LDMuMTk0OTk2NTMgMTcuNzc3MTg4OSw0LjI4MjgxMzI0IFpcIiBpZD1cIvCfjqgtQ29sb3JcIj4gPC9wYXRoPiA8L2c+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJlZGl0b3JcIiBpZD1cImVkaXRvclwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiAjZWRpdG9yIChpbnB1dCk9XCJzdWJtaXRDb250ZW50KClcIiAoYmx1cik9XCJvbkJsdXIoKVwiIChrZXl1cCk9XCJvbkVkaXRvcktleVVwKCRldmVudClcIiAobW91c2V1cCk9XCJ1cGRhdGVDdXJyZW50Rm9ybWF0KClcIlxyXG4gICAgICAoZHJvcCk9XCJkcm9wKCRldmVudClcIiAoZHJhZ292ZXIpPVwiYWxsb3dEcm9wKCRldmVudClcIj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVEaWFsb2cgbGV0LWRpYWxvZ1JlZj1cImRpYWxvZ1JlZlwiPlxyXG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+Q2hvb3NlIFRhYmxlIFNpemU8L2gyPlxyXG4gICAgPG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2VsbCBvZiBncmlkOyBsZXQgaSA9IGluZGV4XCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdncmlkLWl0ZW0nOiB0cnVlLFxyXG4gICAgICAgICdoaWdobGlnaHRlZCc6IGkgJSA3IDwgY29scyAmJiBNYXRoLmZsb29yKGkgLyA3KSA8IHJvd3NcclxuICAgICAgfVwiIChtb3VzZWVudGVyKT1cInVwZGF0ZVByZXZpZXcoaSAlIDcgKyAxLCBNYXRoLmZsb29yKGkgLyA3KSArIDEpXCJcclxuICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVTZWxlY3Rpb24oaSAlIDcgKyAxLCBNYXRoLmZsb29yKGkgLyA3KSArIDEsIGRpYWxvZ1JlZilcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxwPnt7IHJvd3MgfX0geCB7eyBjb2xzIH19IDwvcD5cclxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjc2lnbmF0dXJlRGlhbG9nIGxldC1kaWFsb2dSZWY9XCJkaWFsb2dSZWZcIj5cclxuICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPkRyYXcgYSBTaWduYXR1cmU8L2gyPlxyXG4gICAgPHNpZ25hdHVyZS1wYWQgI3NpZ1BhZCBbb3B0aW9uc109XCJzaWduYXR1cmVQYWRPcHRpb25zXCIgY2xhc3M9XCJzaWduXCIgPjwvc2lnbmF0dXJlLXBhZD5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25cIiA+XHJcbiAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3JtYWxcIiA+IENsb3NlIDwvYnV0dG9uPiAtLT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3JtYWxcIiAoY2xpY2spPVwiY2xvc2VTaWduRGlhbG9nKGRpYWxvZ1JlZilcIiA+IENsb3NlIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInN1Ym1pdFwiIChjbGljayk9XCJzdWJtaXRTaWduRGlhbG9nKGRpYWxvZ1JlZilcIiA+IFN1Ym1pdCA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcbiJdfQ==