rapid-text-editor 1.0.28 → 1.0.30
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.
|
@@ -85,10 +85,16 @@ export class RapidTextEditorComponent {
|
|
|
85
85
|
}
|
|
86
86
|
const richTextEditorElement = this.elRef.nativeElement.querySelector('.rich-text-editor');
|
|
87
87
|
if (this.height) {
|
|
88
|
-
this.renderer.setStyle(richTextEditorElement, 'height',
|
|
88
|
+
this.renderer.setStyle(richTextEditorElement, 'height', 'auto');
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
this.renderer.setStyle(richTextEditorElement, 'height', '100%');
|
|
89
92
|
}
|
|
90
93
|
if (this.height) {
|
|
91
|
-
this.renderer.setStyle(dimensionElement, 'height',
|
|
94
|
+
this.renderer.setStyle(dimensionElement, 'height', 'auto');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
this.renderer.setStyle(dimensionElement, 'height', '100%');
|
|
92
98
|
}
|
|
93
99
|
const editorElement = this.elRef.nativeElement.querySelector('.editor');
|
|
94
100
|
if (this.height) {
|
|
@@ -808,7 +814,7 @@ export class RapidTextEditorComponent {
|
|
|
808
814
|
tableHTML += '<tr>';
|
|
809
815
|
for (let j = 0; j < colCount; j++) {
|
|
810
816
|
tableHTML += `<td style="border: 1px solid black; border-collapse: collapse; height: 2em; padding: .4em; "
|
|
811
|
-
role="textbox"
|
|
817
|
+
role="textbox"></td>`;
|
|
812
818
|
}
|
|
813
819
|
tableHTML += '</tr>';
|
|
814
820
|
}
|
|
@@ -836,7 +842,7 @@ export class RapidTextEditorComponent {
|
|
|
836
842
|
setCursorToFirstCell(table) {
|
|
837
843
|
const firstCell = table.querySelector('tr:first-child td:first-child, tr:first-child th:first-child');
|
|
838
844
|
if (firstCell) {
|
|
839
|
-
firstCell.setAttribute('contenteditable', 'true');
|
|
845
|
+
// firstCell.setAttribute('contenteditable', 'true');
|
|
840
846
|
firstCell.focus();
|
|
841
847
|
const newRange = document.createRange();
|
|
842
848
|
newRange.selectNodeContents(firstCell); // Select the contents of the cell
|
|
@@ -880,7 +886,7 @@ RapidTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
|
|
|
880
886
|
useExisting: forwardRef(() => RapidTextEditorComponent),
|
|
881
887
|
multi: true
|
|
882
888
|
}
|
|
883
|
-
], 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 *ngIf=\"editorOptions?.options?.textFormat ?? true\" 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 *ngIf=\"editorOptions?.options?.fontSize ?? true\" 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 *ngIf=\"editorOptions?.options?.bold ?? true\" (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 *ngIf=\"editorOptions?.options?.italic ?? true\" (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 *ngIf=\"editorOptions?.options?.underline ?? true\" (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 *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (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 *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (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 *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (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 *ngIf=\"editorOptions?.options?.alignRight ?? true\" (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 *ngIf=\"editorOptions?.options?.justify ?? true\" (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 *ngIf=\"editorOptions?.options?.bulletList ?? true\" (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 *ngIf=\"editorOptions?.options?.numberedList ?? true\" (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\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" 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\" accept=\".png,.jpg,.jpeg\" (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\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (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 *ngIf=\"editorOptions?.options?.tableHeader ?? true\" 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 *ngIf=\"editorOptions?.options?.signature ?? true\" (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\";.dimension{height:100%}.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri;height:100%}::ng-deep .editor{position:relative;min-height:300px;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px;height:auto}::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-bottom:1px solid #ccc;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{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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵ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: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
889
|
+
], 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 *ngIf=\"editorOptions?.options?.textFormat ?? true\" 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 *ngIf=\"editorOptions?.options?.fontSize ?? true\" 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 *ngIf=\"editorOptions?.options?.bold ?? true\" (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 *ngIf=\"editorOptions?.options?.italic ?? true\" (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 *ngIf=\"editorOptions?.options?.underline ?? true\" (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 *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (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 *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (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 *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (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 *ngIf=\"editorOptions?.options?.alignRight ?? true\" (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 *ngIf=\"editorOptions?.options?.justify ?? true\" (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 *ngIf=\"editorOptions?.options?.bulletList ?? true\" (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 *ngIf=\"editorOptions?.options?.numberedList ?? true\" (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\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" 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\" accept=\".png,.jpg,.jpeg\" (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\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (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=\"26px\" height=\"26px\" 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 *ngIf=\"editorOptions?.options?.tableHeader ?? true\" 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 *ngIf=\"editorOptions?.options?.signature ?? true\" (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\";.dimension{height:100%}.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri;height:100%}::ng-deep .editor{position:relative;min-height:300px;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px;height:auto}::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-bottom:1px solid #ccc;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{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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵ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: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
884
890
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorComponent, decorators: [{
|
|
885
891
|
type: Component,
|
|
886
892
|
args: [{ selector: 'rapid-text-editor', providers: [
|
|
@@ -889,7 +895,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
889
895
|
useExisting: forwardRef(() => RapidTextEditorComponent),
|
|
890
896
|
multi: true
|
|
891
897
|
}
|
|
892
|
-
], template: "<div class=\"dimension\" >\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" 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 *ngIf=\"editorOptions?.options?.fontSize ?? true\" 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 *ngIf=\"editorOptions?.options?.bold ?? true\" (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 *ngIf=\"editorOptions?.options?.italic ?? true\" (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 *ngIf=\"editorOptions?.options?.underline ?? true\" (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 *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (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 *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (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 *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (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 *ngIf=\"editorOptions?.options?.alignRight ?? true\" (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 *ngIf=\"editorOptions?.options?.justify ?? true\" (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 *ngIf=\"editorOptions?.options?.bulletList ?? true\" (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 *ngIf=\"editorOptions?.options?.numberedList ?? true\" (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\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" 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\" accept=\".png,.jpg,.jpeg\" (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\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (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 *ngIf=\"editorOptions?.options?.tableHeader ?? true\" 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 *ngIf=\"editorOptions?.options?.signature ?? true\" (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\";.dimension{height:100%}.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri;height:100%}::ng-deep .editor{position:relative;min-height:300px;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px;height:auto}::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-bottom:1px solid #ccc;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{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"] }]
|
|
898
|
+
], template: "<div class=\"dimension\" >\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" 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 *ngIf=\"editorOptions?.options?.fontSize ?? true\" 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 *ngIf=\"editorOptions?.options?.bold ?? true\" (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 *ngIf=\"editorOptions?.options?.italic ?? true\" (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 *ngIf=\"editorOptions?.options?.underline ?? true\" (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 *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (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 *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (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 *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (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 *ngIf=\"editorOptions?.options?.alignRight ?? true\" (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 *ngIf=\"editorOptions?.options?.justify ?? true\" (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 *ngIf=\"editorOptions?.options?.bulletList ?? true\" (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 *ngIf=\"editorOptions?.options?.numberedList ?? true\" (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\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" 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\" accept=\".png,.jpg,.jpeg\" (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\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (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=\"26px\" height=\"26px\" 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 *ngIf=\"editorOptions?.options?.tableHeader ?? true\" 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 *ngIf=\"editorOptions?.options?.signature ?? true\" (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\";.dimension{height:100%}.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri;height:100%}::ng-deep .editor{position:relative;min-height:300px;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px;height:auto}::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-bottom:1px solid #ccc;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{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"] }]
|
|
893
899
|
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { contentCapture: [{
|
|
894
900
|
type: Input
|
|
895
901
|
}], height: [{
|
|
@@ -916,4 +922,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
916
922
|
type: ViewChild,
|
|
917
923
|
args: ['sigPad']
|
|
918
924
|
}] } });
|
|
919
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yYXBpZC10ZXh0LWVkaXRvci9zcmMvbGliL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQTBCLFVBQVUsRUFBRSxZQUFZLEVBQXdELE1BQU0sZUFBZSxDQUFDO0FBRWhNLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBc0N6RSxNQUFNLE9BQU8sd0JBQXdCO0lBZ0RuQyxZQUFvQixNQUFpQixFQUMzQixFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsS0FBaUIsRUFDakIsT0FBMEI7UUFKaEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBbEQ1Qix5QkFBb0IsR0FBb0I7WUFDOUMsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSTtnQkFDZixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixVQUFVLEVBQUUsSUFBSTtn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Q3BCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxTQUFjO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQzs7c0hBMy9CVSx3QkFBd0I7MEdBQXhCLHdCQUF3QixpT0FUeEI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztZQUN2RCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsMGJDckNILHd5dUJBb0lBOzRGRDVGYSx3QkFBd0I7a0JBYnBDLFNBQVM7K0JBQ0UsbUJBQW1CLGFBR2xCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDOzRCQUN2RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjswTUEyQlEsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ2tCLGFBQWE7c0JBQXBDLEtBQUs7dUJBQUMsZUFBZTtnQkFDWixhQUFhO3NCQUF0QixNQUFNO2dCQUNnQyxNQUFNO3NCQUE1QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1gsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNNLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNQLFlBQVk7c0JBQWhDLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIE9uQ2hhbmdlcywgVGVtcGxhdGVSZWYsIGZvcndhcmRSZWYsIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBSZW5kZXJlcjJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpZ25hdHVyZVBhZCB9IGZyb20gJ2FuZ3VsYXIyLXNpZ25hdHVyZXBhZCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJERWRpdG9yT3B0aW9ucyB7XHJcbiAgb3B0aW9uczoge1xyXG4gICAgdGV4dEZvcm1hdD86IGJvb2xlYW4sXHJcbiAgICBmb250U2l6ZT86IGJvb2xlYW4sXHJcbiAgICBib2xkOiBib29sZWFuLFxyXG4gICAgaXRhbGljOiBib29sZWFuLFxyXG4gICAgdW5kZXJsaW5lOiBib29sZWFuLFxyXG4gICAgc3RyaWtldGhyb3VnaDogYm9vbGVhbixcclxuICAgIGFsaWduTGVmdDogYm9vbGVhbixcclxuICAgIGFsaWduUmlnaHQ6IGJvb2xlYW4sXHJcbiAgICBhbGlnbkNlbnRlcjogYm9vbGVhbixcclxuICAgIGp1c3RpZnk6IGJvb2xlYW4sXHJcbiAgICBidWxsZXRMaXN0OiBib29sZWFuLFxyXG4gICAgbnVtYmVyZWRMaXN0OiBib29sZWFuLFxyXG4gICAgaW1hZ2U/OiBib29sZWFuLFxyXG4gICAgdGFibGU/OiBib29sZWFuLCBcclxuICAgIHRhYmxlSGVhZGVyPzogYm9vbGVhbixcclxuICAgIHNpZ25hdHVyZT86IGJvb2xlYW5cclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmFwaWQtdGV4dC1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhcGlkVGV4dEVkaXRvckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG4gIFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmFwaWRUZXh0RWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgcHJpdmF0ZSBkZWZhdWx0RWRpdG9yT3B0aW9uczogUkRFZGl0b3JPcHRpb25zID0ge1xyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICB0ZXh0Rm9ybWF0OiB0cnVlLFxyXG4gICAgICBmb250U2l6ZTogdHJ1ZSxcclxuICAgICAgYm9sZDogdHJ1ZSxcclxuICAgICAgaXRhbGljOiB0cnVlLFxyXG4gICAgICB1bmRlcmxpbmU6IHRydWUsXHJcbiAgICAgIHN0cmlrZXRocm91Z2g6IHRydWUsXHJcbiAgICAgIGFsaWduTGVmdDogdHJ1ZSxcclxuICAgICAgYWxpZ25SaWdodDogdHJ1ZSxcclxuICAgICAgYWxpZ25DZW50ZXI6IHRydWUsXHJcbiAgICAgIGp1c3RpZnk6IHRydWUsXHJcbiAgICAgIGJ1bGxldExpc3Q6IHRydWUsXHJcbiAgICAgIG51bWJlcmVkTGlzdDogdHJ1ZSxcclxuICAgICAgaW1hZ2U6IHRydWUsXHJcbiAgICAgIHRhYmxlOiB0cnVlLFxyXG4gICAgICB0YWJsZUhlYWRlcjogdHJ1ZSxcclxuICAgICAgc2lnbmF0dXJlOiB0cnVlXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcblxyXG4gIEBJbnB1dCgpIGNvbnRlbnRDYXB0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSBcImF1dG9cIjtcclxuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gXCJhdXRvXCI7XHJcbiAgQElucHV0KCkgaWNvbkNvbG9yOiBzdHJpbmcgPSAnIzMzMzMzMydcclxuICBASW5wdXQoJ2VkaXRvck9wdGlvbnMnKSBlZGl0b3JPcHRpb25zITogUkRFZGl0b3JPcHRpb25zO1xyXG4gIEBPdXRwdXQoKSBjb250ZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQFZpZXdDaGlsZCgnZWRpdG9yJywgeyBzdGF0aWM6IHRydWUgfSkgZWRpdG9yITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJsZURpYWxvZycpIHRhYmxlRGlhbG9nITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzaWduYXR1cmVEaWFsb2cnKSBzaWduYXR1cmVEaWFsb2chOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NpZ1BhZCcpIHNpZ25hdHVyZVBhZCE6IFNpZ25hdHVyZVBhZDtcclxuXHJcbiAgcHJpdmF0ZSBlZGl0b3JDb250ZW50OiBzdHJpbmcgPSAnJztcclxuICByb3dzOiBudW1iZXIgPSAxO1xyXG4gIGNvbHM6IG51bWJlciA9IDE7XHJcbiAgZ3JpZCA9IEFycmF5KDQ5KS5maWxsKDApO1xyXG4gIE1hdGggPSBNYXRoO1xyXG4gIHVwbG9hZGVkSW1hZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIFxyXG4gIHNpZ25hdHVyZVBhZE9wdGlvbnMgPSB7XHJcbiAgICBtaW5XaWR0aDogMSxcclxuICAgIGNhbnZhc1dpZHRoOiA0MDAsXHJcbiAgICBjYW52YXNIZWlnaHQ6IDIwMFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIFxyXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgX2NoYW5nZTogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdCdWlsZCAtMScpXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbnRlbnRDYXB0dXJlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdDb250ZW50IGNhcHR1cmUgaXMgZW5hYmxlZC4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdDb250ZW50IGNhcHR1cmUgaXMgZGlzYWJsZWQuJyk7XHJcbiAgICB9XHJcbiAgICBpZighdGhpcy5lZGl0b3JPcHRpb25zKXtcclxuICAgICAgdGhpcy5lZGl0b3JPcHRpb25zID0gdGhpcy5kZWZhdWx0RWRpdG9yT3B0aW9ucztcclxuICAgIH1cclxuICAgIC8vIHRoaXMuaW5pdGlhbGl6ZUVkaXRvckNvbnRlbnQoJycpO1xyXG4gICAgLy8gdGhpcy5lbnN1cmVQYXJhZ3JhcGhBbmRGb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2hlaWdodCddIHx8IGNoYW5nZXNbJ3dpZHRoJ10pIHtcclxuICAgICAgdGhpcy5hcHBseURpbWVuc2lvbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlEaW1lbnNpb25zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGltZW5zaW9uRWxlbWVudCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGltZW5zaW9uJyk7XHJcbiAgICBpZiAodGhpcy53aWR0aCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRpbWVuc2lvbkVsZW1lbnQsICd3aWR0aCcsIHRoaXMud2lkdGgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmljaFRleHRFZGl0b3JFbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5yaWNoLXRleHQtZWRpdG9yJyk7XHJcbiAgICBpZih0aGlzLmhlaWdodCl7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocmljaFRleHRFZGl0b3JFbGVtZW50LCAnaGVpZ2h0JywgdGhpcy5oZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZGltZW5zaW9uRWxlbWVudCwgJ2hlaWdodCcsIHRoaXMuaGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpO1xyXG4gICAgaWYodGhpcy5oZWlnaHQpe1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVkaXRvckVsZW1lbnQsICdoZWlnaHQnLCB0aGlzLmhlaWdodCk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XHJcbiAgICBcclxuICAgIGlmIChlZGl0b3IgJiYgKGVkaXRvci5pbm5lckhUTUwudHJpbSgpID09PSBcIlwiIHx8IGVkaXRvci5pbm5lckhUTUwudHJpbSgpID09PSBcIjxicj5cIikpIHtcclxuICAgICAgLy8gZWRpdG9yLmZvY3VzKCk7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2V0U3RhcnQoZWRpdG9yLCAwKTtcclxuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPlxcdTIwMEI8L3A+J1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpKTtcclxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXHJcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcblxyXG4gICAgLy8gdGhpcy5pbml0aWFsaXplRWRpdG9yQ29udGVudCgnJyk7XHJcbiAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKSB7XHJcblxyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcclxuXHJcbiAgICAvLyBJZiBlZGl0b3IgaXMgZW1wdHkgb3IgZG9lc24ndCBoYXZlIGEgPHA+IGFzIHRoZSBsYXN0IGVsZW1lbnRcclxuICAgIGlmICghZWRpdG9yLmlubmVySFRNTC50cmltKCkpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGVkaXRvci5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgZmlyc3RDaGlsZC50YWdOYW1lICE9PSAnUCcpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gZWRpdG9yLmlubmVySFRNTDtcclxuICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj4ke2NvbnRlbnR9PC9wPmA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3AnKTtcclxuICAgIGlmIChwKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHApO1xyXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTsgXHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9jdXMgdGhlIGVkaXRvclxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRWRpdG9yQ29udGVudChkYXRhOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmICghZWRpdG9yKSByZXR1cm47XHJcblxyXG4gICAgLy8gSWYgY29udGVudCBoYXMgbm8gSFRNTCB0YWdzLCB3cmFwIHdpdGggPHA+XHJcbiAgICBjb25zdCBoYXNIdG1sVGFncyA9IC88W14+XSs+Ly50ZXN0KGRhdGEpO1xyXG4gICAgaWYgKCFoYXNIdG1sVGFncykge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+JHtkYXRhfTwvcD5gO1xyXG4gICAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gZGF0YTtcclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcblxyXG4gIG9uQ29udGVudENoYW5nZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbnRlbnRDYXB0dXJlKSB7XHJcbiAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XHJcbiAgICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgICB0aGlzLmVkaXRvckNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXB0dXJlZCBDb250ZW50IChDaGlsZCk6JywgdGhpcy5lZGl0b3JDb250ZW50KTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdCh0aGlzLmVkaXRvckNvbnRlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29udGVudDtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkSGVhZDogYW55ID0gJ1AnO1xyXG4gIHNlbGVjdGVkRm9udDogYW55ID0gJzE0JztcclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09ICc8YnI+JyB8fCB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PSAnJykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSGVhZCA9ICdQJztcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvbnQgPSAnMTQnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgd3JpdGVWYWx1ZShjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudCB8fCAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKCkge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIC8vIHNldEZvbnRTaXplKGV2ZW50OiBFdmVudCkge1xyXG4gIC8vICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xyXG4gIC8vICAgY29uc3Qgc2l6ZSA9IHNlbGVjdC52YWx1ZTtcclxuICAvLyAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAvLyAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcbiAgLy8gICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gIC8vICAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcclxuICAvLyAgICAgY29uc3QgcGFyZW50ID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ7XHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICBwYXJlbnQgJiZcclxuICAvLyAgICAgICBwYXJlbnQuY2xhc3NMaXN0ICYmXHJcbiAgLy8gICAgICAgQXJyYXkuZnJvbShwYXJlbnQuY2xhc3NMaXN0KS5zb21lKChjOiBzdHJpbmcpID0+IGMuc3RhcnRzV2l0aCgnZnMtJykpXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIHBhcmVudC5zdHlsZS5mb250U2l6ZSA9IGAke3NpemV9cHhgO1xyXG4gIC8vICAgICAgIHBhcmVudC5jbGFzc05hbWUgPSBgZnMtJHtzaXplfWA7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAvLyAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gYCR7c2l6ZX1weGA7XHJcbiAgLy8gICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgLy8gICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgZWxzZSB7XHJcbiAgLy8gICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgLy8gICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSBgJHtzaXplfXB4YDtcclxuICAvLyAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgLy8gICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKSk7IC8vIHplcm8td2lkdGggc3BhY2VcclxuICAvLyAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcclxuICAvLyAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gIC8vICAgICBuZXdSYW5nZS5zZXRTdGFydChzcGFuLmZpcnN0Q2hpbGQgYXMgTm9kZSwgMSk7XHJcbiAgLy8gICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gIC8vICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgLy8gICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBvbkVkaXRvcktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBoYW5kbGUgRW50ZXIgb3IgYXJyb3cga2V5c1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnQmFja1NwYWNlJyApIHtcclxuICAgICAgdGhpcy51cGRhdGVDdXJyZW50Rm9ybWF0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDdXJyZW50Rm9ybWF0KCkge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGU7XHJcbiAgICBpZiAoIWFuY2hvck5vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgcGFyZW50RWxlbSA9IGFuY2hvck5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXHJcbiAgICAgID8gKGFuY2hvck5vZGUgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgIDogKGFuY2hvck5vZGUucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XHJcblxyXG4gICAgaWYgKCFwYXJlbnRFbGVtKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRldGVjdGVkSGVhZCA9ICdQJztcclxuICAgIGxldCBkZXRlY3RlZEZvbnQgPSAnMTQnOyAvLyBkZWZhdWx0XHJcblxyXG4gICAgLy8gVHJhdmVyc2UgdXB3YXJkIHRvIGRldGVjdCBmb3JtYXR0aW5nXHJcbiAgICB3aGlsZSAocGFyZW50RWxlbSAmJiBwYXJlbnRFbGVtICE9PSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRhZyA9IHBhcmVudEVsZW0udGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgLy8gRGV0ZWN0IGhlYWRpbmdcclxuICAgICAgaWYgKFsnSDEnLCAnSDInLCAnSDMnLCAnSDQnLCAnSDUnLCAnSDYnLCAnUCddLmluY2x1ZGVzKHRhZykpIHtcclxuICAgICAgICBkZXRlY3RlZEhlYWQgPSB0YWc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERldGVjdCBpbmxpbmUgZm9udC1zaXplIGZyb20gc3R5bGUgb3IgY2xhc3NcclxuICAgICAgY29uc3QgZm9udFNpemUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtKS5mb250U2l6ZTtcclxuICAgICAgaWYgKGZvbnRTaXplKSB7XHJcbiAgICAgICAgY29uc3QgcHggPSBwYXJzZUludChmb250U2l6ZS5yZXBsYWNlKCdweCcsICcnKSwgMTApO1xyXG4gICAgICAgIGlmICghaXNOYU4ocHgpKSB7XHJcbiAgICAgICAgICBkZXRlY3RlZEZvbnQgPSBweC50b1N0cmluZygpO1xyXG4gICAgICAgICAgYnJlYWs7IC8vIGZvdW5kIHRoZSBjbG9zZXN0IHZhbGlkIGZvbnQgc2l6ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcGFyZW50RWxlbSA9IHBhcmVudEVsZW0ucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgYm91bmQgcHJvcGVydGllcyBpZiBjaGFuZ2VkXHJcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRIZWFkICE9PSBkZXRlY3RlZEhlYWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEhlYWQgPSBkZXRlY3RlZEhlYWQ7XHJcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb250ICE9PSBkZXRlY3RlZEZvbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvbnQgPSBkZXRlY3RlZEZvbnQ7XHJcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0Rm9udFNpemUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICBjb25zdCBzaXplID0gc2VsZWN0LnZhbHVlO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuXHJcbiAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAvLyBOb24tZW1wdHkgc2VsZWN0aW9uXHJcbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIHNwYW4uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsIGAke3NpemV9cHhgLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJhbmdlLnN1cnJvdW5kQ29udGVudHMoc3Bhbik7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIElmIHNlbGVjdGlvbiBzcGFucyBtdWx0aXBsZSBlbGVtZW50cywgdXNlIGV4ZWNDb21tYW5kIGZhbGxiYWNrXHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvbnRTaXplJywgZmFsc2UsICc3Jyk7IC8vIHRlbXBvcmFyeSBsYXJnZXN0IHNpemVcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdmb250W3NpemU9XCI3XCJdJykuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3NpemUnKTtcclxuICAgICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDb2xsYXBzZWQgc2VsZWN0aW9uIChubyB0ZXh0IHNlbGVjdGVkKVxyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBzcGFuLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpKTsgLy8gemVyby13aWR0aCBzcGFjZVxyXG4gICAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG5cclxuICAgICAgLy8gTW92ZSBjdXJzb3IgaW5zaWRlIHNwYW5cclxuICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICBuZXdSYW5nZS5zZXRTdGFydChzcGFuLmZpcnN0Q2hpbGQgYXMgTm9kZSwgMSk7XHJcbiAgICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcclxuICAgIHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpO1xyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldEhlYWRpbmcoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICBjb25zdCB0YWcgPSBzZWxlY3QudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG5ld0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XHJcblxyXG4gICAgc3dpdGNoICh0YWcpIHtcclxuICAgICAgY2FzZSAnSDEnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICczMnB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0gyJzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMjhweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICdib2xkJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdIMyc6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzI0cHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnYm9sZCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDQnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcyMHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g1JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMThweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICc2MDAnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g2JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMTZweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICc2MDAnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1AnOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcxNHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ25vcm1hbCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcclxuICAgIGlmIChzZWxlY3RlZFRleHQpIHtcclxuICAgICAgbmV3RWxlbS50ZXh0Q29udGVudCA9IHNlbGVjdGVkVGV4dDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0VsZW0uaW5uZXJIVE1MID0gJ1xcdTIwMEInOyAvLyBLZWVwcyBjdXJzb3IgdmlzaWJsZVxyXG4gICAgfVxyXG5cclxuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XHJcbiAgICByYW5nZS5pbnNlcnROb2RlKG5ld0VsZW0pO1xyXG5cclxuICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG5ld1JhbmdlLnNldFN0YXJ0KG5ld0VsZW0sIG5ld0VsZW0uY2hpbGROb2Rlcy5sZW5ndGgpO1xyXG4gICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG5cclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG5cclxuICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KTtcclxuICAgIGVkaXRvci5kaXNwYXRjaEV2ZW50KGlucHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvcm1hdChjb21tYW5kOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCAnJyk7XHJcbiAgfVxyXG5cclxuICAvL0ltYWdlIFNlY3Rpb25cclxuXHJcbiAgYWxsb3dEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBpbWFnZSBkcmFnIHN0YXJ0XHJcbiAgZHJhZyhldmVudDogRHJhZ0V2ZW50LCBpbWFnZVVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBldmVudC5kYXRhVHJhbnNmZXI/LnNldERhdGEoXCJ0ZXh0XCIsIGltYWdlVXJsKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBkcm9wIGV2ZW50IGluIHRoZSBlZGl0b3JcclxuICBkcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBiaW5kSW1hZ2VDbGlja0V2ZW50cygpIHtcclxuICAvLyAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAvLyAgIGNvbnN0IGltYWdlcyA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xyXG5cclxuICAvLyAgIGltYWdlcy5mb3JFYWNoKGltZyA9PiB7XHJcbiAgLy8gICAgIC8vIEF2b2lkIGRvdWJsZS1iaW5kaW5nXHJcbiAgLy8gICAgIGltZy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbWFnZUNsaWNrIGFzIGFueSk7XHJcbiAgLy8gICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbWFnZUNsaWNrLmJpbmQodGhpcykpO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBvbkltYWdlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAvLyAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIC8vICAgY29uc3QgaW1nID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgLy8gICB0aGlzLmVuYWJsZUltYWdlUmVzaXplKGltZyk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBlbmFibGVJbWFnZVJlc2l6ZShpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAvLyAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgcmVzaXplIGhhbmRsZXMgZmlyc3RcclxuICAvLyAgIHRoaXMucmVtb3ZlSW1hZ2VSZXNpemVIYW5kbGVzKCk7XHJcblxyXG4gIC8vICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIC8vICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCdpbWFnZS1yZXNpemUtd3JhcHBlcicpO1xyXG4gIC8vICAgaW1nLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZSh3cmFwcGVyLCBpbWcpO1xyXG4gIC8vICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xyXG5cclxuICAvLyAgIC8vIEFkZCByZXNpemFibGUgaGFuZGxlc1xyXG4gIC8vICAgY29uc3QgcmVzaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIC8vICAgcmVzaXplci5jbGFzc0xpc3QuYWRkKCdyZXNpemVyJyk7XHJcbiAgLy8gICB3cmFwcGVyLmFwcGVuZENoaWxkKHJlc2l6ZXIpO1xyXG5cclxuICAvLyAgIC8vIEhhbmRsZSByZXNpemluZyBsb2dpY1xyXG4gIC8vICAgbGV0IHN0YXJ0WCA9IDAsIHN0YXJ0WSA9IDAsIHN0YXJ0V2lkdGggPSAwLCBzdGFydEhlaWdodCA9IDA7XHJcblxyXG4gIC8vICAgcmVzaXplci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZTogTW91c2VFdmVudCkgPT4ge1xyXG4gIC8vICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgLy8gICAgIHN0YXJ0WCA9IGUuY2xpZW50WDtcclxuICAvLyAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xyXG4gIC8vICAgICBzdGFydFdpZHRoID0gaW1nLndpZHRoO1xyXG4gIC8vICAgICBzdGFydEhlaWdodCA9IGltZy5oZWlnaHQ7XHJcblxyXG4gIC8vICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgLy8gICAgICAgY29uc3QgbmV3V2lkdGggPSBzdGFydFdpZHRoICsgKGUuY2xpZW50WCAtIHN0YXJ0WCk7XHJcbiAgLy8gICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gc3RhcnRIZWlnaHQgKyAoZS5jbGllbnRZIC0gc3RhcnRZKTtcclxuICAvLyAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XHJcbiAgLy8gICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XHJcbiAgLy8gICAgIH07XHJcblxyXG4gIC8vICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgLy8gICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gIC8vICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gIC8vICAgICB9O1xyXG5cclxuICAvLyAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gIC8vICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcmVtb3ZlSW1hZ2VSZXNpemVIYW5kbGVzKCkge1xyXG4gIC8vICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1yZXNpemUtd3JhcHBlcicpO1xyXG4gIC8vICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgLy8gICAgIGNvbnN0IGltZyA9IGV4aXN0aW5nLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xyXG4gIC8vICAgICBpZiAoaW1nKSB7XHJcbiAgLy8gICAgICAgZXhpc3RpbmcucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGltZywgZXhpc3RpbmcpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGV4aXN0aW5nLnJlbW92ZSgpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcblxyXG4gIHJlbW92ZUltYWdlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMudXBsb2FkZWRJbWFnZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIGluc2VydEltYWdlSW5FZGl0b3IoaW1hZ2VVcmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCFlZGl0b3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGltYWdlIGVsZW1lbnRcclxuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgaW1nLnNyYyA9IGltYWdlVXJsO1xyXG4gICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xyXG4gICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgaW1nLnN0eWxlLndpZHRoID0gJzMwMHB4JztcclxuICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgd3JhcHBlciBhcm91bmQgdGhlIGltYWdlIHRvIGFsbG93IHJlc2l6aW5nXHJcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB3cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAgLy8gRW5zdXJlcyB0aGUgd3JhcHBlciBvbmx5IHRha2VzIHVwIHNwYWNlIGZvciB0aGUgaW1hZ2VcclxuICAgIHdyYXBwZXIuc3R5bGUubWFyZ2luID0gJzEwcHgnO1xyXG4gICAgd3JhcHBlci5zdHlsZS5wYWRkaW5nID0gJzVweCc7XHJcbiAgICB3cmFwcGVyLnN0eWxlLmJvcmRlciA9ICcxcHggZGFzaGVkICNjY2MnOyAvLyBPcHRpb25hbCBib3JkZXIgdG8gaW5kaWNhdGUgdGhlIGltYWdlIGFyZWFcclxuXHJcbiAgICAvLyBBcHBlbmQgdGhlIGltYWdlIHRvIHRoZSB3cmFwcGVyXHJcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcblxyXG4gICAgLy8gQXBwZW5kIHRoZSB3cmFwcGVyIHRvIHRoZSBlZGl0b3JcclxuICAgIGVkaXRvci5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcclxuXHJcbiAgICAvLyBNYWtlIHRoZSBpbWFnZSByZXNpemFibGVcclxuICAgIHRoaXMubWFrZUltYWdlUmVzaXphYmxlKHdyYXBwZXIsIGltZyk7XHJcblxyXG4gICAgLy8gT3B0aW9uYWxseSwgYWRkIGEgdGV4dCBub2RlIHRvIG1haW50YWluIGN1cnNvciBwb3NpdGlvbiBhZnRlciBhcHBlbmRpbmcgdGhlIGltYWdlXHJcbiAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBCJyk7ICAvLyBJbnZpc2libGUgY2hhcmFjdGVyIHRvIG1haW50YWluIHBvc2l0aW9uXHJcbiAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIod3JhcHBlcik7XHJcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VJbWFnZVJlc2l6YWJsZSh3cmFwcGVyOiBIVE1MRWxlbWVudCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KTogdm9pZCB7XHJcbiAgICBsZXQgaXNSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgbGV0IHN0YXJ0WCA9IDA7XHJcbiAgICBsZXQgc3RhcnRZID0gMDtcclxuICAgIGxldCBzdGFydFdpZHRoID0gMDtcclxuICAgIGxldCBzdGFydEhlaWdodCA9IDA7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHJlc2l6ZSBoYW5kbGVzIGZvciB0aGUgaW1hZ2VcclxuICAgIGNvbnN0IGNyZWF0ZVJlc2l6ZUhhbmRsZSA9IChcclxuICAgICAgY3Vyc29yOiBzdHJpbmcsXHJcbiAgICAgIHBvc2l0aW9uU3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxyXG4gICAgICByZXNpemVDYWxsYmFjazogKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcikgPT4gdm9pZFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhhbmRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICBoYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5oZWlnaHQgPSAnMTBweCc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwgMCwgMCwgMC41KSc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oaGFuZGxlLnN0eWxlLCBwb3NpdGlvblN0eWxlcyk7XHJcblxyXG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHJlc2l6ZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgc3RhcnRYID0gcmVzaXplRXZlbnQuY2xpZW50WDtcclxuICAgICAgICBzdGFydFkgPSByZXNpemVFdmVudC5jbGllbnRZO1xyXG4gICAgICAgIHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgc3RhcnRIZWlnaHQgPSBpbWcub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAgIGlmIChpc1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xyXG4gICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBtb3ZlRXZlbnQuY2xpZW50WSAtIHN0YXJ0WTtcclxuICAgICAgICAgICAgcmVzaXplQ2FsbGJhY2soZGVsdGFYLCBkZWx0YVkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcclxuICAgICAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGhhbmRsZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZCByZXNpemluZyBoYW5kbGVzIHRvIHRoZSB3cmFwcGVyIGZvciB0aGUgaW1hZ2VcclxuICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgJ253LXJlc2l6ZScsXHJcbiAgICAgIHsgdG9wOiAnLTVweCcsIGxlZnQ6ICctNXB4JyB9LFxyXG4gICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoIC0gZGVsdGFYfXB4YDtcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgLSBkZWx0YVl9cHhgO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAnc2UtcmVzaXplJyxcclxuICAgICAgeyBib3R0b206ICctNXB4JywgcmlnaHQ6ICctNXB4JyB9LFxyXG4gICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoICsgZGVsdGFYfXB4YDtcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgKyBkZWx0YVl9cHhgO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaW5zZXJ0SW1hZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0Py5maWxlcykge1xyXG4gICAgICBBcnJheS5mcm9tKGlucHV0LmZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGltYWdlVXJsID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlcy5wdXNoKGltYWdlVXJsKTsgLy8gU3RvcmUgaW1hZ2UgVVJMIGluIHRoZSBhcnJheVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydEltYWdlKGZpbGU6IEZpbGUpOiBQcm9taXNlPEZpbGU+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmIChmaWxlLnR5cGUgIT09ICdpbWFnZS9wbmcnKSB7XHJcbiAgICAgICAgcmVzb2x2ZShmaWxlKTsgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBmaWxlIGlmIGl0J3Mgbm90IGEgUE5HXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgaW1nLnNyYyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuXHJcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgICAgaWYgKCFjdHgpIHtcclxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBjYW52YXMgY29udGV4dCcpKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcclxuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICAgIGNhbnZhcy50b0Jsb2IoXHJcbiAgICAgICAgICAgIGJsb2IgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChibG9iKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqcGdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlLm5hbWUucmVwbGFjZSgvXFwucG5nJC8sICcuanBnJyksIHsgdHlwZTogJ2ltYWdlL2pwZWcnIH0pO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShqcGdGaWxlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgUE5HIHRvIEpQRycpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdpbWFnZS9qcGVnJyxcclxuICAgICAgICAgICAgMC45NSAvLyBRdWFsaXR5IGZhY3RvciBmb3IgSlBFR1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZScpKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgaW5zZXJ0SW1hZ2VUb0VkaXRvcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgbGV0IGZpbGVUeXBlcyA9IFsnaW1hZ2UvanBlZycsICdpbWFnZS9wbmcnLCAnaW1hZ2UvanBnJ107XHJcblxyXG4gICAgaWYoIWZpbGVUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoIWVkaXRvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgd3JhcHBlci5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyID0gJzFweCBkYXNoZWQgI2NjYyc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5tYXJnaW4gPSAnMTBweCc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5wYWRkaW5nID0gJzVweCc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5ib3JkZXJCbG9ja0NvbG9yID0gJyMwMDdCRkYnO1xyXG4gICAgICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zcmMgPSBpbWFnZVVybDtcclxuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9ICczMDBweCc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcbiAgICAgICAgbGV0IGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc3RhcnRYID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRZID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRXaWR0aCA9IDA7XHJcbiAgICAgICAgbGV0IHN0YXJ0SGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlUmVzaXplSGFuZGxlID0gKFxyXG4gICAgICAgICAgY3Vyc29yOiBzdHJpbmcsXHJcbiAgICAgICAgICBwb3NpdGlvblN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcclxuICAgICAgICAgIHJlc2l6ZUNhbGxiYWNrOiAoZGVsdGFYOiBudW1iZXIsIGRlbHRhWTogbnVtYmVyKSA9PiB2b2lkXHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzEwcHgnO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLmJhY2tncm91bmQgPSAncmdiYSgwLCAwLCAwLCAwLjUpJztcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGhhbmRsZS5zdHlsZSwgcG9zaXRpb25TdHlsZXMpO1xyXG5cclxuICAgICAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAocmVzaXplRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHN0YXJ0WCA9IHJlc2l6ZUV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgICAgIHN0YXJ0WSA9IHJlc2l6ZUV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIHN0YXJ0SGVpZ2h0ID0gaW1nLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpc1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhWSA9IG1vdmVFdmVudC5jbGllbnRZIC0gc3RhcnRZO1xyXG4gICAgICAgICAgICAgICAgcmVzaXplQ2FsbGJhY2soZGVsdGFYLCBkZWx0YVkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoYW5kbGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAgICAgJ253LXJlc2l6ZScsXHJcbiAgICAgICAgICB7IHRvcDogJy01cHgnLCBsZWZ0OiAnLTVweCcgfSxcclxuICAgICAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoIC0gZGVsdGFYfXB4YDtcclxuICAgICAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0IC0gZGVsdGFZfXB4YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgICAgICdzZS1yZXNpemUnLFxyXG4gICAgICAgICAgeyBib3R0b206ICctNXB4JywgcmlnaHQ6ICctNXB4JyB9LFxyXG4gICAgICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XHJcbiAgICAgICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggKyBkZWx0YVh9cHhgO1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgKyBkZWx0YVl9cHhgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xyXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKTtcclxuICAgICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKHdyYXBwZXIpO1xyXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuVGFibGVEaWFsb2coZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5zZXJ0TWFya2VyKCk7XHJcbiAgICB0aGlzLnJvd3MgPSAxO1xyXG4gICAgdGhpcy5jb2xzID0gMTtcclxuXHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMudGFibGVEaWFsb2csIHtcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICB0b3A6IGAke2V2ZW50LmNsaWVudFl9cHhgLFxyXG4gICAgICAgIGxlZnQ6IGAke2V2ZW50LmNsaWVudFh9cHhgLFxyXG4gICAgICB9LFxyXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5pbnNlcnRUYWJsZShyZXN1bHQucm93cywgcmVzdWx0LmNvbHMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5TaWduYXR1cmVEaWFsb2coZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5zZXJ0TWFya2VyKCk7XHJcblxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLnNpZ25hdHVyZURpYWxvZywge1xyXG4gICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgIC8vIHRvcDogYCR7ZXZlbnQuY2xpZW50WX1weGAsXHJcbiAgICAgICAgLy8gbGVmdDogYCR7ZXZlbnQuY2xpZW50WH1weGAsXHJcbiAgICAgICAgdG9wOiAnMzBweCdcclxuICAgICAgfSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZihyZXN1bHQpXHJcbiAgICAgICAgLy8gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKz0gYDxpbWcgc3JjPSR7cmVzdWx0fSBhbHQ9J1NpZ25hdHVyZScgLz5gXHJcbiAgICAgIHRoaXMuaW5zZXJ0SW1hZ2VJbkVkaXRvcihyZXN1bHQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQcmV2aWV3KGNvbHM6IG51bWJlciwgcm93czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmNvbHMgPSBjb2xzO1xyXG4gICAgdGhpcy5yb3dzID0gcm93cztcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGlvbihjb2xJbmRleDogbnVtYmVyLCByb3dJbmRleDogbnVtYmVyLCBkaWFsb2dSZWY6IGFueSkge1xyXG4gICAgdGhpcy5jb2xzID0gY29sSW5kZXg7XHJcbiAgICB0aGlzLnJvd3MgPSByb3dJbmRleDtcclxuICAgIGRpYWxvZ1JlZi5jbG9zZSh7IHJvd3M6IHRoaXMucm93cywgY29sczogdGhpcy5jb2xzIH0pOyAvLyBDbG9zZSBkaWFsb2cgd2l0aCBzZWxlY3Rpb25cclxuICB9XHJcblxyXG4gIG1ha2VGaXJzdFJvd0hlYWRlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAvLyBDaGVjayBpZiBzZWxlY3Rpb24gaXMgaW5zaWRlIHRoZSBlZGl0b3JcclxuICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbkluc2lkZUVkaXRvcihlZGl0b3IsIHNlbGVjdGlvbikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gRmluZCB0aGUgY2xvc2VzdCB0YWJsZSB0byB0aGUgc2VsZWN0aW9uXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZmluZENsb3Nlc3RUYWJsZShzZWxlY3RlZE5vZGUpO1xyXG4gICAgaWYgKCF0YWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBDb252ZXJ0IHRoZSBmaXJzdCByb3cgY2VsbHMgdG8gaGVhZGVyIGNlbGxzXHJcbiAgICBjb25zdCBmaXJzdFJvdyA9IHRhYmxlLnJvd3NbMF07XHJcbiAgICBpZiAoZmlyc3RSb3cpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXJzdFJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNlbGwgPSBmaXJzdFJvdy5jZWxsc1tpXTtcclxuICAgICAgICBjb25zdCB0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XHJcbiAgICAgICAgdGguaW5uZXJIVE1MID0gY2VsbC5pbm5lckhUTUw7XHJcbiAgICAgICAgdGguc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgdGguc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNGMUYxRjAnO1xyXG4gICAgICAgIHRoLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgYmxhY2snO1xyXG4gICAgICAgIHRoLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gJ2NvbGxhcHNlJztcclxuICAgICAgICB0aC5zdHlsZS5wYWRkaW5nID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2VsbCkucGFkZGluZzsgLy8gUmV0YWluIHBhZGRpbmdcclxuICAgICAgICB0aC5zdHlsZS53aWR0aCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLndpZHRoOyAvLyBSZXRhaW4gd2lkdGhcclxuICAgICAgICB0aC5zdHlsZS5oZWlnaHQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS5oZWlnaHQ7XHJcbiAgICAgICAgZmlyc3RSb3cucmVwbGFjZUNoaWxkKHRoLCBjZWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDbG9zZXN0VGFibGUobm9kZTogTm9kZSk6IEhUTUxUYWJsZUVsZW1lbnQgfCBudWxsIHtcclxuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGRvY3VtZW50KSB7XHJcbiAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnVEFCTEUnKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgYXMgSFRNTFRhYmxlRWxlbWVudDtcclxuICAgICAgfVxyXG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRNYXJrZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNsb25lUmFuZ2UoKTtcclxuICAgICAgY29uc3QgbWFya2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBtYXJrZXIuaWQgPSAndGFibGUtbWFya2VyJztcclxuICAgICAgbWFya2VyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIHJhbmdlLmluc2VydE5vZGUobWFya2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluc2VydFRhYmxlKHJvd3M6IHN0cmluZywgY29sczogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByb3dDb3VudCA9IHBhcnNlSW50KHJvd3MsIDEwKTtcclxuICAgIGNvbnN0IGNvbENvdW50ID0gcGFyc2VJbnQoY29scywgMTApO1xyXG5cclxuICAgIGlmIChpc05hTihyb3dDb3VudCkgfHwgaXNOYU4oY29sQ291bnQpIHx8IHJvd0NvdW50IDwgMSB8fCBjb2xDb3VudCA8IDEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBtYXJrZXIgPSBlZGl0b3IucXVlcnlTZWxlY3RvcignI3RhYmxlLW1hcmtlcicpO1xyXG5cclxuICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRoaXMuY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0ZW1wRGl2LmlubmVySFRNTCA9IHRhYmxlSFRNTDtcclxuICAgIGNvbnN0IHRhYmxlID0gdGVtcERpdi5maXJzdEVsZW1lbnRDaGlsZDtcclxuXHJcbiAgICBpZiAobWFya2VyICYmIHRhYmxlKSB7XHJcbiAgICAgIG1hcmtlci5wYXJlbnROb2RlIS5yZXBsYWNlQ2hpbGQodGFibGUsIG1hcmtlcik7XHJcbiAgICAgIHRoaXMuc2V0Q3Vyc29yVG9GaXJzdENlbGwodGFibGUgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgICBlZGl0b3IuZm9jdXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZhbGxiYWNrIGlmIG5vIG1hcmtlciwganVzdCBhcHBlbmRcclxuICAgICAgdGhpcy5hcHBlbmRUYWJsZShlZGl0b3IsIHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudDogbnVtYmVyLCBjb2xDb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCB0YWJsZUhUTUwgPSAnPHRhYmxlIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyB3aWR0aDogMTAwJTsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XCI+JztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xyXG4gICAgICB0YWJsZUhUTUwgKz0gJzx0cj4nO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbENvdW50OyBqKyspIHtcclxuICAgICAgICB0YWJsZUhUTUwgKz0gYDx0ZCBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBoZWlnaHQ6IDJlbTsgcGFkZGluZzogLjRlbTsgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRleHRib3hcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+PC90ZD5gO1xyXG4gICAgICB9XHJcbiAgICAgIHRhYmxlSFRNTCArPSAnPC90cj4nO1xyXG4gICAgfVxyXG4gICAgdGFibGVIVE1MICs9ICc8L3RhYmxlPic7XHJcbiAgICByZXR1cm4gdGFibGVIVE1MO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRUYWJsZShlZGl0b3I6IEhUTUxFbGVtZW50LCByb3dDb3VudDogbnVtYmVyLCBjb2xDb3VudDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCB0YWJsZUhUTUwgPSB0aGlzLmNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudCwgY29sQ291bnQpO1xyXG4gICAgZWRpdG9yLmlubmVySFRNTCArPSB0YWJsZUhUTUw7XHJcbiAgICBjb25zdCBsYXN0SW5zZXJ0ZWRUYWJsZSA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCd0YWJsZTpsYXN0LWNoaWxkJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB0aGlzLnNldEN1cnNvclRvRmlyc3RDZWxsKGxhc3RJbnNlcnRlZFRhYmxlKTtcclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1NlbGVjdGlvbkluc2lkZUVkaXRvcihlZGl0b3I6IEhUTUxFbGVtZW50LCBzZWxlY3Rpb246IFNlbGVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgbGV0IG5vZGUgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgIHdoaWxlIChub2RlKSB7XHJcbiAgICAgIGlmIChub2RlID09PSBlZGl0b3IpIHJldHVybiB0cnVlO1xyXG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q3Vyc29yVG9GaXJzdENlbGwodGFibGU6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaXJzdENlbGwgPSB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChmaXJzdENlbGwpIHtcclxuICAgICAgZmlyc3RDZWxsLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ3RydWUnKTtcclxuICAgICAgZmlyc3RDZWxsLmZvY3VzKCk7XHJcbiAgICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgbmV3UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGZpcnN0Q2VsbCk7IC8vIFNlbGVjdCB0aGUgY29udGVudHMgb2YgdGhlIGNlbGxcclxuICAgICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7IC8vIENvbGxhcHNlIHRvIHRoZSBzdGFydFxyXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5zZXJ0UGFnZUJyZWFrKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFnZUJyZWFrID0gYDxkaXYgc3R5bGU9XCJwYWdlLWJyZWFrLWFmdGVyOiBhbHdheXM7XCI+PGJyIC8+PC9kaXY+YDtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHBhZ2VCcmVhayk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRDb250ZW50KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAgIGlmKCFlZGl0b3IpIHJldHVybjtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MOyAvLyBHZXQgdGhlIEhUTUwgY29udGVudCBmcm9tIHRoZSBlZGl0b3JcclxuICAgIGNvbnN0IHBsYWluVGV4dENvbnRlbnQgPSBlZGl0b3IuaW5uZXJUZXh0OyAvLyBPcHRpb25hbGx5LCBnZXQgcGxhaW4gdGV4dCBjb250ZW50XHJcbiAgICBpZiAoIWVkaXRvci5pbm5lckhUTUwudHJpbSgpKSB7XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPlxcdTIwMEI8L3A+JztcclxuICAgICAgLy8gdGhpcy5lbnN1cmVQYXJhZ3JhcGhBbmRGb2N1cygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcclxuICB9XHJcblxyXG4gIC8vU2lnbmF0dXJlXHJcblxyXG4gIGNsb3NlU2lnbkRpYWxvZyhkaWFsb2dSZWY6IGFueSl7XHJcbiAgICBkaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcbiAgc3VibWl0U2lnbkRpYWxvZyhkaWFsb2dSZWY6IGFueSl7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5zaWduYXR1cmVQYWQudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcclxuICAgIGRpYWxvZ1JlZi5jbG9zZShkYXRhKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImRpbWVuc2lvblwiID5cclxuICA8ZGl2IGNsYXNzPVwicmljaC10ZXh0LWVkaXRvclwiPlxyXG4gICAgPCEtLSBUb29sYmFyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2xiYXJcIj5cclxuICAgICAgPHNlbGVjdCAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnRleHRGb3JtYXQgPz8gdHJ1ZVwiIGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSGVhZFwiIChjaGFuZ2UpPVwic2V0SGVhZGluZygkZXZlbnQpXCI+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweCAhaW1wb3J0YW50O1wiPlBhcmFncmFwaDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJIMVwiIHN0eWxlPVwiZm9udC1zaXplOiAzMnB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XCI+SDE8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDJcIiBzdHlsZT1cImZvbnQtc2l6ZTogMjhweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1wiPkgyPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgzXCIgc3R5bGU9XCJmb250LXNpemU6IDI0cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5IMzwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINFwiIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XCI+SDQ8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XCI+SDU8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDZcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XCI+SDY8L29wdGlvbj5cclxuICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDxzZWxlY3QgKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5mb250U2l6ZSA/PyB0cnVlXCIgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGb250XCJcclxuICAgICAgICAoY2hhbmdlKT1cInNldEZvbnRTaXplKCRldmVudClcIj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIxMlwiPjEycHg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIxNFwiIHNlbGVjdGVkPjE0cHg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIxNlwiPjE2cHg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIxOFwiPjE4cHg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIyMFwiPjIwcHg8L29wdGlvbj4gIFxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDI0cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjI0XCI+MjRweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDI4cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjI4XCI+MjhweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDMycHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjMyXCI+MzJweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDQ4cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjQ4XCI+NDhweDwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmJvbGQgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2JvbGQnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQm9sZFwiIHRpdGxlPVwiQm9sZFwiID5cclxuICAgICAgICA8c3ZnICBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZpZXdCb3g9XCItNi41IDAgMjggMzJcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8dGl0bGU+Ym9sZDwvdGl0bGU+IDxwYXRoIGQ9XCJNMCAyNS41MzF2MS4zNDRjMS4wNjMtMC4wMzEgMS45MzgtMC4wNjMgMi41NjMtMC4wOTQgMC42MjUgMCAxLjA5NC0wLjAzMSAxLjMxMy0wLjAzMSAxLjY1Ni0wLjEyNSAzLjA2My0wLjIxOSA0LjI4MS0wLjE4OGwyLjgxMyAwLjA2M2MyLjQzOCAwIDQuMjUtMC4zMTMgNS43NS0xIDAuNzE5LTAuMzQ0IDEuMzQ0LTAuODQ0IDEuOTY5LTEuNTMxIDAuNDY5LTAuNDY5IDAuODEzLTEuMDMxIDEuMDMxLTEuNjU2IDAuMjUtMC44NDQgMC4zNzUtMS41OTQgMC4zNzUtMi4yODEgMC0yLjUtMS43MTktNC42MjUtNS4wOTQtNS40MDYgMC41MzEtMC4yNSAxLjAzMS0wLjUgMS4zNzUtMC42ODhzMC42MjUtMC4zMTMgMC43ODEtMC40MzhjMS4xODgtMC44NzUgMS43ODEtMS45MDYgMS43ODEtMy4yODEgMC0wLjU5NC0wLjA5NC0xLjE4OC0wLjI4MS0xLjcxOS0wLjM3NS0xLjA5NC0xLjIxOS0yLTIuNDA2LTIuNTYzLTAuNTMxLTAuMzEzLTEuMDMxLTAuNDY5LTEuMzc1LTAuNTMxLTAuOTM4LTAuMjUtMS44NDQtMC4zNzUtMi43MTktMC4zNzVoLTEuMDk0Yy0wLjIxOSAwLTAuNDA2IDAtMC41MzEtMC4wMzFoLTAuNWMtMC4wNjMgMC0wLjE1NiAwLTAuMjUgMC4wMzFoLTAuNjI1bC01LjQwNiAwLjE1Ni0zLjcxOSAwLjA5NCAwLjA2MyAxLjE4OGMwLjg3NSAwLjEyNSAxLjQwNiAwLjE4OCAxLjYyNSAwLjE4OCAwLjQzOCAwIDAuNzgxIDAuMDk0IDAuOTY5IDAuMjE5IDAuMDk0IDAgMC4xNTYgMC4wNjMgMC4xODggMC4xMjUgMC4wNjMgMC4yMTkgMC4xMjUgMC42ODggMC4xNTYgMS41NjMgMC4wNjMgMS41NjMgMC4wNjMgMi44MTMgMC4wNjMgMy43NSAwLjAzMSAwLjk2OSAwLjAzMSAxLjYyNSAwLjA5NCAydjcuMDMxYzAgMS4yMTktMC4wMzEgMi4xMjUtMC4xNTYgMi43NS0wLjAzMSAwLjIxOS0wLjEyNSAwLjQzOC0wLjI4MSAwLjY4OC0wLjQzOCAwLjE4OC0xIDAuMzc1LTEuNzUgMC40NjktMC4zNzUgMC4wNjMtMC43MTkgMC4xMjUtMSAwLjE1NnpNNy43MTkgMTQuMjgxdi0yLjQ2OWMwLjA2My0xLjcxOSAwLTIuOTY5LTAuMDMxLTMuOTY5LTAuMDYzLTAuNDM4LTAuMDYzLTAuODQ0LTAuMDYzLTEuMDYzIDAuNzUtMC4xNTYgMS4zNDQtMC4yMTkgMS44NDQtMC4yMTkgMS42MjUgMCAyLjg0NCAwLjM0NCAzLjY1NiAxLjA5NCAwLjgxMyAwLjY4OCAxLjIxOSAxLjU2MyAxLjIxOSAyLjY1NiAwIDIuOTY5LTEuNzUgNC4wOTQtNS4wNjMgNC4wOTQtMC41NjMgMC0xLjA5NC0wLjAzMS0xLjU2My0wLjEyNXpNNy43MTkgMjAuNDA2di00LjVjMC4zMTMtMC4wNjMgMC43NS0wLjEyNSAxLjQzOC0wLjEyNSAxLjU5NC0wLjAzMSAyLjgxMyAwLjEyNSAzLjU2MyAwLjQzOCAxLjUzMSAwLjU2MyAyLjU5NCAyLjE4OCAyLjU5NCA0LjM0NCAwIDEuMDMxLTAuMjE5IDEuODQ0LTAuNTYzIDIuNTYzLTAuMzc1IDAuNzE5LTAuOTA2IDEuMjE5LTEuNzE5IDEuNTk0LTEuNjU2IDAuNzgxLTMuNzE5IDAuNzE5LTUuMTI1IDAuMTI1LTAuMDk0LTAuMjUtMC4xMjUtMC40MzgtMC4xMjUtMC41OTR6XCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/Lml0YWxpYyA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnaXRhbGljJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkl0YWxpY1wiIHRpdGxlPVwiSXRhbGljXCI+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X2l0YWxpYzwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjQgMCAyMCAyMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8ZyBpZD1cIkVkaXQgLyBJdGFsaWNcIj4gPHBhdGggaWQ9XCJWZWN0b3JcIiBkPVwiTTggMTlIMTBNMTAgMTlIMTJNMTAgMTlMMTQgNU0xMiA1SDE0TTE0IDVIMTZcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnVuZGVybGluZSA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgndW5kZXJsaW5lJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlVuZGVybGluZVwiIHRpdGxlPVwiVW5kZXJsaW5lXCI+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X3VuZGVybGluZTwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjQgMCAxOCAyMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8ZyBpZD1cIkVkaXQgLyBVbmRlcmxpbmVcIj4gPHBhdGggaWQ9XCJWZWN0b3JcIiBkPVwiTTYgMTlIMThNOCA1VjExQzggMTMuMjA5MSA5Ljc5MDg2IDE1IDEyIDE1QzE0LjIwOTEgMTUgMTYgMTMuMjA5MSAxNiAxMVY1XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5zdHJpa2V0aHJvdWdoID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdzdHJpa2V0aHJvdWdoJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlN0cmlrZXRocm91Z2hcIiB0aXRsZT1cIlN0cmlrZXRocm91Z2hcIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5zdHJpa2V0aHJvdWdoX3M8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCI0IDAgMjAgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPGcgaWQ9XCJFZGl0IC8gU3RyaWtldGhyb3VnaFwiPiA8cGF0aCBpZD1cIlZlY3RvclwiIGQ9XCJNMTIuMDAwNSAxMi4wMDAxQzEyLjg5NTkgMTIuMDAwMSAxMy43NzQ5IDEyLjE5MjUgMTQuNTQ1NyAxMi41NTcxQzE0Ljg5MzkgMTIuNzIxOCAxNS4yMTQ2IDEyLjkxOTIgMTUuNTAwOSAxMy4xNDM3QzE1Ljg0ODQgMTMuNDE2MiAxNi4xNDU3IDEzLjcyOSAxNi4zODIyIDE0LjA3MzJDMTYuODEzNiAxNC43MDA5IDE3LjAyNjMgMTUuNDA5NiAxNi45OTgyIDE2LjEyNTZDMTYuOTcgMTYuODQxNiAxNi43MDIgMTcuNTM4NSAxNi4yMjIyIDE4LjE0MzNDMTUuNzQyNCAxOC43NDgxIDE1LjA2ODQgMTkuMjM4NiAxNC4yNzA1IDE5LjU2MzhDMTMuNDcyNyAxOS44ODkgMTIuNTgwMiAyMC4wMzczIDExLjY4NjUgMTkuOTkyM0MxMC43OTI4IDE5Ljk0NzMgOS45MzEwNCAxOS43MTA4IDkuMTkwNDMgMTkuMzA4MkM4LjQ0OTgyIDE4LjkwNTUgNy44NTc4MiAxOC4zNTE0IDcuNDc2NTYgMTcuNzAzMk0xMi4wMDA1IDEyLjAwMDFINE0xMi4wMDA1IDEyLjAwMDFIMjBNMTYuNTI0MyA2LjI5NzE4QzE2LjE0MyA1LjY0OSAxNS41NTEyIDUuMDk0NjIgMTQuODEwNSA0LjY5MTk3QzE0LjA2OTkgNC4yODkzMiAxMy4yMDc2IDQuMDUyODcgMTIuMzE0IDQuMDA3ODlDMTEuNDIwMyAzLjk2MjkxIDEwLjUyNzggNC4xMTA5MSA5LjcyOTk4IDQuNDM2MTNDOC45MzIxMyA0Ljc2MTM1IDguMjU4MTIgNS4yNTIwNSA3Ljc3ODMyIDUuODU2ODlDNy4yOTg1MiA2LjQ2MTczIDcuMDMwNTcgNy4xNTg4NSA3LjAwMjQ0IDcuODc0ODVDNi45OTQyIDguMDg0NjMgNy4wMDY2OSA4LjI5MzQ1IDcuMDM5MjQgOC41MDAxNFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYWxpZ25MZWZ0ID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5TGVmdCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJBbGlnbiBMZWZ0XCIgdGl0bGU9XCJBbGlnbiBMZWZ0XCIgPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9hbGlnbl9sZWZ0PC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTExIDFIMVYzSDExVjFaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMSA1SDE1VjdIMVY1WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTExIDlIMVYxMUgxMVY5WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTE1IDEzSDFWMTVIMTVWMTNaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYWxpZ25DZW50ZXIgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlDZW50ZXInKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQ2VudGVyXCIgdGl0bGU9XCJBbGlnbiBDZW50ZXJcIiA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2NlbnRlcjwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xNSAxSDFWM0gxNVYxWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEgNUgxNVY3SDFWNVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSA5SDFWMTFIMTVWOVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xMSAxM0gxVjE1SDExVjEzWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmFsaWduUmlnaHQgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlSaWdodCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJBbGlnbiBSaWdodFwiIHRpdGxlPVwiQWxpZ24gUmlnaHRcIiA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X2FsaWduX3JpZ2h0PC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMTUgMUg1VjNIMTVWMVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xIDVIMTVWN0gxVjVaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTUgOUg1VjExSDE1VjlaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTUgMTNIMVYxNUgxNVYxM1pcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5qdXN0aWZ5ID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5RnVsbCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJKdXN0aWZ5XCIgdGl0bGU9XCJKdXN0aWZ5XCIgPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9hbGlnbl9qdXN0aWZ5PC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZpZXdCb3g9XCIwIC0yLjUgMjkgMjlcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+PHBhdGggZD1cIm0xLjMzNCAyLjY2NmgyNi42NjVjLjAxMSAwIC4wMjQuMDAxLjAzNy4wMDEuNzM3IDAgMS4zMzQtLjU5NyAxLjMzNC0xLjMzNHMtLjU5Ny0xLjMzNC0xLjMzNC0xLjMzNGMtLjAxMyAwLS4wMjYgMC0uMDM5LjAwMWguMDAyLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDJ6XCI+PC9wYXRoPjxwYXRoIGQ9XCJtMjcuOTk5IDUuMzMzaC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuMDExIDAgLjAyNC4wMDEuMDM3LjAwMS43MzcgMCAxLjMzNC0uNTk3IDEuMzM0LTEuMzM0cy0uNTk3LTEuMzM0LTEuMzM0LTEuMzM0Yy0uMDEzIDAtLjAyNiAwLS4wMzkuMDAxelwiPjwvcGF0aD48cGF0aCBkPVwibTI3Ljk5OSAxMC42NjdoLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDIgMjYuNjY1Yy43Mi0uMDIxIDEuMjk2LS42MSAxLjI5Ni0xLjMzM3MtLjU3Ni0xLjMxMi0xLjI5NC0xLjMzM3pcIj48L3BhdGg+PHBhdGggZD1cIm0yNy45OTkgMjEuMzMzaC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuNzItLjAyMSAxLjI5Ni0uNjEgMS4yOTYtMS4zMzNzLS41NzYtMS4zMTItMS4yOTQtMS4zMzN6XCI+PC9wYXRoPjxwYXRoIGQ9XCJtMjcuOTk5IDE2aC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuNzItLjAyMSAxLjI5Ni0uNjEgMS4yOTYtMS4zMzNzLS41NzYtMS4zMTItMS4yOTQtMS4zMzN6XCI+PC9wYXRoPjwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYnVsbGV0TGlzdCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJVbm9yZGVyZWQgTGlzdFwiIHRpdGxlPVwiQnVsbGV0IExpc3RcIiA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X2xpc3RfYnVsbGV0ZWQ8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZpZXdCb3g9XCIwIDAgMzYgNDhcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj48cGF0aCBkPVwiTTggMjFjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zek04IDljLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zem0wIDI0LjMzYy0xLjQ3IDAtMi42NyAxLjE5LTIuNjcgMi42N3MxLjIgMi42NyAyLjY3IDIuNjcgMi42Ny0xLjE5IDIuNjctMi42Ny0xLjItMi42Ny0yLjY3LTIuNjd6TTE0IDM4aDI4di00SDE0djR6bTAtMTJoMjh2LTRIMTR2NHptMC0xNnY0aDI4di00SDE0elwiPjwvcGF0aD48L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/Lm51bWJlcmVkTGlzdCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0T3JkZXJlZExpc3QnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiT3JkZXJlZCBMaXN0XCIgdGl0bGU9XCJOdW1iZXJlZCBMaXN0XCIgPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9saXN0X251bWJlcmVkPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZlcnNpb249XCIxLjFcIiBpZD1cIkNhcGFfMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB2aWV3Qm94PVwiMCAwIDk0LjQ3OSA5NC40NzlcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8Zz4gPGc+IDxwYXRoIGQ9XCJNOTIuNDc5LDYuODIxSDI2LjgyM2MtMS4xMDQsMC0yLDAuODk2LTIsMlYxOS41OGMwLDEuMTA0LDAuODk2LDIsMiwyaDY1LjY1NmMxLjEwNCwwLDItMC44OTYsMi0yVjguODIxIEM5NC40NzksNy43MTcsOTMuNTg0LDYuODIxLDkyLjQ3OSw2LjgyMXpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNOTIuNDc5LDQwLjQ1N0gyNi44MjNjLTEuMTA0LDAtMiwwLjg5Ni0yLDJ2MTAuNzYxYzAsMS4xMDQsMC44OTYsMiwyLDJoNjUuNjU2YzEuMTA0LDAsMi0wLjg5NiwyLTJWNDIuNDU3IEM5NC40NzksNDEuMzUyLDkzLjU4NCw0MC40NTcsOTIuNDc5LDQwLjQ1N3pcIj48L3BhdGg+IDxwYXRoIGQ9XCJNOTIuNDc5LDc1LjEwOUgyNi44MjNjLTEuMTA0LDAtMiwwLjg5Ni0yLDJ2MTAuNzU5YzAsMS4xMDQsMC44OTYsMiwyLDJoNjUuNjU2YzEuMTA0LDAsMi0wLjg5NiwyLTJWNzcuMTA5IEM5NC40NzksNzYuMDA0LDkzLjU4NCw3NS4xMDksOTIuNDc5LDc1LjEwOXpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMS44NDIsMTEuMTA0YzAuNDIzLDAuMDUxLDAuODQ4LTAuMDgsMS4xNjctMC4zNmwwLjkxNC0wLjc5OXYxMi45NzNjMCwwLjgyOCwwLjY3MiwxLjUsMS41LDEuNWgxLjU0NiBjMC44MjgsMCwxLjUtMC42NzIsMS41LTEuNVY1LjU2N2MwLTAuODI4LTAuNjcyLTEuNS0xLjUtMS41SDUuMzc4Yy0wLjM1NiwwLTAuNzAxLDAuMTI3LTAuOTczLDAuMzU4TDAuNTI3LDcuNzI4IGMtMC41ODksMC41MDEtMC43LDEuMzY5LTAuMjU2LDIuMDAzbDAuNTIyLDAuNzQ1QzEuMDQsMTAuODI1LDEuNDIsMTEuMDUzLDEuODQyLDExLjEwNHpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMi41NDYsMzcuNWMtMC42NDcsMC4yMy0xLjA1NiwwLjg3Mi0wLjk5LDEuNTU2bDAuMDk2LDAuOTk5YzAuMDQ4LDAuNDk3LDAuMzM5LDAuOTM4LDAuNzc4LDEuMTc2IGMwLjQzOCwwLjIzOCwwLjk2NywwLjI0MywxLjQwOSwwLjAxMWMxLjE4LTAuNjE1LDEuOTIzLTAuNzc1LDIuOTIyLTAuNTM0YzAuNzEsMC4xNjMsMS4xODgsMC41ODYsMS40MzgsMS4yMjUgYzAuMzc4LDEuMTQzLDAuMzk1LDIuOTU3LTIuODU0LDYuODczbC0yLjUwNiwyLjk5NmMtMC41ODksMC42ODgtMC45OSwxLjExOS0xLjMwMiwxLjQwNGMtMC4zMTIsMC4yODQtMC40ODgsMC42ODgtMC40ODgsMS4xMDcgdjEuNDc1YzAsMC44MjgsMC42NzIsMS41LDEuNSwxLjVoOS4xMzJjMC44MjgsMCwxLjUtMC42NzIsMS41LTEuNVY1NS4wMWMwLTAuODI4LTAuNjcyLTEuNS0xLjUtMS41SDYuODk2IGMwLjQ1OC0wLjUxNSwxLjAzNy0xLjIxMSwxLjcxNi0yLjA2M2MyLjgwMy0zLjQ2OCw1LjA2MS02LjY0NSw0LjI5Mi0xMC4zNzZjLTAuMzA5LTEuNjcyLTEuMjQ3LTIuOTY2LTIuNzMxLTMuNzUyIGMtMC44MjYtMC40MjQtMS44NzktMC42MzktMy4xMjctMC42MzlDNS42MjksMzYuNjgsNC4wMzEsMzYuOTcxLDIuNTQ2LDM3LjV6XCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEwLjQ5MSw3OS41MTZjMC4yNS0wLjEzNSwwLjQ4Ny0wLjI4OSwwLjc0LTAuNDgzYzEuNzE4LTEuMzEzLDEuODAxLTMuMzM1LDEuNzg2LTMuODg1IGMtMC4wMDEtMS44NzgtMC43MTItMy4zMTgtMi4xNjYtNC40MDFjLTEuMDI2LTAuNzctMi41MzQtMS4xNzctNC4zNjEtMS4xNzdjLTEuMzQ3LDAtMi43ODcsMC4yMTItNC4wNTcsMC41OTYgYy0wLjY2OCwwLjIwMi0xLjEwNywwLjgzOS0xLjA2MywxLjUzM2wwLjA1OCwwLjg4YzAuMDMxLDAuNDcxLDAuMjgsMC44OTYsMC42NzMsMS4xNTVjMC4zOTQsMC4yNTksMC44ODYsMC4zMTksMS4zMjcsMC4xNTkgYzAuODY0LTAuMzA3LDEuNTcxLTAuNDUsMi4yMjMtMC40NWMwLjIyOSwwLDAuNDU3LDAuMDE5LDAuNzIyLDAuMDYzYzAuOTQsMC4xMjcsMS41NjMsMC41NDksMS45LDEuMjgzIGMwLjIzNywwLjUyLDAuMTksMS40NDUtMC4wODMsMS44ODVjLTAuNjU0LDEuMDE0LTIuNDM4LDEuMjE3LTMuNDQzLDEuMjVjLTAuODEsMC4wMjQtMS40NTMsMC42ODgtMS40NTMsMS40OTh2MC42NTggYzAsMC44MjgsMC42ODcsMS41LDEuNTE1LDEuNWMxLjU3NSwwLDIuMzExLDAuMzA5LDIuNTk2LDAuNDg1YzAuNzM3LDAuNDY1LDEuMDY1LDEuMDQzLDEuMDY2LDEuOTE4IGMwLjAyNSwwLjkxMi0wLjM0OCwxLjYwNi0xLjEyOSwyLjEyMWMtMS4wMTQsMC42NTEtMi42NCwwLjY0Ny00LjUwNSwwLjAzMmMtMC40MzgtMC4xNDYtMC45MTgtMC4wODItMS4zMDIsMC4xNzUgYy0wLjM4NCwwLjI1NS0wLjYyOSwwLjY3Mi0wLjY2NSwxLjEzMmwtMC4wNjgsMC44NzJDMC43NSw4OC45NzMsMS4xMzUsODkuNTg4LDEuNzUsODkuODNjMC4zMywwLjEzLDAuNTUxLDAuMTgzLDEuMDIyLDAuMjgxIGMwLjg1NywwLjE5NiwxLjg0LDAuMzAyLDIuODQyLDAuMzAyYzEuNDkzLDAsNC4yNDgtMC4yNDcsNS45NDQtMS45MTljMS42NTctMS42OSwxLjk3NC00LjExLDEuNTYtNS43MjkgQzEyLjYzNiw4MC43MDQsMTEuNDYxLDc5Ljk0NiwxMC40OTEsNzkuNTE2elwiPjwvcGF0aD4gPC9nPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uaW1hZ2UgPz8gdHJ1ZVwiIGFyaWEtbGFiZWw9XCJJbnNlcnQgSW1hZ2VcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1wiIHRpdGxlPVwiSW5zZXJ0IEltYWdlXCIgPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIi5wbmcsLmpwZywuanBlZ1wiICAoY2hhbmdlKT1cImluc2VydEltYWdlVG9FZGl0b3IoJGV2ZW50KVwiXHJcbiAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTUwJTsgdG9wOiAwOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvcGFjaXR5OiAwOyBjdXJzb3I6IHBvaW50ZXI7XCJcclxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24gc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTtcIj5pbnNlcnRfcGhvdG9fb3V0bGluZWQ8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIyIDEgMjAgMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xNC4yNjQ3IDE1LjkzNzdMMTIuNTQ3MyAxNC4yMzQ2QzExLjc1OCAxMy40NTE5IDExLjM2MzMgMTMuMDYwNSAxMC45MDg5IDEyLjkxMzdDMTAuNTA5MiAxMi43ODQ1IDEwLjA3OSAxMi43ODQ1IDkuNjc5MjIgMTIuOTEzN0M5LjIyNDg1IDEzLjA2MDUgOC44MzAxNyAxMy40NTE5IDguMDQwODIgMTQuMjM0Nkw0LjA0MTkzIDE4LjI2MjJNMTQuMjY0NyAxNS45Mzc3TDE0LjYwNiAxNS41OTkxQzE1LjQxMiAxNC43OTk5IDE1LjgxNDkgMTQuNDAwMyAxNi4yNzczIDE0LjI1NDVDMTYuNjgzOSAxNC4xMjYyIDE3LjEyMDggMTQuMTMxMiAxNy41MjQ0IDE0LjI2ODhDMTcuOTgzMiAxNC40MjUzIDE4LjM3NjkgMTQuODM0IDE5LjE2NDIgMTUuNjUxNUwyMCAxNi41MDAxTTE0LjI2NDcgMTUuOTM3N0wxOC4yMiAxOS45NjI4TTE4LjIyIDE5Ljk2MjhDMTcuODcwMyAyMCAxNy40MjEzIDIwIDE2LjggMjBINy4yQzYuMDc5ODkgMjAgNS41MTk4NCAyMCA1LjA5MjAyIDE5Ljc4MkM0LjcxNTcgMTkuNTkwMyA0LjQwOTczIDE5LjI4NDMgNC4yMTc5OSAxOC45MDhDNC4xMjU4MyAxOC43MjcxIDQuMDcyNjQgMTguNTIyNiA0LjA0MTkzIDE4LjI2MjJNMTguMjIgMTkuOTYyOEMxOC41MDA3IDE5LjkzMjkgMTguNzE3NSAxOS44NzkxIDE4LjkwOCAxOS43ODJDMTkuMjg0MyAxOS41OTAzIDE5LjU5MDMgMTkuMjg0MyAxOS43ODIgMTguOTA4QzIwIDE4LjQ4MDIgMjAgMTcuOTIwMSAyMCAxNi44VjEzTTExIDRINy4yQzYuMDc5ODkgNCA1LjUxOTg0IDQgNS4wOTIwMiA0LjIxNzk5QzQuNzE1NyA0LjQwOTczIDQuNDA5NzMgNC43MTU2OSA0LjIxNzk5IDUuMDkyMDJDNCA1LjUxOTg0IDQgNi4wNzk5IDQgNy4yVjE2LjhDNCAxNy40NDY2IDQgMTcuOTA2NiA0LjA0MTkzIDE4LjI2MjJNMTggOVY2TTE4IDZWM00xOCA2SDIxTTE4IDZIMTVcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy50YWJsZSA/PyB0cnVlXCIgKGNsaWNrKT1cIm9wZW5UYWJsZURpYWxvZygkZXZlbnQpXCIgdHlwZT1cImJ1dHRvblwiICB0aXRsZT1cIlRhYmxlXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2hvb3NlIHRhYmxlIHJvd3MgYW5kIGNvbHVtbnNcIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5ib3JkZXJfYWxsPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI1NnB4XCIgaGVpZ2h0PVwiMjU2cHhcIiB2aWV3Qm94PVwiMiAxMiAyMCAzXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMyA5SDIxTTMgMTVIMjFNOSA5TDkgMjBNMTUgOUwxNSAyME02LjIgMjBIMTcuOEMxOC45MjAxIDIwIDE5LjQ4MDIgMjAgMTkuOTA4IDE5Ljc4MkMyMC4yODQzIDE5LjU5MDMgMjAuNTkwMyAxOS4yODQzIDIwLjc4MiAxOC45MDhDMjEgMTguNDgwMiAyMSAxNy45MjAxIDIxIDE2LjhWNy4yQzIxIDYuMDc5OSAyMSA1LjUxOTg0IDIwLjc4MiA1LjA5MjAyQzIwLjU5MDMgNC43MTU2OSAyMC4yODQzIDQuNDA5NzMgMTkuOTA4IDQuMjE3OTlDMTkuNDgwMiA0IDE4LjkyMDEgNCAxNy44IDRINi4yQzUuMDc5OSA0IDQuNTE5ODQgNCA0LjA5MjAyIDQuMjE3OTlDMy43MTU2OSA0LjQwOTczIDMuNDA5NzMgNC43MTU2OSAzLjIxNzk5IDUuMDkyMDJDMyA1LjUxOTg0IDMgNi4wNzk4OSAzIDcuMlYxNi44QzMgMTcuOTIwMSAzIDE4LjQ4MDIgMy4yMTc5OSAxOC45MDhDMy40MDk3MyAxOS4yODQzIDMuNzE1NjkgMTkuNTkwMyA0LjA5MjAyIDE5Ljc4MkM0LjUxOTg0IDIwIDUuMDc5ODkgMjAgNi4yIDIwWlwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnRhYmxlSGVhZGVyID8/IHRydWVcIiBjbGFzcz1cIm1iLTFcIiAoY2xpY2spPVwibWFrZUZpcnN0Um93SGVhZGVyKClcIiB0eXBlPVwiYnV0dG9uXCIgIGFyaWEtbGFiZWw9XCJNYWtlIEhlYWRlclwiIHRpdGxlPVwiVGFibGUgSGVhZGVyXCIgPlxyXG4gICAgICAgIDwhLS0gPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDIwcHg7XCIgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICBwYWdlX2hlYWRlclxyXG4gICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgPHN2ZyBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZpZXdCb3g9XCIwIDAgMTkyMCAxOTIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMjEzLjMzMyAwQzk1LjUxMjYgMCAwIDk1LjUxMjYgMCAyMTMuMzMzVjE3MDYuNjdDMCAxODI0LjQ5IDk1LjUxMjYgMTkyMCAyMTMuMzMzIDE5MjBIMTcwNi42N0MxODI0LjQ5IDE5MjAgMTkyMCAxODI0LjQ5IDE5MjAgMTcwNi42N1YyMTMuMzMzQzE5MjAgOTUuNTEyNiAxODI0LjQ5IDAgMTcwNi42NyAwSDIxMy4zMzNaTTI2Ni42NjcgNzQ2LjY2N0MyMzcuMjExIDc0Ni42NjcgMjEzLjMzMyA3MjIuNzg4IDIxMy4zMzMgNjkzLjMzM1YzNzMuMzMzQzIxMy4zMzMgMzQzLjg3OCAyMzcuMjExIDMyMCAyNjYuNjY3IDMyMEgxNjUzLjMzQzE2ODIuNzkgMzIwIDE3MDYuNjcgMzQzLjg3OCAxNzA2LjY3IDM3My4zMzNWNjkzLjMzM0MxNzA2LjY3IDcyMi43ODggMTY4Mi43OSA3NDYuNjY3IDE2NTMuMzMgNzQ2LjY2N0gyNjYuNjY3WlwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5zaWduYXR1cmUgPz8gdHJ1ZVwiIChjbGljayk9XCJvcGVuU2lnbmF0dXJlRGlhbG9nKCRldmVudClcIiB0eXBlPVwiYnV0dG9uXCIgIHRpdGxlPVwiU2lnbmF0dXJlXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2hvb3NlIHRhYmxlIHJvd3MgYW5kIGNvbHVtbnNcIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5ib3JkZXJfYWxsPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI4IDI4XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiBmaWxsPVwiIzAwMDAwMFwiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8IS0tIFVwbG9hZGVkIHRvOiBTVkcgUmVwbywgd3d3LnN2Z3JlcG8uY29tLCBHZW5lcmF0b3I6IFNWRyBSZXBvIE1peGVyIFRvb2xzIC0tPiA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gPGcgaWQ9XCLwn5SNLVByb2R1Y3QtSWNvbnNcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPiA8ZyBpZD1cImljX2ZsdWVudF9zaWduYXR1cmVfMjhfcmVndWxhclwiIGZpbGw9XCIjMjEyMTIxXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiPiA8cGF0aCBkPVwiTTE2LjQ3OTg5NTYsMjEuMDAxOTU3OCBMMTYuNzUsMjEgQzE3Ljk3MDIzNTIsMjEgMTguNjExMjQ0MSwyMS41MDU4MDMyIDE5LjQwMjA2MjcsMjIuNzA0MTY2MiBMMTkuNzk1ODI3OCwyMy4zMTI0NDA5IEMyMC4xMDI4MjY2LDIzLjc2NjkzOCAyMC4yOTQ0Mzc0LDIzLjk1NzMyNDcgMjAuNTM1Nzg0LDI0LjA1Njc5MjkgQzIwLjk2ODQ4NzMsMjQuMjM1MTI2NiAyMS4zMjcxMDA4LDI0LjE0NzQ0NDYgMjIuNjQ0MDc4MiwyMy41MTMzMjEzIEwyMy4wNDczMjczLDIzLjMxNzAzMTkgQzIzLjg3MDk5ODIsMjIuOTEyNjcxMSAyNC40MzMwMjg2LDIyLjY4MTE2MDYgMjUuMDY4MDk4MywyMi41MjIzOTMxIEMyNS40Njk5NDQ1LDIyLjQyMTkzMTYgMjUuODc3MTQ1MywyMi42NjYyNTIxIDI1Ljk3NzYwNjksMjMuMDY4MDk4MyBDMjYuMDc4MDY4NCwyMy40Njk5NDQ1IDI1LjgzMzc0NzksMjMuODc3MTQ1MyAyNS40MzE5MDE3LDIzLjk3NzYwNjkgQzI1LjAzNzE2MDYsMjQuMDc2MjkyMiAyNC42NTg5NDY1LDI0LjIxNzg4MTkgMjQuMTY0MTM2NCwyNC40NDU4OTk3IEwyMy4wMDU0ODk5LDI1LjAwMzI2NzMgQzIxLjQzNzYzMDIsMjUuNzQzNjk0NCAyMC45MDU5MDA5LDI1LjgzMTczMjEgMTkuOTY0MjE2LDI1LjQ0MzYyNzUgQzE5LjMzOTEyMzcsMjUuMTg2MDAyOCAxOC45ODM2NzY1LDI0LjgxMzI5OCAxOC40NjM1NjM5LDI0LjAxODAyMjcgTDE4LjI2ODg5MDMsMjMuNzE0MDg0OSBDMTcuNzA3MTExMiwyMi44Mjg4NzMxIDE3LjQwNTc3OTQsMjIuNTM4NDUzOCAxNi44Njg4NDQ0LDIyLjUwMzY2NTUgTDE2Ljc1LDIyLjUgQzE2LjIwMTczMDYsMjIuNSAxNi4wOTMzMTA0LDIyLjU2ODQ1NzIgMTQuMDA5MjgxLDI0LjExNTAyNDEgQzEyLjI2NzAzOTUsMjUuNDA3OTQ4OCAxMC45MzgzMzU5LDI2LjAyNTQ5ODQgOS4yNDg2NDI0MywyNi4wMjU0OTg0IEM3LjE4ODcyODY5LDI2LjAyNTQ5ODQgNS4yNDc3MzM2NywyNS42NDcwNjcgMy40MzE0NTg3NSwyNC44OTA1MzYzIEw2LjMxMzc3ODAzLDI0LjIyNDE3ODQgQzcuMjU3Njk0MDQsMjQuNDI1MDc2MiA4LjIzNTY3MTQzLDI0LjUyNTQ5ODQgOS4yNDg2NDI0MywyNC41MjU0OTg0IEMxMC41MzkzMDM1LDI0LjUyNTQ5ODQgMTEuNjA5MTI5LDI0LjAyODI2OTEgMTMuMTE1Mzc5NiwyMi45MTA0NzQzIEwxNC4yNzU0NDQsMjIuMDU0NTQ4OCBDMTUuNTQ2ODA2NSwyMS4xMzA0OTAzIDE1LjgyOTYxMTMsMjEuMDE2MDMyIDE2LjQ3OTg5NTYsMjEuMDAxOTU3OCBMMTYuNDc5ODk1NiwyMS4wMDE5NTc4IFogTTIyLjc3NzA5ODgsMy4yMjIwODk3OSBDMjQuNDUwNzIyMyw0Ljg5NTcxMzMgMjQuNDUwNzU2Niw3LjYwOTE2MDc5IDIyLjc3NzE4ODksOS4yODI4MTMyNCBMMjEuNzQxNjU1LDEwLjMxODQ0NzUgQzIyLjg5MzYyNjMsMTEuNzE5OTY1NyAyMi44NTIxNTI2LDEzLjIwNTM3NzQgMjEuNzgxMTAzMSwxNC4yNzk1NTYgTDE4Ljc4MDA3MjcsMTcuMjgwNTg3NCBMMTguNzgwMDcyNywxNy4yODA1ODc0IEMxOC40ODcwMzc0LDE3LjU3MzMzODQgMTguMDEyMTYzNywxNy41NzMxMDggMTcuNzE5NDEyNiwxNy4yODAwNzI3IEMxNy40MjY2NjE2LDE2Ljk4NzAzNzQgMTcuNDI2ODkyLDE2LjUxMjE2MzcgMTcuNzE5OTI3MywxNi4yMTk0MTI2IEwyMC43MTg4OTY5LDEzLjIyMDQ0NCBDMjEuMjAzOTU3MSwxMi43MzM5NjY4IDIxLjI2MDAwMjEsMTIuMTI5OTk4MyAyMC42Nzg5NDEsMTEuMzgxODk0NSBMMTAuMDg0NTQzNywyMS45NzYxMDExIEM5Ljc4NjM1NDU5LDIyLjI3NDMwNTMgOS40MTAzNjExNywyMi40ODI3MDUgOC45OTk0NDcwMywyMi41Nzc1MzEzIEwyLjkxODY0NDYzLDIzLjk4MDc5MzQgQzIuMzc4NTkwNjEsMjQuMTA1NDIxMiAxLjg5NDU3ODc1LDIzLjYyMTQwOTQgMi4wMTkyMDY2LDIzLjA4MTM1NTQgTDMuNDIyNDc3OTQsMTcuMDAwNTEyOSBDMy41MTcyOTU1NywxNi41ODk2MzY1IDMuNzI1NjY1ODksMTYuMjEzNjczNiA0LjAyMzgyNzYsMTUuOTE1NDk2OCBMMTYuNzE2NTAxOSwzLjIyMjE3OTkyIEMxOC4zOTAwNDE1LDEuNTQ4NTU1NTUgMjEuMTAzNDM0OSwxLjU0ODUxMDU5IDIyLjc3NzA5ODgsMy4yMjIwODk3OSBaIE0xNy43NzcxODg5LDQuMjgyODEzMjQgTDUuMDg0NTE0NjIsMTYuOTc2MTMwMiBDNC45ODUxMjczOCwxNy4wNzU1MjI0IDQuOTE1NjcwNjEsMTcuMjAwODQzNCA0Ljg4NDA2NDczLDE3LjMzNzgwMjIgTDMuNzUwNjI0OCwyMi4yNDkzNzUyIEw4LjY2MjE1Nzc3LDIxLjExNTk0NDUgQzguNzk5MTI5MTUsMjEuMDg0MzM1NyA4LjkyNDQ2MDI5LDIxLjAxNDg2OTIgOS4wMjM4NTY2NSwyMC45MTU0Njc4IEwyMS43MTY1MDE5LDguMjIyMTc5OTIgQzIyLjgwNDMwNjMsNy4xMzQzMjA0OSAyMi44MDQyODYyLDUuMzcwNjA0NzggMjEuNzE2NDU4OCw0LjI4Mjc3MDEgQzIwLjYyODU5MTQsMy4xOTQ5NjUwNyAxOC44NjQ5NTA2LDMuMTk0OTk2NTMgMTcuNzc3MTg4OSw0LjI4MjgxMzI0IFpcIiBpZD1cIvCfjqgtQ29sb3JcIj4gPC9wYXRoPiA8L2c+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJlZGl0b3JcIiBpZD1cImVkaXRvclwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiAjZWRpdG9yIChpbnB1dCk9XCJzdWJtaXRDb250ZW50KClcIiAoYmx1cik9XCJvbkJsdXIoKVwiIChrZXl1cCk9XCJvbkVkaXRvcktleVVwKCRldmVudClcIiAobW91c2V1cCk9XCJ1cGRhdGVDdXJyZW50Rm9ybWF0KClcIlxyXG4gICAgICAoZHJvcCk9XCJkcm9wKCRldmVudClcIiAoZHJhZ292ZXIpPVwiYWxsb3dEcm9wKCRldmVudClcIj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVEaWFsb2cgbGV0LWRpYWxvZ1JlZj1cImRpYWxvZ1JlZlwiPlxyXG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+Q2hvb3NlIFRhYmxlIFNpemU8L2gyPlxyXG4gICAgPG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2VsbCBvZiBncmlkOyBsZXQgaSA9IGluZGV4XCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdncmlkLWl0ZW0nOiB0cnVlLFxyXG4gICAgICAgICdoaWdobGlnaHRlZCc6IGkgJSA3IDwgY29scyAmJiBNYXRoLmZsb29yKGkgLyA3KSA8IHJvd3NcclxuICAgICAgfVwiIChtb3VzZWVudGVyKT1cInVwZGF0ZVByZXZpZXcoaSAlIDcgKyAxLCBNYXRoLmZsb29yKGkgLyA3KSArIDEpXCJcclxuICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVTZWxlY3Rpb24oaSAlIDcgKyAxLCBNYXRoLmZsb29yKGkgLyA3KSArIDEsIGRpYWxvZ1JlZilcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxwPnt7IHJvd3MgfX0geCB7eyBjb2xzIH19IDwvcD5cclxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjc2lnbmF0dXJlRGlhbG9nIGxldC1kaWFsb2dSZWY9XCJkaWFsb2dSZWZcIj5cclxuICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPkRyYXcgYSBTaWduYXR1cmU8L2gyPlxyXG4gICAgPHNpZ25hdHVyZS1wYWQgI3NpZ1BhZCBbb3B0aW9uc109XCJzaWduYXR1cmVQYWRPcHRpb25zXCIgY2xhc3M9XCJzaWduXCIgPjwvc2lnbmF0dXJlLXBhZD5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25cIiA+XHJcbiAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3JtYWxcIiA+IENsb3NlIDwvYnV0dG9uPiAtLT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3JtYWxcIiAoY2xpY2spPVwiY2xvc2VTaWduRGlhbG9nKGRpYWxvZ1JlZilcIiA+IENsb3NlIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInN1Ym1pdFwiIChjbGljayk9XCJzdWJtaXRTaWduRGlhbG9nKGRpYWxvZ1JlZilcIiA+IFN1Ym1pdCA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
925
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yYXBpZC10ZXh0LWVkaXRvci9zcmMvbGliL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQTBCLFVBQVUsRUFBRSxZQUFZLEVBQXdELE1BQU0sZUFBZSxDQUFDO0FBRWhNLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBc0N6RSxNQUFNLE9BQU8sd0JBQXdCO0lBZ0RuQyxZQUFvQixNQUFpQixFQUMzQixFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsS0FBaUIsRUFDakIsT0FBMEI7UUFKaEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBbEQ1Qix5QkFBb0IsR0FBb0I7WUFDOUMsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSTtnQkFDZixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixVQUFVLEVBQUUsSUFBSTtn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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkNoYW5nZXMsIFRlbXBsYXRlUmVmLCBmb3J3YXJkUmVmLCBFdmVudEVtaXR0ZXIsIEFmdGVyVmlld0luaXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTaWduYXR1cmVQYWQgfSBmcm9tICdhbmd1bGFyMi1zaWduYXR1cmVwYWQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSREVkaXRvck9wdGlvbnMge1xyXG4gIG9wdGlvbnM6IHtcclxuICAgIHRleHRGb3JtYXQ/OiBib29sZWFuLFxyXG4gICAgZm9udFNpemU/OiBib29sZWFuLFxyXG4gICAgYm9sZDogYm9vbGVhbixcclxuICAgIGl0YWxpYzogYm9vbGVhbixcclxuICAgIHVuZGVybGluZTogYm9vbGVhbixcclxuICAgIHN0cmlrZXRocm91Z2g6IGJvb2xlYW4sXHJcbiAgICBhbGlnbkxlZnQ6IGJvb2xlYW4sXHJcbiAgICBhbGlnblJpZ2h0OiBib29sZWFuLFxyXG4gICAgYWxpZ25DZW50ZXI6IGJvb2xlYW4sXHJcbiAgICBqdXN0aWZ5OiBib29sZWFuLFxyXG4gICAgYnVsbGV0TGlzdDogYm9vbGVhbixcclxuICAgIG51bWJlcmVkTGlzdDogYm9vbGVhbixcclxuICAgIGltYWdlPzogYm9vbGVhbixcclxuICAgIHRhYmxlPzogYm9vbGVhbiwgXHJcbiAgICB0YWJsZUhlYWRlcj86IGJvb2xlYW4sXHJcbiAgICBzaWduYXR1cmU/OiBib29sZWFuXHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhcGlkLXRleHQtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSYXBpZFRleHRFZGl0b3JDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxuICBcclxufSlcclxuZXhwb3J0IGNsYXNzIFJhcGlkVGV4dEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIHByaXZhdGUgZGVmYXVsdEVkaXRvck9wdGlvbnM6IFJERWRpdG9yT3B0aW9ucyA9IHtcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgdGV4dEZvcm1hdDogdHJ1ZSxcclxuICAgICAgZm9udFNpemU6IHRydWUsXHJcbiAgICAgIGJvbGQ6IHRydWUsXHJcbiAgICAgIGl0YWxpYzogdHJ1ZSxcclxuICAgICAgdW5kZXJsaW5lOiB0cnVlLFxyXG4gICAgICBzdHJpa2V0aHJvdWdoOiB0cnVlLFxyXG4gICAgICBhbGlnbkxlZnQ6IHRydWUsXHJcbiAgICAgIGFsaWduUmlnaHQ6IHRydWUsXHJcbiAgICAgIGFsaWduQ2VudGVyOiB0cnVlLFxyXG4gICAgICBqdXN0aWZ5OiB0cnVlLFxyXG4gICAgICBidWxsZXRMaXN0OiB0cnVlLFxyXG4gICAgICBudW1iZXJlZExpc3Q6IHRydWUsXHJcbiAgICAgIGltYWdlOiB0cnVlLFxyXG4gICAgICB0YWJsZTogdHJ1ZSxcclxuICAgICAgdGFibGVIZWFkZXI6IHRydWUsXHJcbiAgICAgIHNpZ25hdHVyZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG5cclxuICBASW5wdXQoKSBjb250ZW50Q2FwdHVyZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gXCJhdXRvXCI7XHJcbiAgQElucHV0KCkgd2lkdGg6IHN0cmluZyA9IFwiYXV0b1wiO1xyXG4gIEBJbnB1dCgpIGljb25Db2xvcjogc3RyaW5nID0gJyMzMzMzMzMnXHJcbiAgQElucHV0KCdlZGl0b3JPcHRpb25zJykgZWRpdG9yT3B0aW9ucyE6IFJERWRpdG9yT3B0aW9ucztcclxuICBAT3V0cHV0KCkgY29udGVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRvciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgndGFibGVEaWFsb2cnKSB0YWJsZURpYWxvZyE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2lnbmF0dXJlRGlhbG9nJykgc2lnbmF0dXJlRGlhbG9nITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzaWdQYWQnKSBzaWduYXR1cmVQYWQhOiBTaWduYXR1cmVQYWQ7XHJcblxyXG4gIHByaXZhdGUgZWRpdG9yQ29udGVudDogc3RyaW5nID0gJyc7XHJcbiAgcm93czogbnVtYmVyID0gMTtcclxuICBjb2xzOiBudW1iZXIgPSAxO1xyXG4gIGdyaWQgPSBBcnJheSg0OSkuZmlsbCgwKTtcclxuICBNYXRoID0gTWF0aDtcclxuICB1cGxvYWRlZEltYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBcclxuICBzaWduYXR1cmVQYWRPcHRpb25zID0ge1xyXG4gICAgbWluV2lkdGg6IDEsXHJcbiAgICBjYW52YXNXaWR0aDogNDAwLFxyXG4gICAgY2FudmFzSGVpZ2h0OiAyMDBcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBcclxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIF9jaGFuZ2U6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZygnQnVpbGQgLTEnKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50Q2FwdHVyZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGVuYWJsZWQuJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGRpc2FibGVkLicpO1xyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuZWRpdG9yT3B0aW9ucyl7XHJcbiAgICAgIHRoaXMuZWRpdG9yT3B0aW9ucyA9IHRoaXMuZGVmYXVsdEVkaXRvck9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmluaXRpYWxpemVFZGl0b3JDb250ZW50KCcnKTtcclxuICAgIC8vIHRoaXMuZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSB8fCBjaGFuZ2VzWyd3aWR0aCddKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlEaW1lbnNpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RGltZW5zaW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRpbWVuc2lvbkVsZW1lbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRpbWVuc2lvbicpO1xyXG4gICAgaWYgKHRoaXMud2lkdGgpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkaW1lbnNpb25FbGVtZW50LCAnd2lkdGgnLCB0aGlzLndpZHRoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJpY2hUZXh0RWRpdG9yRWxlbWVudCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucmljaC10ZXh0LWVkaXRvcicpO1xyXG4gICAgaWYodGhpcy5oZWlnaHQpe1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpY2hUZXh0RWRpdG9yRWxlbWVudCwgJ2hlaWdodCcsICdhdXRvJyk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyaWNoVGV4dEVkaXRvckVsZW1lbnQsICdoZWlnaHQnLCAnMTAwJScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZGltZW5zaW9uRWxlbWVudCwgJ2hlaWdodCcsICdhdXRvJyk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkaW1lbnNpb25FbGVtZW50LCAnaGVpZ2h0JywgJzEwMCUnKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpO1xyXG4gICAgaWYodGhpcy5oZWlnaHQpe1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVkaXRvckVsZW1lbnQsICdoZWlnaHQnLCB0aGlzLmhlaWdodCk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XHJcbiAgICBcclxuICAgIGlmIChlZGl0b3IgJiYgKGVkaXRvci5pbm5lckhUTUwudHJpbSgpID09PSBcIlwiIHx8IGVkaXRvci5pbm5lckhUTUwudHJpbSgpID09PSBcIjxicj5cIikpIHtcclxuICAgICAgLy8gZWRpdG9yLmZvY3VzKCk7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2V0U3RhcnQoZWRpdG9yLCAwKTtcclxuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPlxcdTIwMEI8L3A+J1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpKTtcclxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXHJcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcblxyXG4gICAgLy8gdGhpcy5pbml0aWFsaXplRWRpdG9yQ29udGVudCgnJyk7XHJcbiAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKSB7XHJcblxyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcclxuXHJcbiAgICAvLyBJZiBlZGl0b3IgaXMgZW1wdHkgb3IgZG9lc24ndCBoYXZlIGEgPHA+IGFzIHRoZSBsYXN0IGVsZW1lbnRcclxuICAgIGlmICghZWRpdG9yLmlubmVySFRNTC50cmltKCkpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGVkaXRvci5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgZmlyc3RDaGlsZC50YWdOYW1lICE9PSAnUCcpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gZWRpdG9yLmlubmVySFRNTDtcclxuICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj4ke2NvbnRlbnR9PC9wPmA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3AnKTtcclxuICAgIGlmIChwKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHApO1xyXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTsgXHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9jdXMgdGhlIGVkaXRvclxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRWRpdG9yQ29udGVudChkYXRhOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmICghZWRpdG9yKSByZXR1cm47XHJcblxyXG4gICAgLy8gSWYgY29udGVudCBoYXMgbm8gSFRNTCB0YWdzLCB3cmFwIHdpdGggPHA+XHJcbiAgICBjb25zdCBoYXNIdG1sVGFncyA9IC88W14+XSs+Ly50ZXN0KGRhdGEpO1xyXG4gICAgaWYgKCFoYXNIdG1sVGFncykge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+JHtkYXRhfTwvcD5gO1xyXG4gICAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gZGF0YTtcclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcblxyXG4gIG9uQ29udGVudENoYW5nZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbnRlbnRDYXB0dXJlKSB7XHJcbiAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XHJcbiAgICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgICB0aGlzLmVkaXRvckNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXB0dXJlZCBDb250ZW50IChDaGlsZCk6JywgdGhpcy5lZGl0b3JDb250ZW50KTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdCh0aGlzLmVkaXRvckNvbnRlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29udGVudDtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkSGVhZDogYW55ID0gJ1AnO1xyXG4gIHNlbGVjdGVkRm9udDogYW55ID0gJzE0JztcclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09ICc8YnI+JyB8fCB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PSAnJykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSGVhZCA9ICdQJztcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvbnQgPSAnMTQnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgd3JpdGVWYWx1ZShjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudCB8fCAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKCkge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIC8vIHNldEZvbnRTaXplKGV2ZW50OiBFdmVudCkge1xyXG4gIC8vICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xyXG4gIC8vICAgY29uc3Qgc2l6ZSA9IHNlbGVjdC52YWx1ZTtcclxuICAvLyAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAvLyAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcbiAgLy8gICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gIC8vICAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcclxuICAvLyAgICAgY29uc3QgcGFyZW50ID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ7XHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICBwYXJlbnQgJiZcclxuICAvLyAgICAgICBwYXJlbnQuY2xhc3NMaXN0ICYmXHJcbiAgLy8gICAgICAgQXJyYXkuZnJvbShwYXJlbnQuY2xhc3NMaXN0KS5zb21lKChjOiBzdHJpbmcpID0+IGMuc3RhcnRzV2l0aCgnZnMtJykpXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIHBhcmVudC5zdHlsZS5mb250U2l6ZSA9IGAke3NpemV9cHhgO1xyXG4gIC8vICAgICAgIHBhcmVudC5jbGFzc05hbWUgPSBgZnMtJHtzaXplfWA7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAvLyAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gYCR7c2l6ZX1weGA7XHJcbiAgLy8gICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgLy8gICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgZWxzZSB7XHJcbiAgLy8gICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgLy8gICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSBgJHtzaXplfXB4YDtcclxuICAvLyAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgLy8gICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKSk7IC8vIHplcm8td2lkdGggc3BhY2VcclxuICAvLyAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcclxuICAvLyAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gIC8vICAgICBuZXdSYW5nZS5zZXRTdGFydChzcGFuLmZpcnN0Q2hpbGQgYXMgTm9kZSwgMSk7XHJcbiAgLy8gICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gIC8vICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgLy8gICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBvbkVkaXRvcktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBoYW5kbGUgRW50ZXIgb3IgYXJyb3cga2V5c1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnQmFja1NwYWNlJyApIHtcclxuICAgICAgdGhpcy51cGRhdGVDdXJyZW50Rm9ybWF0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDdXJyZW50Rm9ybWF0KCkge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGU7XHJcbiAgICBpZiAoIWFuY2hvck5vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgcGFyZW50RWxlbSA9IGFuY2hvck5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXHJcbiAgICAgID8gKGFuY2hvck5vZGUgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgIDogKGFuY2hvck5vZGUucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XHJcblxyXG4gICAgaWYgKCFwYXJlbnRFbGVtKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRldGVjdGVkSGVhZCA9ICdQJztcclxuICAgIGxldCBkZXRlY3RlZEZvbnQgPSAnMTQnOyAvLyBkZWZhdWx0XHJcblxyXG4gICAgLy8gVHJhdmVyc2UgdXB3YXJkIHRvIGRldGVjdCBmb3JtYXR0aW5nXHJcbiAgICB3aGlsZSAocGFyZW50RWxlbSAmJiBwYXJlbnRFbGVtICE9PSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRhZyA9IHBhcmVudEVsZW0udGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgLy8gRGV0ZWN0IGhlYWRpbmdcclxuICAgICAgaWYgKFsnSDEnLCAnSDInLCAnSDMnLCAnSDQnLCAnSDUnLCAnSDYnLCAnUCddLmluY2x1ZGVzKHRhZykpIHtcclxuICAgICAgICBkZXRlY3RlZEhlYWQgPSB0YWc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERldGVjdCBpbmxpbmUgZm9udC1zaXplIGZyb20gc3R5bGUgb3IgY2xhc3NcclxuICAgICAgY29uc3QgZm9udFNpemUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtKS5mb250U2l6ZTtcclxuICAgICAgaWYgKGZvbnRTaXplKSB7XHJcbiAgICAgICAgY29uc3QgcHggPSBwYXJzZUludChmb250U2l6ZS5yZXBsYWNlKCdweCcsICcnKSwgMTApO1xyXG4gICAgICAgIGlmICghaXNOYU4ocHgpKSB7XHJcbiAgICAgICAgICBkZXRlY3RlZEZvbnQgPSBweC50b1N0cmluZygpO1xyXG4gICAgICAgICAgYnJlYWs7IC8vIGZvdW5kIHRoZSBjbG9zZXN0IHZhbGlkIGZvbnQgc2l6ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcGFyZW50RWxlbSA9IHBhcmVudEVsZW0ucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgYm91bmQgcHJvcGVydGllcyBpZiBjaGFuZ2VkXHJcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRIZWFkICE9PSBkZXRlY3RlZEhlYWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEhlYWQgPSBkZXRlY3RlZEhlYWQ7XHJcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb250ICE9PSBkZXRlY3RlZEZvbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvbnQgPSBkZXRlY3RlZEZvbnQ7XHJcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0Rm9udFNpemUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICBjb25zdCBzaXplID0gc2VsZWN0LnZhbHVlO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuXHJcbiAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAvLyBOb24tZW1wdHkgc2VsZWN0aW9uXHJcbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIHNwYW4uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsIGAke3NpemV9cHhgLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJhbmdlLnN1cnJvdW5kQ29udGVudHMoc3Bhbik7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIElmIHNlbGVjdGlvbiBzcGFucyBtdWx0aXBsZSBlbGVtZW50cywgdXNlIGV4ZWNDb21tYW5kIGZhbGxiYWNrXHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvbnRTaXplJywgZmFsc2UsICc3Jyk7IC8vIHRlbXBvcmFyeSBsYXJnZXN0IHNpemVcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdmb250W3NpemU9XCI3XCJdJykuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3NpemUnKTtcclxuICAgICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDb2xsYXBzZWQgc2VsZWN0aW9uIChubyB0ZXh0IHNlbGVjdGVkKVxyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBzcGFuLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpKTsgLy8gemVyby13aWR0aCBzcGFjZVxyXG4gICAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG5cclxuICAgICAgLy8gTW92ZSBjdXJzb3IgaW5zaWRlIHNwYW5cclxuICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICBuZXdSYW5nZS5zZXRTdGFydChzcGFuLmZpcnN0Q2hpbGQgYXMgTm9kZSwgMSk7XHJcbiAgICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcclxuICAgIHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpO1xyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldEhlYWRpbmcoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICBjb25zdCB0YWcgPSBzZWxlY3QudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG5ld0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XHJcblxyXG4gICAgc3dpdGNoICh0YWcpIHtcclxuICAgICAgY2FzZSAnSDEnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICczMnB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0gyJzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMjhweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICdib2xkJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdIMyc6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzI0cHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnYm9sZCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDQnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcyMHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g1JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMThweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICc2MDAnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g2JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMTZweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICc2MDAnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1AnOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcxNHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ25vcm1hbCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcclxuICAgIGlmIChzZWxlY3RlZFRleHQpIHtcclxuICAgICAgbmV3RWxlbS50ZXh0Q29udGVudCA9IHNlbGVjdGVkVGV4dDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0VsZW0uaW5uZXJIVE1MID0gJ1xcdTIwMEInOyAvLyBLZWVwcyBjdXJzb3IgdmlzaWJsZVxyXG4gICAgfVxyXG5cclxuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XHJcbiAgICByYW5nZS5pbnNlcnROb2RlKG5ld0VsZW0pO1xyXG5cclxuICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG5ld1JhbmdlLnNldFN0YXJ0KG5ld0VsZW0sIG5ld0VsZW0uY2hpbGROb2Rlcy5sZW5ndGgpO1xyXG4gICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG5cclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG5cclxuICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KTtcclxuICAgIGVkaXRvci5kaXNwYXRjaEV2ZW50KGlucHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvcm1hdChjb21tYW5kOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCAnJyk7XHJcbiAgfVxyXG5cclxuICAvL0ltYWdlIFNlY3Rpb25cclxuXHJcbiAgYWxsb3dEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBpbWFnZSBkcmFnIHN0YXJ0XHJcbiAgZHJhZyhldmVudDogRHJhZ0V2ZW50LCBpbWFnZVVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBldmVudC5kYXRhVHJhbnNmZXI/LnNldERhdGEoXCJ0ZXh0XCIsIGltYWdlVXJsKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBkcm9wIGV2ZW50IGluIHRoZSBlZGl0b3JcclxuICBkcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBiaW5kSW1hZ2VDbGlja0V2ZW50cygpIHtcclxuICAvLyAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAvLyAgIGNvbnN0IGltYWdlcyA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xyXG5cclxuICAvLyAgIGltYWdlcy5mb3JFYWNoKGltZyA9PiB7XHJcbiAgLy8gICAgIC8vIEF2b2lkIGRvdWJsZS1iaW5kaW5nXHJcbiAgLy8gICAgIGltZy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbWFnZUNsaWNrIGFzIGFueSk7XHJcbiAgLy8gICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbWFnZUNsaWNrLmJpbmQodGhpcykpO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBvbkltYWdlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAvLyAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIC8vICAgY29uc3QgaW1nID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgLy8gICB0aGlzLmVuYWJsZUltYWdlUmVzaXplKGltZyk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBlbmFibGVJbWFnZVJlc2l6ZShpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAvLyAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgcmVzaXplIGhhbmRsZXMgZmlyc3RcclxuICAvLyAgIHRoaXMucmVtb3ZlSW1hZ2VSZXNpemVIYW5kbGVzKCk7XHJcblxyXG4gIC8vICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIC8vICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCdpbWFnZS1yZXNpemUtd3JhcHBlcicpO1xyXG4gIC8vICAgaW1nLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZSh3cmFwcGVyLCBpbWcpO1xyXG4gIC8vICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xyXG5cclxuICAvLyAgIC8vIEFkZCByZXNpemFibGUgaGFuZGxlc1xyXG4gIC8vICAgY29uc3QgcmVzaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIC8vICAgcmVzaXplci5jbGFzc0xpc3QuYWRkKCdyZXNpemVyJyk7XHJcbiAgLy8gICB3cmFwcGVyLmFwcGVuZENoaWxkKHJlc2l6ZXIpO1xyXG5cclxuICAvLyAgIC8vIEhhbmRsZSByZXNpemluZyBsb2dpY1xyXG4gIC8vICAgbGV0IHN0YXJ0WCA9IDAsIHN0YXJ0WSA9IDAsIHN0YXJ0V2lkdGggPSAwLCBzdGFydEhlaWdodCA9IDA7XHJcblxyXG4gIC8vICAgcmVzaXplci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZTogTW91c2VFdmVudCkgPT4ge1xyXG4gIC8vICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgLy8gICAgIHN0YXJ0WCA9IGUuY2xpZW50WDtcclxuICAvLyAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xyXG4gIC8vICAgICBzdGFydFdpZHRoID0gaW1nLndpZHRoO1xyXG4gIC8vICAgICBzdGFydEhlaWdodCA9IGltZy5oZWlnaHQ7XHJcblxyXG4gIC8vICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgLy8gICAgICAgY29uc3QgbmV3V2lkdGggPSBzdGFydFdpZHRoICsgKGUuY2xpZW50WCAtIHN0YXJ0WCk7XHJcbiAgLy8gICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gc3RhcnRIZWlnaHQgKyAoZS5jbGllbnRZIC0gc3RhcnRZKTtcclxuICAvLyAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XHJcbiAgLy8gICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XHJcbiAgLy8gICAgIH07XHJcblxyXG4gIC8vICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgLy8gICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gIC8vICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gIC8vICAgICB9O1xyXG5cclxuICAvLyAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gIC8vICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcmVtb3ZlSW1hZ2VSZXNpemVIYW5kbGVzKCkge1xyXG4gIC8vICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1yZXNpemUtd3JhcHBlcicpO1xyXG4gIC8vICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgLy8gICAgIGNvbnN0IGltZyA9IGV4aXN0aW5nLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xyXG4gIC8vICAgICBpZiAoaW1nKSB7XHJcbiAgLy8gICAgICAgZXhpc3RpbmcucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGltZywgZXhpc3RpbmcpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGV4aXN0aW5nLnJlbW92ZSgpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcblxyXG4gIHJlbW92ZUltYWdlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMudXBsb2FkZWRJbWFnZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIGluc2VydEltYWdlSW5FZGl0b3IoaW1hZ2VVcmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCFlZGl0b3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGltYWdlIGVsZW1lbnRcclxuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgaW1nLnNyYyA9IGltYWdlVXJsO1xyXG4gICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xyXG4gICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgaW1nLnN0eWxlLndpZHRoID0gJzMwMHB4JztcclxuICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgd3JhcHBlciBhcm91bmQgdGhlIGltYWdlIHRvIGFsbG93IHJlc2l6aW5nXHJcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB3cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAgLy8gRW5zdXJlcyB0aGUgd3JhcHBlciBvbmx5IHRha2VzIHVwIHNwYWNlIGZvciB0aGUgaW1hZ2VcclxuICAgIHdyYXBwZXIuc3R5bGUubWFyZ2luID0gJzEwcHgnO1xyXG4gICAgd3JhcHBlci5zdHlsZS5wYWRkaW5nID0gJzVweCc7XHJcbiAgICB3cmFwcGVyLnN0eWxlLmJvcmRlciA9ICcxcHggZGFzaGVkICNjY2MnOyAvLyBPcHRpb25hbCBib3JkZXIgdG8gaW5kaWNhdGUgdGhlIGltYWdlIGFyZWFcclxuXHJcbiAgICAvLyBBcHBlbmQgdGhlIGltYWdlIHRvIHRoZSB3cmFwcGVyXHJcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcblxyXG4gICAgLy8gQXBwZW5kIHRoZSB3cmFwcGVyIHRvIHRoZSBlZGl0b3JcclxuICAgIGVkaXRvci5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcclxuXHJcbiAgICAvLyBNYWtlIHRoZSBpbWFnZSByZXNpemFibGVcclxuICAgIHRoaXMubWFrZUltYWdlUmVzaXphYmxlKHdyYXBwZXIsIGltZyk7XHJcblxyXG4gICAgLy8gT3B0aW9uYWxseSwgYWRkIGEgdGV4dCBub2RlIHRvIG1haW50YWluIGN1cnNvciBwb3NpdGlvbiBhZnRlciBhcHBlbmRpbmcgdGhlIGltYWdlXHJcbiAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBCJyk7ICAvLyBJbnZpc2libGUgY2hhcmFjdGVyIHRvIG1haW50YWluIHBvc2l0aW9uXHJcbiAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIod3JhcHBlcik7XHJcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VJbWFnZVJlc2l6YWJsZSh3cmFwcGVyOiBIVE1MRWxlbWVudCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KTogdm9pZCB7XHJcbiAgICBsZXQgaXNSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgbGV0IHN0YXJ0WCA9IDA7XHJcbiAgICBsZXQgc3RhcnRZID0gMDtcclxuICAgIGxldCBzdGFydFdpZHRoID0gMDtcclxuICAgIGxldCBzdGFydEhlaWdodCA9IDA7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHJlc2l6ZSBoYW5kbGVzIGZvciB0aGUgaW1hZ2VcclxuICAgIGNvbnN0IGNyZWF0ZVJlc2l6ZUhhbmRsZSA9IChcclxuICAgICAgY3Vyc29yOiBzdHJpbmcsXHJcbiAgICAgIHBvc2l0aW9uU3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxyXG4gICAgICByZXNpemVDYWxsYmFjazogKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcikgPT4gdm9pZFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhhbmRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICBoYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5oZWlnaHQgPSAnMTBweCc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwgMCwgMCwgMC41KSc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oaGFuZGxlLnN0eWxlLCBwb3NpdGlvblN0eWxlcyk7XHJcblxyXG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHJlc2l6ZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgc3RhcnRYID0gcmVzaXplRXZlbnQuY2xpZW50WDtcclxuICAgICAgICBzdGFydFkgPSByZXNpemVFdmVudC5jbGllbnRZO1xyXG4gICAgICAgIHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgc3RhcnRIZWlnaHQgPSBpbWcub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAgIGlmIChpc1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xyXG4gICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBtb3ZlRXZlbnQuY2xpZW50WSAtIHN0YXJ0WTtcclxuICAgICAgICAgICAgcmVzaXplQ2FsbGJhY2soZGVsdGFYLCBkZWx0YVkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcclxuICAgICAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGhhbmRsZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZCByZXNpemluZyBoYW5kbGVzIHRvIHRoZSB3cmFwcGVyIGZvciB0aGUgaW1hZ2VcclxuICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgJ253LXJlc2l6ZScsXHJcbiAgICAgIHsgdG9wOiAnLTVweCcsIGxlZnQ6ICctNXB4JyB9LFxyXG4gICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoIC0gZGVsdGFYfXB4YDtcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgLSBkZWx0YVl9cHhgO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAnc2UtcmVzaXplJyxcclxuICAgICAgeyBib3R0b206ICctNXB4JywgcmlnaHQ6ICctNXB4JyB9LFxyXG4gICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoICsgZGVsdGFYfXB4YDtcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgKyBkZWx0YVl9cHhgO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaW5zZXJ0SW1hZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0Py5maWxlcykge1xyXG4gICAgICBBcnJheS5mcm9tKGlucHV0LmZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGltYWdlVXJsID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlcy5wdXNoKGltYWdlVXJsKTsgLy8gU3RvcmUgaW1hZ2UgVVJMIGluIHRoZSBhcnJheVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydEltYWdlKGZpbGU6IEZpbGUpOiBQcm9taXNlPEZpbGU+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmIChmaWxlLnR5cGUgIT09ICdpbWFnZS9wbmcnKSB7XHJcbiAgICAgICAgcmVzb2x2ZShmaWxlKTsgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBmaWxlIGlmIGl0J3Mgbm90IGEgUE5HXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgaW1nLnNyYyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuXHJcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgICAgaWYgKCFjdHgpIHtcclxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBjYW52YXMgY29udGV4dCcpKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcclxuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICAgIGNhbnZhcy50b0Jsb2IoXHJcbiAgICAgICAgICAgIGJsb2IgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChibG9iKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqcGdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlLm5hbWUucmVwbGFjZSgvXFwucG5nJC8sICcuanBnJyksIHsgdHlwZTogJ2ltYWdlL2pwZWcnIH0pO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShqcGdGaWxlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgUE5HIHRvIEpQRycpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdpbWFnZS9qcGVnJyxcclxuICAgICAgICAgICAgMC45NSAvLyBRdWFsaXR5IGZhY3RvciBmb3IgSlBFR1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZScpKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgaW5zZXJ0SW1hZ2VUb0VkaXRvcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgbGV0IGZpbGVUeXBlcyA9IFsnaW1hZ2UvanBlZycsICdpbWFnZS9wbmcnLCAnaW1hZ2UvanBnJ107XHJcblxyXG4gICAgaWYoIWZpbGVUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoIWVkaXRvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgd3JhcHBlci5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyID0gJzFweCBkYXNoZWQgI2NjYyc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5tYXJnaW4gPSAnMTBweCc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5wYWRkaW5nID0gJzVweCc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5ib3JkZXJCbG9ja0NvbG9yID0gJyMwMDdCRkYnO1xyXG4gICAgICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zcmMgPSBpbWFnZVVybDtcclxuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9ICczMDBweCc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcbiAgICAgICAgbGV0IGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc3RhcnRYID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRZID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRXaWR0aCA9IDA7XHJcbiAgICAgICAgbGV0IHN0YXJ0SGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlUmVzaXplSGFuZGxlID0gKFxyXG4gICAgICAgICAgY3Vyc29yOiBzdHJpbmcsXHJcbiAgICAgICAgICBwb3NpdGlvblN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcclxuICAgICAgICAgIHJlc2l6ZUNhbGxiYWNrOiAoZGVsdGFYOiBudW1iZXIsIGRlbHRhWTogbnVtYmVyKSA9PiB2b2lkXHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzEwcHgnO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLmJhY2tncm91bmQgPSAncmdiYSgwLCAwLCAwLCAwLjUpJztcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGhhbmRsZS5zdHlsZSwgcG9zaXRpb25TdHlsZXMpO1xyXG5cclxuICAgICAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAocmVzaXplRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHN0YXJ0WCA9IHJlc2l6ZUV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgICAgIHN0YXJ0WSA9IHJlc2l6ZUV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIHN0YXJ0SGVpZ2h0ID0gaW1nLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpc1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhWSA9IG1vdmVFdmVudC5jbGllbnRZIC0gc3RhcnRZO1xyXG4gICAgICAgICAgICAgICAgcmVzaXplQ2FsbGJhY2soZGVsdGFYLCBkZWx0YVkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoYW5kbGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAgICAgJ253LXJlc2l6ZScsXHJcbiAgICAgICAgICB7IHRvcDogJy01cHgnLCBsZWZ0OiAnLTVweCcgfSxcclxuICAgICAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoIC0gZGVsdGFYfXB4YDtcclxuICAgICAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0IC0gZGVsdGFZfXB4YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgICAgICdzZS1yZXNpemUnLFxyXG4gICAgICAgICAgeyBib3R0b206ICctNXB4JywgcmlnaHQ6ICctNXB4JyB9LFxyXG4gICAgICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XHJcbiAgICAgICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggKyBkZWx0YVh9cHhgO1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgKyBkZWx0YVl9cHhgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xyXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKTtcclxuICAgICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKHdyYXBwZXIpO1xyXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuVGFibGVEaWFsb2coZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5zZXJ0TWFya2VyKCk7XHJcbiAgICB0aGlzLnJvd3MgPSAxO1xyXG4gICAgdGhpcy5jb2xzID0gMTtcclxuXHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMudGFibGVEaWFsb2csIHtcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICB0b3A6IGAke2V2ZW50LmNsaWVudFl9cHhgLFxyXG4gICAgICAgIGxlZnQ6IGAke2V2ZW50LmNsaWVudFh9cHhgLFxyXG4gICAgICB9LFxyXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5pbnNlcnRUYWJsZShyZXN1bHQucm93cywgcmVzdWx0LmNvbHMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5TaWduYXR1cmVEaWFsb2coZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5zZXJ0TWFya2VyKCk7XHJcblxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLnNpZ25hdHVyZURpYWxvZywge1xyXG4gICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgIC8vIHRvcDogYCR7ZXZlbnQuY2xpZW50WX1weGAsXHJcbiAgICAgICAgLy8gbGVmdDogYCR7ZXZlbnQuY2xpZW50WH1weGAsXHJcbiAgICAgICAgdG9wOiAnMzBweCdcclxuICAgICAgfSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZihyZXN1bHQpXHJcbiAgICAgICAgLy8gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKz0gYDxpbWcgc3JjPSR7cmVzdWx0fSBhbHQ9J1NpZ25hdHVyZScgLz5gXHJcbiAgICAgIHRoaXMuaW5zZXJ0SW1hZ2VJbkVkaXRvcihyZXN1bHQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQcmV2aWV3KGNvbHM6IG51bWJlciwgcm93czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmNvbHMgPSBjb2xzO1xyXG4gICAgdGhpcy5yb3dzID0gcm93cztcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGlvbihjb2xJbmRleDogbnVtYmVyLCByb3dJbmRleDogbnVtYmVyLCBkaWFsb2dSZWY6IGFueSkge1xyXG4gICAgdGhpcy5jb2xzID0gY29sSW5kZXg7XHJcbiAgICB0aGlzLnJvd3MgPSByb3dJbmRleDtcclxuICAgIGRpYWxvZ1JlZi5jbG9zZSh7IHJvd3M6IHRoaXMucm93cywgY29sczogdGhpcy5jb2xzIH0pOyAvLyBDbG9zZSBkaWFsb2cgd2l0aCBzZWxlY3Rpb25cclxuICB9XHJcblxyXG4gIG1ha2VGaXJzdFJvd0hlYWRlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAvLyBDaGVjayBpZiBzZWxlY3Rpb24gaXMgaW5zaWRlIHRoZSBlZGl0b3JcclxuICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbkluc2lkZUVkaXRvcihlZGl0b3IsIHNlbGVjdGlvbikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gRmluZCB0aGUgY2xvc2VzdCB0YWJsZSB0byB0aGUgc2VsZWN0aW9uXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZmluZENsb3Nlc3RUYWJsZShzZWxlY3RlZE5vZGUpO1xyXG4gICAgaWYgKCF0YWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBDb252ZXJ0IHRoZSBmaXJzdCByb3cgY2VsbHMgdG8gaGVhZGVyIGNlbGxzXHJcbiAgICBjb25zdCBmaXJzdFJvdyA9IHRhYmxlLnJvd3NbMF07XHJcbiAgICBpZiAoZmlyc3RSb3cpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXJzdFJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNlbGwgPSBmaXJzdFJvdy5jZWxsc1tpXTtcclxuICAgICAgICBjb25zdCB0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XHJcbiAgICAgICAgdGguaW5uZXJIVE1MID0gY2VsbC5pbm5lckhUTUw7XHJcbiAgICAgICAgdGguc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgdGguc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNGMUYxRjAnO1xyXG4gICAgICAgIHRoLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgYmxhY2snO1xyXG4gICAgICAgIHRoLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gJ2NvbGxhcHNlJztcclxuICAgICAgICB0aC5zdHlsZS5wYWRkaW5nID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2VsbCkucGFkZGluZzsgLy8gUmV0YWluIHBhZGRpbmdcclxuICAgICAgICB0aC5zdHlsZS53aWR0aCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLndpZHRoOyAvLyBSZXRhaW4gd2lkdGhcclxuICAgICAgICB0aC5zdHlsZS5oZWlnaHQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS5oZWlnaHQ7XHJcbiAgICAgICAgZmlyc3RSb3cucmVwbGFjZUNoaWxkKHRoLCBjZWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDbG9zZXN0VGFibGUobm9kZTogTm9kZSk6IEhUTUxUYWJsZUVsZW1lbnQgfCBudWxsIHtcclxuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGRvY3VtZW50KSB7XHJcbiAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnVEFCTEUnKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgYXMgSFRNTFRhYmxlRWxlbWVudDtcclxuICAgICAgfVxyXG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRNYXJrZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNsb25lUmFuZ2UoKTtcclxuICAgICAgY29uc3QgbWFya2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBtYXJrZXIuaWQgPSAndGFibGUtbWFya2VyJztcclxuICAgICAgbWFya2VyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIHJhbmdlLmluc2VydE5vZGUobWFya2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluc2VydFRhYmxlKHJvd3M6IHN0cmluZywgY29sczogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByb3dDb3VudCA9IHBhcnNlSW50KHJvd3MsIDEwKTtcclxuICAgIGNvbnN0IGNvbENvdW50ID0gcGFyc2VJbnQoY29scywgMTApO1xyXG5cclxuICAgIGlmIChpc05hTihyb3dDb3VudCkgfHwgaXNOYU4oY29sQ291bnQpIHx8IHJvd0NvdW50IDwgMSB8fCBjb2xDb3VudCA8IDEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBtYXJrZXIgPSBlZGl0b3IucXVlcnlTZWxlY3RvcignI3RhYmxlLW1hcmtlcicpO1xyXG5cclxuICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRoaXMuY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0ZW1wRGl2LmlubmVySFRNTCA9IHRhYmxlSFRNTDtcclxuICAgIGNvbnN0IHRhYmxlID0gdGVtcERpdi5maXJzdEVsZW1lbnRDaGlsZDtcclxuXHJcbiAgICBpZiAobWFya2VyICYmIHRhYmxlKSB7XHJcbiAgICAgIG1hcmtlci5wYXJlbnROb2RlIS5yZXBsYWNlQ2hpbGQodGFibGUsIG1hcmtlcik7XHJcbiAgICAgIHRoaXMuc2V0Q3Vyc29yVG9GaXJzdENlbGwodGFibGUgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgICBlZGl0b3IuZm9jdXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZhbGxiYWNrIGlmIG5vIG1hcmtlciwganVzdCBhcHBlbmRcclxuICAgICAgdGhpcy5hcHBlbmRUYWJsZShlZGl0b3IsIHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudDogbnVtYmVyLCBjb2xDb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCB0YWJsZUhUTUwgPSAnPHRhYmxlIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyB3aWR0aDogMTAwJTsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XCI+JztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xyXG4gICAgICB0YWJsZUhUTUwgKz0gJzx0cj4nO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbENvdW50OyBqKyspIHtcclxuICAgICAgICB0YWJsZUhUTUwgKz0gYDx0ZCBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBoZWlnaHQ6IDJlbTsgcGFkZGluZzogLjRlbTsgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRleHRib3hcIj48L3RkPmA7XHJcbiAgICAgIH1cclxuICAgICAgdGFibGVIVE1MICs9ICc8L3RyPic7XHJcbiAgICB9XHJcbiAgICB0YWJsZUhUTUwgKz0gJzwvdGFibGU+JztcclxuICAgIHJldHVybiB0YWJsZUhUTUw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGVuZFRhYmxlKGVkaXRvcjogSFRNTEVsZW1lbnQsIHJvd0NvdW50OiBudW1iZXIsIGNvbENvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRoaXMuY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICBlZGl0b3IuaW5uZXJIVE1MICs9IHRhYmxlSFRNTDtcclxuICAgIGNvbnN0IGxhc3RJbnNlcnRlZFRhYmxlID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlOmxhc3QtY2hpbGQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIHRoaXMuc2V0Q3Vyc29yVG9GaXJzdENlbGwobGFzdEluc2VydGVkVGFibGUpO1xyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzU2VsZWN0aW9uSW5zaWRlRWRpdG9yKGVkaXRvcjogSFRNTEVsZW1lbnQsIHNlbGVjdGlvbjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgbm9kZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgaWYgKG5vZGUgPT09IGVkaXRvcikgcmV0dXJuIHRydWU7XHJcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDdXJzb3JUb0ZpcnN0Q2VsbCh0YWJsZTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpcnN0Q2VsbCA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3RyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKGZpcnN0Q2VsbCkge1xyXG4gICAgICAvLyBmaXJzdENlbGwuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAndHJ1ZScpO1xyXG4gICAgICBmaXJzdENlbGwuZm9jdXMoKTtcclxuICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICBuZXdSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZmlyc3RDZWxsKTsgLy8gU2VsZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgY2VsbFxyXG4gICAgICBuZXdSYW5nZS5jb2xsYXBzZSh0cnVlKTsgLy8gQ29sbGFwc2UgdG8gdGhlIHN0YXJ0XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnNlcnRQYWdlQnJlYWsoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYWdlQnJlYWsgPSBgPGRpdiBzdHlsZT1cInBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcIj48YnIgLz48L2Rpdj5gO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgcGFnZUJyZWFrKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdENvbnRlbnQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYoIWVkaXRvcikgcmV0dXJuO1xyXG4gICAgY29uc3QgY29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7IC8vIEdldCB0aGUgSFRNTCBjb250ZW50IGZyb20gdGhlIGVkaXRvclxyXG4gICAgY29uc3QgcGxhaW5UZXh0Q29udGVudCA9IGVkaXRvci5pbm5lclRleHQ7IC8vIE9wdGlvbmFsbHksIGdldCBwbGFpbiB0ZXh0IGNvbnRlbnRcclxuICAgIGlmICghZWRpdG9yLmlubmVySFRNTC50cmltKCkpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nO1xyXG4gICAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGNvbnRlbnQpO1xyXG4gIH1cclxuXHJcbiAgLy9TaWduYXR1cmVcclxuXHJcbiAgY2xvc2VTaWduRGlhbG9nKGRpYWxvZ1JlZjogYW55KXtcclxuICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuICBzdWJtaXRTaWduRGlhbG9nKGRpYWxvZ1JlZjogYW55KXtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNpZ25hdHVyZVBhZC50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xyXG4gICAgZGlhbG9nUmVmLmNsb3NlKGRhdGEpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZGltZW5zaW9uXCIgPlxyXG4gIDxkaXYgY2xhc3M9XCJyaWNoLXRleHQtZWRpdG9yXCI+XHJcbiAgICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9vbGJhclwiPlxyXG4gICAgICA8c2VsZWN0ICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8udGV4dEZvcm1hdCA/PyB0cnVlXCIgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIZWFkXCIgKGNoYW5nZSk9XCJzZXRIZWFkaW5nKCRldmVudClcIj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XCI+UGFyYWdyYXBoPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgxXCIgc3R5bGU9XCJmb250LXNpemU6IDMycHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5IMTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJIMlwiIHN0eWxlPVwiZm9udC1zaXplOiAyOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XCI+SDI8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1wiPkgzPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg0XCIgc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5INDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcIj5INTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINlwiIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcIj5INjwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgICAgPHNlbGVjdCAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmZvbnRTaXplID8/IHRydWVcIiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZvbnRcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwic2V0Rm9udFNpemUoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjEyXCI+MTJweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE0XCIgc2VsZWN0ZWQ+MTRweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE2cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE2XCI+MTZweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE4XCI+MThweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjIwXCI+MjBweDwvb3B0aW9uPiAgXHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjRcIj4yNHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjhweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjhcIj4yOHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMzJweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMzJcIj4zMnB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogNDhweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiNDhcIj40OHB4PC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYm9sZCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnYm9sZCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJCb2xkXCIgdGl0bGU9XCJCb2xkXCIgPlxyXG4gICAgICAgIDxzdmcgIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmlld0JveD1cIi02LjUgMCAyOCAzMlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDx0aXRsZT5ib2xkPC90aXRsZT4gPHBhdGggZD1cIk0wIDI1LjUzMXYxLjM0NGMxLjA2My0wLjAzMSAxLjkzOC0wLjA2MyAyLjU2My0wLjA5NCAwLjYyNSAwIDEuMDk0LTAuMDMxIDEuMzEzLTAuMDMxIDEuNjU2LTAuMTI1IDMuMDYzLTAuMjE5IDQuMjgxLTAuMTg4bDIuODEzIDAuMDYzYzIuNDM4IDAgNC4yNS0wLjMxMyA1Ljc1LTEgMC43MTktMC4zNDQgMS4zNDQtMC44NDQgMS45NjktMS41MzEgMC40NjktMC40NjkgMC44MTMtMS4wMzEgMS4wMzEtMS42NTYgMC4yNS0wLjg0NCAwLjM3NS0xLjU5NCAwLjM3NS0yLjI4MSAwLTIuNS0xLjcxOS00LjYyNS01LjA5NC01LjQwNiAwLjUzMS0wLjI1IDEuMDMxLTAuNSAxLjM3NS0wLjY4OHMwLjYyNS0wLjMxMyAwLjc4MS0wLjQzOGMxLjE4OC0wLjg3NSAxLjc4MS0xLjkwNiAxLjc4MS0zLjI4MSAwLTAuNTk0LTAuMDk0LTEuMTg4LTAuMjgxLTEuNzE5LTAuMzc1LTEuMDk0LTEuMjE5LTItMi40MDYtMi41NjMtMC41MzEtMC4zMTMtMS4wMzEtMC40NjktMS4zNzUtMC41MzEtMC45MzgtMC4yNS0xLjg0NC0wLjM3NS0yLjcxOS0wLjM3NWgtMS4wOTRjLTAuMjE5IDAtMC40MDYgMC0wLjUzMS0wLjAzMWgtMC41Yy0wLjA2MyAwLTAuMTU2IDAtMC4yNSAwLjAzMWgtMC42MjVsLTUuNDA2IDAuMTU2LTMuNzE5IDAuMDk0IDAuMDYzIDEuMTg4YzAuODc1IDAuMTI1IDEuNDA2IDAuMTg4IDEuNjI1IDAuMTg4IDAuNDM4IDAgMC43ODEgMC4wOTQgMC45NjkgMC4yMTkgMC4wOTQgMCAwLjE1NiAwLjA2MyAwLjE4OCAwLjEyNSAwLjA2MyAwLjIxOSAwLjEyNSAwLjY4OCAwLjE1NiAxLjU2MyAwLjA2MyAxLjU2MyAwLjA2MyAyLjgxMyAwLjA2MyAzLjc1IDAuMDMxIDAuOTY5IDAuMDMxIDEuNjI1IDAuMDk0IDJ2Ny4wMzFjMCAxLjIxOS0wLjAzMSAyLjEyNS0wLjE1NiAyLjc1LTAuMDMxIDAuMjE5LTAuMTI1IDAuNDM4LTAuMjgxIDAuNjg4LTAuNDM4IDAuMTg4LTEgMC4zNzUtMS43NSAwLjQ2OS0wLjM3NSAwLjA2My0wLjcxOSAwLjEyNS0xIDAuMTU2ek03LjcxOSAxNC4yODF2LTIuNDY5YzAuMDYzLTEuNzE5IDAtMi45NjktMC4wMzEtMy45NjktMC4wNjMtMC40MzgtMC4wNjMtMC44NDQtMC4wNjMtMS4wNjMgMC43NS0wLjE1NiAxLjM0NC0wLjIxOSAxLjg0NC0wLjIxOSAxLjYyNSAwIDIuODQ0IDAuMzQ0IDMuNjU2IDEuMDk0IDAuODEzIDAuNjg4IDEuMjE5IDEuNTYzIDEuMjE5IDIuNjU2IDAgMi45NjktMS43NSA0LjA5NC01LjA2MyA0LjA5NC0wLjU2MyAwLTEuMDk0LTAuMDMxLTEuNTYzLTAuMTI1ek03LjcxOSAyMC40MDZ2LTQuNWMwLjMxMy0wLjA2MyAwLjc1LTAuMTI1IDEuNDM4LTAuMTI1IDEuNTk0LTAuMDMxIDIuODEzIDAuMTI1IDMuNTYzIDAuNDM4IDEuNTMxIDAuNTYzIDIuNTk0IDIuMTg4IDIuNTk0IDQuMzQ0IDAgMS4wMzEtMC4yMTkgMS44NDQtMC41NjMgMi41NjMtMC4zNzUgMC43MTktMC45MDYgMS4yMTktMS43MTkgMS41OTQtMS42NTYgMC43ODEtMy43MTkgMC43MTktNS4xMjUgMC4xMjUtMC4wOTQtMC4yNS0wLjEyNS0wLjQzOC0wLjEyNS0wLjU5NHpcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uaXRhbGljID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiSXRhbGljXCIgdGl0bGU9XCJJdGFsaWNcIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfaXRhbGljPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiNCAwIDIwIDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxnIGlkPVwiRWRpdCAvIEl0YWxpY1wiPiA8cGF0aCBpZD1cIlZlY3RvclwiIGQ9XCJNOCAxOUgxME0xMCAxOUgxMk0xMCAxOUwxNCA1TTEyIDVIMTRNMTQgNUgxNlwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8udW5kZXJsaW5lID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCd1bmRlcmxpbmUnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiVW5kZXJsaW5lXCIgdGl0bGU9XCJVbmRlcmxpbmVcIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfdW5kZXJsaW5lPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiNCAwIDE4IDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxnIGlkPVwiRWRpdCAvIFVuZGVybGluZVwiPiA8cGF0aCBpZD1cIlZlY3RvclwiIGQ9XCJNNiAxOUgxOE04IDVWMTFDOCAxMy4yMDkxIDkuNzkwODYgMTUgMTIgMTVDMTQuMjA5MSAxNSAxNiAxMy4yMDkxIDE2IDExVjVcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnN0cmlrZXRocm91Z2ggPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ3N0cmlrZXRocm91Z2gnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiU3RyaWtldGhyb3VnaFwiIHRpdGxlPVwiU3RyaWtldGhyb3VnaFwiPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPnN0cmlrZXRocm91Z2hfczwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjQgMCAyMCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8ZyBpZD1cIkVkaXQgLyBTdHJpa2V0aHJvdWdoXCI+IDxwYXRoIGlkPVwiVmVjdG9yXCIgZD1cIk0xMi4wMDA1IDEyLjAwMDFDMTIuODk1OSAxMi4wMDAxIDEzLjc3NDkgMTIuMTkyNSAxNC41NDU3IDEyLjU1NzFDMTQuODkzOSAxMi43MjE4IDE1LjIxNDYgMTIuOTE5MiAxNS41MDA5IDEzLjE0MzdDMTUuODQ4NCAxMy40MTYyIDE2LjE0NTcgMTMuNzI5IDE2LjM4MjIgMTQuMDczMkMxNi44MTM2IDE0LjcwMDkgMTcuMDI2MyAxNS40MDk2IDE2Ljk5ODIgMTYuMTI1NkMxNi45NyAxNi44NDE2IDE2LjcwMiAxNy41Mzg1IDE2LjIyMjIgMTguMTQzM0MxNS43NDI0IDE4Ljc0ODEgMTUuMDY4NCAxOS4yMzg2IDE0LjI3MDUgMTkuNTYzOEMxMy40NzI3IDE5Ljg4OSAxMi41ODAyIDIwLjAzNzMgMTEuNjg2NSAxOS45OTIzQzEwLjc5MjggMTkuOTQ3MyA5LjkzMTA0IDE5LjcxMDggOS4xOTA0MyAxOS4zMDgyQzguNDQ5ODIgMTguOTA1NSA3Ljg1NzgyIDE4LjM1MTQgNy40NzY1NiAxNy43MDMyTTEyLjAwMDUgMTIuMDAwMUg0TTEyLjAwMDUgMTIuMDAwMUgyME0xNi41MjQzIDYuMjk3MThDMTYuMTQzIDUuNjQ5IDE1LjU1MTIgNS4wOTQ2MiAxNC44MTA1IDQuNjkxOTdDMTQuMDY5OSA0LjI4OTMyIDEzLjIwNzYgNC4wNTI4NyAxMi4zMTQgNC4wMDc4OUMxMS40MjAzIDMuOTYyOTEgMTAuNTI3OCA0LjExMDkxIDkuNzI5OTggNC40MzYxM0M4LjkzMjEzIDQuNzYxMzUgOC4yNTgxMiA1LjI1MjA1IDcuNzc4MzIgNS44NTY4OUM3LjI5ODUyIDYuNDYxNzMgNy4wMzA1NyA3LjE1ODg1IDcuMDAyNDQgNy44NzQ4NUM2Ljk5NDIgOC4wODQ2MyA3LjAwNjY5IDguMjkzNDUgNy4wMzkyNCA4LjUwMDE0XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5hbGlnbkxlZnQgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlMZWZ0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkFsaWduIExlZnRcIiB0aXRsZT1cIkFsaWduIExlZnRcIiA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2xlZnQ8L21hdC1pY29uPiAtLT5cclxuICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMTEgMUgxVjNIMTFWMVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xIDVIMTVWN0gxVjVaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTEgOUgxVjExSDExVjlaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTUgMTNIMVYxNUgxNVYxM1pcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5hbGlnbkNlbnRlciA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUNlbnRlcicpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJDZW50ZXJcIiB0aXRsZT1cIkFsaWduIENlbnRlclwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fY2VudGVyPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTE1IDFIMVYzSDE1VjFaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMSA1SDE1VjdIMVY1WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTE1IDlIMVYxMUgxNVY5WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTExIDEzSDFWMTVIMTFWMTNaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYWxpZ25SaWdodCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeVJpZ2h0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkFsaWduIFJpZ2h0XCIgdGl0bGU9XCJBbGlnbiBSaWdodFwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fcmlnaHQ8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xNSAxSDVWM0gxNVYxWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEgNUgxNVY3SDFWNVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSA5SDVWMTFIMTVWOVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSAxM0gxVjE1SDE1VjEzWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/Lmp1c3RpZnkgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlGdWxsJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkp1c3RpZnlcIiB0aXRsZT1cIkp1c3RpZnlcIiA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2p1c3RpZnk8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmlld0JveD1cIjAgLTIuNSAyOSAyOVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj48cGF0aCBkPVwibTEuMzM0IDIuNjY2aDI2LjY2NWMuMDExIDAgLjAyNC4wMDEuMDM3LjAwMS43MzcgMCAxLjMzNC0uNTk3IDEuMzM0LTEuMzM0cy0uNTk3LTEuMzM0LTEuMzM0LTEuMzM0Yy0uMDEzIDAtLjAyNiAwLS4wMzkuMDAxaC4wMDItMjYuNjY1Yy0uNzIuMDIxLTEuMjk2LjYxLTEuMjk2IDEuMzMzcy41NzYgMS4zMTIgMS4yOTQgMS4zMzNoLjAwMnpcIj48L3BhdGg+PHBhdGggZD1cIm0yNy45OTkgNS4zMzNoLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDIgMjYuNjY1Yy4wMTEgMCAuMDI0LjAwMS4wMzcuMDAxLjczNyAwIDEuMzM0LS41OTcgMS4zMzQtMS4zMzRzLS41OTctMS4zMzQtMS4zMzQtMS4zMzRjLS4wMTMgMC0uMDI2IDAtLjAzOS4wMDF6XCI+PC9wYXRoPjxwYXRoIGQ9XCJtMjcuOTk5IDEwLjY2N2gtMjYuNjY1Yy0uNzIuMDIxLTEuMjk2LjYxLTEuMjk2IDEuMzMzcy41NzYgMS4zMTIgMS4yOTQgMS4zMzNoLjAwMiAyNi42NjVjLjcyLS4wMjEgMS4yOTYtLjYxIDEuMjk2LTEuMzMzcy0uNTc2LTEuMzEyLTEuMjk0LTEuMzMzelwiPjwvcGF0aD48cGF0aCBkPVwibTI3Ljk5OSAyMS4zMzNoLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDIgMjYuNjY1Yy43Mi0uMDIxIDEuMjk2LS42MSAxLjI5Ni0xLjMzM3MtLjU3Ni0xLjMxMi0xLjI5NC0xLjMzM3pcIj48L3BhdGg+PHBhdGggZD1cIm0yNy45OTkgMTZoLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDIgMjYuNjY1Yy43Mi0uMDIxIDEuMjk2LS42MSAxLjI5Ni0xLjMzM3MtLjU3Ni0xLjMxMi0xLjI5NC0xLjMzM3pcIj48L3BhdGg+PC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5idWxsZXRMaXN0ID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlVub3JkZXJlZCBMaXN0XCIgdGl0bGU9XCJCdWxsZXQgTGlzdFwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfbGlzdF9idWxsZXRlZDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmlld0JveD1cIjAgMCAzNiA0OFwiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPjxwYXRoIGQ9XCJNOCAyMWMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6TTggOWMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6bTAgMjQuMzNjLTEuNDcgMC0yLjY3IDEuMTktMi42NyAyLjY3czEuMiAyLjY3IDIuNjcgMi42NyAyLjY3LTEuMTkgMi42Ny0yLjY3LTEuMi0yLjY3LTIuNjctMi42N3pNMTQgMzhoMjh2LTRIMTR2NHptMC0xMmgyOHYtNEgxNHY0em0wLTE2djRoMjh2LTRIMTR6XCI+PC9wYXRoPjwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8ubnVtYmVyZWRMaXN0ID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRPcmRlcmVkTGlzdCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJPcmRlcmVkIExpc3RcIiB0aXRsZT1cIk51bWJlcmVkIExpc3RcIiA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X2xpc3RfbnVtYmVyZWQ8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmVyc2lvbj1cIjEuMVwiIGlkPVwiQ2FwYV8xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZpZXdCb3g9XCIwIDAgOTQuNDc5IDk0LjQ3OVwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxnPiA8Zz4gPHBhdGggZD1cIk05Mi40NzksNi44MjFIMjYuODIzYy0xLjEwNCwwLTIsMC44OTYtMiwyVjE5LjU4YzAsMS4xMDQsMC44OTYsMiwyLDJoNjUuNjU2YzEuMTA0LDAsMi0wLjg5NiwyLTJWOC44MjEgQzk0LjQ3OSw3LjcxNyw5My41ODQsNi44MjEsOTIuNDc5LDYuODIxelwiPjwvcGF0aD4gPHBhdGggZD1cIk05Mi40NzksNDAuNDU3SDI2LjgyM2MtMS4xMDQsMC0yLDAuODk2LTIsMnYxMC43NjFjMCwxLjEwNCwwLjg5NiwyLDIsMmg2NS42NTZjMS4xMDQsMCwyLTAuODk2LDItMlY0Mi40NTcgQzk0LjQ3OSw0MS4zNTIsOTMuNTg0LDQwLjQ1Nyw5Mi40NzksNDAuNDU3elwiPjwvcGF0aD4gPHBhdGggZD1cIk05Mi40NzksNzUuMTA5SDI2LjgyM2MtMS4xMDQsMC0yLDAuODk2LTIsMnYxMC43NTljMCwxLjEwNCwwLjg5NiwyLDIsMmg2NS42NTZjMS4xMDQsMCwyLTAuODk2LDItMlY3Ny4xMDkgQzk0LjQ3OSw3Ni4wMDQsOTMuNTg0LDc1LjEwOSw5Mi40NzksNzUuMTA5elwiPjwvcGF0aD4gPHBhdGggZD1cIk0xLjg0MiwxMS4xMDRjMC40MjMsMC4wNTEsMC44NDgtMC4wOCwxLjE2Ny0wLjM2bDAuOTE0LTAuNzk5djEyLjk3M2MwLDAuODI4LDAuNjcyLDEuNSwxLjUsMS41aDEuNTQ2IGMwLjgyOCwwLDEuNS0wLjY3MiwxLjUtMS41VjUuNTY3YzAtMC44MjgtMC42NzItMS41LTEuNS0xLjVINS4zNzhjLTAuMzU2LDAtMC43MDEsMC4xMjctMC45NzMsMC4zNThMMC41MjcsNy43MjggYy0wLjU4OSwwLjUwMS0wLjcsMS4zNjktMC4yNTYsMi4wMDNsMC41MjIsMC43NDVDMS4wNCwxMC44MjUsMS40MiwxMS4wNTMsMS44NDIsMTEuMTA0elwiPjwvcGF0aD4gPHBhdGggZD1cIk0yLjU0NiwzNy41Yy0wLjY0NywwLjIzLTEuMDU2LDAuODcyLTAuOTksMS41NTZsMC4wOTYsMC45OTljMC4wNDgsMC40OTcsMC4zMzksMC45MzgsMC43NzgsMS4xNzYgYzAuNDM4LDAuMjM4LDAuOTY3LDAuMjQzLDEuNDA5LDAuMDExYzEuMTgtMC42MTUsMS45MjMtMC43NzUsMi45MjItMC41MzRjMC43MSwwLjE2MywxLjE4OCwwLjU4NiwxLjQzOCwxLjIyNSBjMC4zNzgsMS4xNDMsMC4zOTUsMi45NTctMi44NTQsNi44NzNsLTIuNTA2LDIuOTk2Yy0wLjU4OSwwLjY4OC0wLjk5LDEuMTE5LTEuMzAyLDEuNDA0Yy0wLjMxMiwwLjI4NC0wLjQ4OCwwLjY4OC0wLjQ4OCwxLjEwNyB2MS40NzVjMCwwLjgyOCwwLjY3MiwxLjUsMS41LDEuNWg5LjEzMmMwLjgyOCwwLDEuNS0wLjY3MiwxLjUtMS41VjU1LjAxYzAtMC44MjgtMC42NzItMS41LTEuNS0xLjVINi44OTYgYzAuNDU4LTAuNTE1LDEuMDM3LTEuMjExLDEuNzE2LTIuMDYzYzIuODAzLTMuNDY4LDUuMDYxLTYuNjQ1LDQuMjkyLTEwLjM3NmMtMC4zMDktMS42NzItMS4yNDctMi45NjYtMi43MzEtMy43NTIgYy0wLjgyNi0wLjQyNC0xLjg3OS0wLjYzOS0zLjEyNy0wLjYzOUM1LjYyOSwzNi42OCw0LjAzMSwzNi45NzEsMi41NDYsMzcuNXpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTAuNDkxLDc5LjUxNmMwLjI1LTAuMTM1LDAuNDg3LTAuMjg5LDAuNzQtMC40ODNjMS43MTgtMS4zMTMsMS44MDEtMy4zMzUsMS43ODYtMy44ODUgYy0wLjAwMS0xLjg3OC0wLjcxMi0zLjMxOC0yLjE2Ni00LjQwMWMtMS4wMjYtMC43Ny0yLjUzNC0xLjE3Ny00LjM2MS0xLjE3N2MtMS4zNDcsMC0yLjc4NywwLjIxMi00LjA1NywwLjU5NiBjLTAuNjY4LDAuMjAyLTEuMTA3LDAuODM5LTEuMDYzLDEuNTMzbDAuMDU4LDAuODhjMC4wMzEsMC40NzEsMC4yOCwwLjg5NiwwLjY3MywxLjE1NWMwLjM5NCwwLjI1OSwwLjg4NiwwLjMxOSwxLjMyNywwLjE1OSBjMC44NjQtMC4zMDcsMS41NzEtMC40NSwyLjIyMy0wLjQ1YzAuMjI5LDAsMC40NTcsMC4wMTksMC43MjIsMC4wNjNjMC45NCwwLjEyNywxLjU2MywwLjU0OSwxLjksMS4yODMgYzAuMjM3LDAuNTIsMC4xOSwxLjQ0NS0wLjA4MywxLjg4NWMtMC42NTQsMS4wMTQtMi40MzgsMS4yMTctMy40NDMsMS4yNWMtMC44MSwwLjAyNC0xLjQ1MywwLjY4OC0xLjQ1MywxLjQ5OHYwLjY1OCBjMCwwLjgyOCwwLjY4NywxLjUsMS41MTUsMS41YzEuNTc1LDAsMi4zMTEsMC4zMDksMi41OTYsMC40ODVjMC43MzcsMC40NjUsMS4wNjUsMS4wNDMsMS4wNjYsMS45MTggYzAuMDI1LDAuOTEyLTAuMzQ4LDEuNjA2LTEuMTI5LDIuMTIxYy0xLjAxNCwwLjY1MS0yLjY0LDAuNjQ3LTQuNTA1LDAuMDMyYy0wLjQzOC0wLjE0Ni0wLjkxOC0wLjA4Mi0xLjMwMiwwLjE3NSBjLTAuMzg0LDAuMjU1LTAuNjI5LDAuNjcyLTAuNjY1LDEuMTMybC0wLjA2OCwwLjg3MkMwLjc1LDg4Ljk3MywxLjEzNSw4OS41ODgsMS43NSw4OS44M2MwLjMzLDAuMTMsMC41NTEsMC4xODMsMS4wMjIsMC4yODEgYzAuODU3LDAuMTk2LDEuODQsMC4zMDIsMi44NDIsMC4zMDJjMS40OTMsMCw0LjI0OC0wLjI0Nyw1Ljk0NC0xLjkxOWMxLjY1Ny0xLjY5LDEuOTc0LTQuMTEsMS41Ni01LjcyOSBDMTIuNjM2LDgwLjcwNCwxMS40NjEsNzkuOTQ2LDEwLjQ5MSw3OS41MTZ6XCI+PC9wYXRoPiA8L2c+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5pbWFnZSA/PyB0cnVlXCIgYXJpYS1sYWJlbD1cIkluc2VydCBJbWFnZVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCIgdGl0bGU9XCJJbnNlcnQgSW1hZ2VcIiA+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLnBuZywuanBnLC5qcGVnXCIgIChjaGFuZ2UpPVwiaW5zZXJ0SW1hZ2VUb0VkaXRvcigkZXZlbnQpXCJcclxuICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtNTAlOyB0b3A6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG9wYWNpdHk6IDA7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbiBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lO1wiPmluc2VydF9waG90b19vdXRsaW5lZDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjIgMSAyMCAyMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTE0LjI2NDcgMTUuOTM3N0wxMi41NDczIDE0LjIzNDZDMTEuNzU4IDEzLjQ1MTkgMTEuMzYzMyAxMy4wNjA1IDEwLjkwODkgMTIuOTEzN0MxMC41MDkyIDEyLjc4NDUgMTAuMDc5IDEyLjc4NDUgOS42NzkyMiAxMi45MTM3QzkuMjI0ODUgMTMuMDYwNSA4LjgzMDE3IDEzLjQ1MTkgOC4wNDA4MiAxNC4yMzQ2TDQuMDQxOTMgMTguMjYyMk0xNC4yNjQ3IDE1LjkzNzdMMTQuNjA2IDE1LjU5OTFDMTUuNDEyIDE0Ljc5OTkgMTUuODE0OSAxNC40MDAzIDE2LjI3NzMgMTQuMjU0NUMxNi42ODM5IDE0LjEyNjIgMTcuMTIwOCAxNC4xMzEyIDE3LjUyNDQgMTQuMjY4OEMxNy45ODMyIDE0LjQyNTMgMTguMzc2OSAxNC44MzQgMTkuMTY0MiAxNS42NTE1TDIwIDE2LjUwMDFNMTQuMjY0NyAxNS45Mzc3TDE4LjIyIDE5Ljk2MjhNMTguMjIgMTkuOTYyOEMxNy44NzAzIDIwIDE3LjQyMTMgMjAgMTYuOCAyMEg3LjJDNi4wNzk4OSAyMCA1LjUxOTg0IDIwIDUuMDkyMDIgMTkuNzgyQzQuNzE1NyAxOS41OTAzIDQuNDA5NzMgMTkuMjg0MyA0LjIxNzk5IDE4LjkwOEM0LjEyNTgzIDE4LjcyNzEgNC4wNzI2NCAxOC41MjI2IDQuMDQxOTMgMTguMjYyMk0xOC4yMiAxOS45NjI4QzE4LjUwMDcgMTkuOTMyOSAxOC43MTc1IDE5Ljg3OTEgMTguOTA4IDE5Ljc4MkMxOS4yODQzIDE5LjU5MDMgMTkuNTkwMyAxOS4yODQzIDE5Ljc4MiAxOC45MDhDMjAgMTguNDgwMiAyMCAxNy45MjAxIDIwIDE2LjhWMTNNMTEgNEg3LjJDNi4wNzk4OSA0IDUuNTE5ODQgNCA1LjA5MjAyIDQuMjE3OTlDNC43MTU3IDQuNDA5NzMgNC40MDk3MyA0LjcxNTY5IDQuMjE3OTkgNS4wOTIwMkM0IDUuNTE5ODQgNCA2LjA3OTkgNCA3LjJWMTYuOEM0IDE3LjQ0NjYgNCAxNy45MDY2IDQuMDQxOTMgMTguMjYyMk0xOCA5VjZNMTggNlYzTTE4IDZIMjFNMTggNkgxNVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnRhYmxlID8/IHRydWVcIiAoY2xpY2spPVwib3BlblRhYmxlRGlhbG9nKCRldmVudClcIiB0eXBlPVwiYnV0dG9uXCIgIHRpdGxlPVwiVGFibGVcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDaG9vc2UgdGFibGUgcm93cyBhbmQgY29sdW1uc1wiPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmJvcmRlcl9hbGw8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjZweFwiIGhlaWdodD1cIjI2cHhcIiB2aWV3Qm94PVwiMiAxMiAyMCAzXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMyA5SDIxTTMgMTVIMjFNOSA5TDkgMjBNMTUgOUwxNSAyME02LjIgMjBIMTcuOEMxOC45MjAxIDIwIDE5LjQ4MDIgMjAgMTkuOTA4IDE5Ljc4MkMyMC4yODQzIDE5LjU5MDMgMjAuNTkwMyAxOS4yODQzIDIwLjc4MiAxOC45MDhDMjEgMTguNDgwMiAyMSAxNy45MjAxIDIxIDE2LjhWNy4yQzIxIDYuMDc5OSAyMSA1LjUxOTg0IDIwLjc4MiA1LjA5MjAyQzIwLjU5MDMgNC43MTU2OSAyMC4yODQzIDQuNDA5NzMgMTkuOTA4IDQuMjE3OTlDMTkuNDgwMiA0IDE4LjkyMDEgNCAxNy44IDRINi4yQzUuMDc5OSA0IDQuNTE5ODQgNCA0LjA5MjAyIDQuMjE3OTlDMy43MTU2OSA0LjQwOTczIDMuNDA5NzMgNC43MTU2OSAzLjIxNzk5IDUuMDkyMDJDMyA1LjUxOTg0IDMgNi4wNzk4OSAzIDcuMlYxNi44QzMgMTcuOTIwMSAzIDE4LjQ4MDIgMy4yMTc5OSAxOC45MDhDMy40MDk3MyAxOS4yODQzIDMuNzE1NjkgMTkuNTkwMyA0LjA5MjAyIDE5Ljc4MkM0LjUxOTg0IDIwIDUuMDc5ODkgMjAgNi4yIDIwWlwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnRhYmxlSGVhZGVyID8/IHRydWVcIiBjbGFzcz1cIm1iLTFcIiAoY2xpY2spPVwibWFrZUZpcnN0Um93SGVhZGVyKClcIiB0eXBlPVwiYnV0dG9uXCIgIGFyaWEtbGFiZWw9XCJNYWtlIEhlYWRlclwiIHRpdGxlPVwiVGFibGUgSGVhZGVyXCIgPlxyXG4gICAgICAgIDwhLS0gPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDIwcHg7XCIgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICBwYWdlX2hlYWRlclxyXG4gICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgPHN2ZyBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHZpZXdCb3g9XCIwIDAgMTkyMCAxOTIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMjEzLjMzMyAwQzk1LjUxMjYgMCAwIDk1LjUxMjYgMCAyMTMuMzMzVjE3MDYuNjdDMCAxODI0LjQ5IDk1LjUxMjYgMTkyMCAyMTMuMzMzIDE5MjBIMTcwNi42N0MxODI0LjQ5IDE5MjAgMTkyMCAxODI0LjQ5IDE5MjAgMTcwNi42N1YyMTMuMzMzQzE5MjAgOTUuNTEyNiAxODI0LjQ5IDAgMTcwNi42NyAwSDIxMy4zMzNaTTI2Ni42NjcgNzQ2LjY2N0MyMzcuMjExIDc0Ni42NjcgMjEzLjMzMyA3MjIuNzg4IDIxMy4zMzMgNjkzLjMzM1YzNzMuMzMzQzIxMy4zMzMgMzQzLjg3OCAyMzcuMjExIDMyMCAyNjYuNjY3IDMyMEgxNjUzLjMzQzE2ODIuNzkgMzIwIDE3MDYuNjcgMzQzLjg3OCAxNzA2LjY3IDM3My4zMzNWNjkzLjMzM0MxNzA2LjY3IDcyMi43ODggMTY4Mi43OSA3NDYuNjY3IDE2NTMuMzMgNzQ2LjY2N0gyNjYuNjY3WlwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5zaWduYXR1cmUgPz8gdHJ1ZVwiIChjbGljayk9XCJvcGVuU2lnbmF0dXJlRGlhbG9nKCRldmVudClcIiB0eXBlPVwiYnV0dG9uXCIgIHRpdGxlPVwiU2lnbmF0dXJlXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2hvb3NlIHRhYmxlIHJvd3MgYW5kIGNvbHVtbnNcIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5ib3JkZXJfYWxsPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI4IDI4XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiBmaWxsPVwiIzAwMDAwMFwiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8IS0tIFVwbG9hZGVkIHRvOiBTVkcgUmVwbywgd3d3LnN2Z3JlcG8uY29tLCBHZW5lcmF0b3I6IFNWRyBSZXBvIE1peGVyIFRvb2xzIC0tPiA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gPGcgaWQ9XCLwn5SNLVByb2R1Y3QtSWNvbnNcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPiA8ZyBpZD1cImljX2ZsdWVudF9zaWduYXR1cmVfMjhfcmVndWxhclwiIGZpbGw9XCIjMjEyMTIxXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiPiA8cGF0aCBkPVwiTTE2LjQ3OTg5NTYsMjEuMDAxOTU3OCBMMTYuNzUsMjEgQzE3Ljk3MDIzNTIsMjEgMTguNjExMjQ0MSwyMS41MDU4MDMyIDE5LjQwMjA2MjcsMjIuNzA0MTY2MiBMMTkuNzk1ODI3OCwyMy4zMTI0NDA5IEMyMC4xMDI4MjY2LDIzLjc2NjkzOCAyMC4yOTQ0Mzc0LDIzLjk1NzMyNDcgMjAuNTM1Nzg0LDI0LjA1Njc5MjkgQzIwLjk2ODQ4NzMsMjQuMjM1MTI2NiAyMS4zMjcxMDA4LDI0LjE0NzQ0NDYgMjIuNjQ0MDc4MiwyMy41MTMzMjEzIEwyMy4wNDczMjczLDIzLjMxNzAzMTkgQzIzLjg3MDk5ODIsMjIuOTEyNjcxMSAyNC40MzMwMjg2LDIyLjY4MTE2MDYgMjUuMDY4MDk4MywyMi41MjIzOTMxIEMyNS40Njk5NDQ1LDIyLjQyMTkzMTYgMjUuODc3MTQ1MywyMi42NjYyNTIxIDI1Ljk3NzYwNjksMjMuMDY4MDk4MyBDMjYuMDc4MDY4NCwyMy40Njk5NDQ1IDI1LjgzMzc0NzksMjMuODc3MTQ1MyAyNS40MzE5MDE3LDIzLjk3NzYwNjkgQzI1LjAzNzE2MDYsMjQuMDc2MjkyMiAyNC42NTg5NDY1LDI0LjIxNzg4MTkgMjQuMTY0MTM2NCwyNC40NDU4OTk3IEwyMy4wMDU0ODk5LDI1LjAwMzI2NzMgQzIxLjQzNzYzMDIsMjUuNzQzNjk0NCAyMC45MDU5MDA5LDI1LjgzMTczMjEgMTkuOTY0MjE2LDI1LjQ0MzYyNzUgQzE5LjMzOTEyMzcsMjUuMTg2MDAyOCAxOC45ODM2NzY1LDI0LjgxMzI5OCAxOC40NjM1NjM5LDI0LjAxODAyMjcgTDE4LjI2ODg5MDMsMjMuNzE0MDg0OSBDMTcuNzA3MTExMiwyMi44Mjg4NzMxIDE3LjQwNTc3OTQsMjIuNTM4NDUzOCAxNi44Njg4NDQ0LDIyLjUwMzY2NTUgTDE2Ljc1LDIyLjUgQzE2LjIwMTczMDYsMjIuNSAxNi4wOTMzMTA0LDIyLjU2ODQ1NzIgMTQuMDA5MjgxLDI0LjExNTAyNDEgQzEyLjI2NzAzOTUsMjUuNDA3OTQ4OCAxMC45MzgzMzU5LDI2LjAyNTQ5ODQgOS4yNDg2NDI0MywyNi4wMjU0OTg0IEM3LjE4ODcyODY5LDI2LjAyNTQ5ODQgNS4yNDc3MzM2NywyNS42NDcwNjcgMy40MzE0NTg3NSwyNC44OTA1MzYzIEw2LjMxMzc3ODAzLDI0LjIyNDE3ODQgQzcuMjU3Njk0MDQsMjQuNDI1MDc2MiA4LjIzNTY3MTQzLDI0LjUyNTQ5ODQgOS4yNDg2NDI0MywyNC41MjU0OTg0IEMxMC41MzkzMDM1LDI0LjUyNTQ5ODQgMTEuNjA5MTI5LDI0LjAyODI2OTEgMTMuMTE1Mzc5NiwyMi45MTA0NzQzIEwxNC4yNzU0NDQsMjIuMDU0NTQ4OCBDMTUuNTQ2ODA2NSwyMS4xMzA0OTAzIDE1LjgyOTYxMTMsMjEuMDE2MDMyIDE2LjQ3OTg5NTYsMjEuMDAxOTU3OCBMMTYuNDc5ODk1NiwyMS4wMDE5NTc4IFogTTIyLjc3NzA5ODgsMy4yMjIwODk3OSBDMjQuNDUwNzIyMyw0Ljg5NTcxMzMgMjQuNDUwNzU2Niw3LjYwOTE2MDc5IDIyLjc3NzE4ODksOS4yODI4MTMyNCBMMjEuNzQxNjU1LDEwLjMxODQ0NzUgQzIyLjg5MzYyNjMsMTEuNzE5OTY1NyAyMi44NTIxNTI2LDEzLjIwNTM3NzQgMjEuNzgxMTAzMSwxNC4yNzk1NTYgTDE4Ljc4MDA3MjcsMTcuMjgwNTg3NCBMMTguNzgwMDcyNywxNy4yODA1ODc0IEMxOC40ODcwMzc0LDE3LjU3MzMzODQgMTguMDEyMTYzNywxNy41NzMxMDggMTcuNzE5NDEyNiwxNy4yODAwNzI3IEMxNy40MjY2NjE2LDE2Ljk4NzAzNzQgMTcuNDI2ODkyLDE2LjUxMjE2MzcgMTcuNzE5OTI3MywxNi4yMTk0MTI2IEwyMC43MTg4OTY5LDEzLjIyMDQ0NCBDMjEuMjAzOTU3MSwxMi43MzM5NjY4IDIxLjI2MDAwMjEsMTIuMTI5OTk4MyAyMC42Nzg5NDEsMTEuMzgxODk0NSBMMTAuMDg0NTQzNywyMS45NzYxMDExIEM5Ljc4NjM1NDU5LDIyLjI3NDMwNTMgOS40MTAzNjExNywyMi40ODI3MDUgOC45OTk0NDcwMywyMi41Nzc1MzEzIEwyLjkxODY0NDYzLDIzLjk4MDc5MzQgQzIuMzc4NTkwNjEsMjQuMTA1NDIxMiAxLjg5NDU3ODc1LDIzLjYyMTQwOTQgMi4wMTkyMDY2LDIzLjA4MTM1NTQgTDMuNDIyNDc3OTQsMTcuMDAwNTEyOSBDMy41MTcyOTU1NywxNi41ODk2MzY1IDMuNzI1NjY1ODksMTYuMjEzNjczNiA0LjAyMzgyNzYsMTUuOTE1NDk2OCBMMTYuNzE2NTAxOSwzLjIyMjE3OTkyIEMxOC4zOTAwNDE1LDEuNTQ4NTU1NTUgMjEuMTAzNDM0OSwxLjU0ODUxMDU5IDIyLjc3NzA5ODgsMy4yMjIwODk3OSBaIE0xNy43NzcxODg5LDQuMjgyODEzMjQgTDUuMDg0NTE0NjIsMTYuOTc2MTMwMiBDNC45ODUxMjczOCwxNy4wNzU1MjI0IDQuOTE1NjcwNjEsMTcuMjAwODQzNCA0Ljg4NDA2NDczLDE3LjMzNzgwMjIgTDMuNzUwNjI0OCwyMi4yNDkzNzUyIEw4LjY2MjE1Nzc3LDIxLjExNTk0NDUgQzguNzk5MTI5MTUsMjEuMDg0MzM1NyA4LjkyNDQ2MDI5LDIxLjAxNDg2OTIgOS4wMjM4NTY2NSwyMC45MTU0Njc4IEwyMS43MTY1MDE5LDguMjIyMTc5OTIgQzIyLjgwNDMwNjMsNy4xMzQzMjA0OSAyMi44MDQyODYyLDUuMzcwNjA0NzggMjEuNzE2NDU4OCw0LjI4Mjc3MDEgQzIwLjYyODU5MTQsMy4xOTQ5NjUwNyAxOC44NjQ5NTA2LDMuMTk0OTk2NTMgMTcuNzc3MTg4OSw0LjI4MjgxMzI0IFpcIiBpZD1cIvCfjqgtQ29sb3JcIj4gPC9wYXRoPiA8L2c+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJlZGl0b3JcIiBpZD1cImVkaXRvclwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiAjZWRpdG9yIChpbnB1dCk9XCJzdWJtaXRDb250ZW50KClcIiAoYmx1cik9XCJvbkJsdXIoKVwiIChrZXl1cCk9XCJvbkVkaXRvcktleVVwKCRldmVudClcIiAobW91c2V1cCk9XCJ1cGRhdGVDdXJyZW50Rm9ybWF0KClcIlxyXG4gICAgICAoZHJvcCk9XCJkcm9wKCRldmVudClcIiAoZHJhZ292ZXIpPVwiYWxsb3dEcm9wKCRldmVudClcIj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVEaWFsb2cgbGV0LWRpYWxvZ1JlZj1cImRpYWxvZ1JlZlwiPlxyXG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+Q2hvb3NlIFRhYmxlIFNpemU8L2gyPlxyXG4gICAgPG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2VsbCBvZiBncmlkOyBsZXQgaSA9IGluZGV4XCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdncmlkLWl0ZW0nOiB0cnVlLFxyXG4gICAgICAgICdoaWdobGlnaHRlZCc6IGkgJSA3IDwgY29scyAmJiBNYXRoLmZsb29yKGkgLyA3KSA8IHJvd3NcclxuICAgICAgfVwiIChtb3VzZWVudGVyKT1cInVwZGF0ZVByZXZpZXcoaSAlIDcgKyAxLCBNYXRoLmZsb29yKGkgLyA3KSArIDEpXCJcclxuICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVTZWxlY3Rpb24oaSAlIDcgKyAxLCBNYXRoLmZsb29yKGkgLyA3KSArIDEsIGRpYWxvZ1JlZilcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxwPnt7IHJvd3MgfX0geCB7eyBjb2xzIH19IDwvcD5cclxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjc2lnbmF0dXJlRGlhbG9nIGxldC1kaWFsb2dSZWY9XCJkaWFsb2dSZWZcIj5cclxuICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPkRyYXcgYSBTaWduYXR1cmU8L2gyPlxyXG4gICAgPHNpZ25hdHVyZS1wYWQgI3NpZ1BhZCBbb3B0aW9uc109XCJzaWduYXR1cmVQYWRPcHRpb25zXCIgY2xhc3M9XCJzaWduXCIgPjwvc2lnbmF0dXJlLXBhZD5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25cIiA+XHJcbiAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3JtYWxcIiA+IENsb3NlIDwvYnV0dG9uPiAtLT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJub3JtYWxcIiAoY2xpY2spPVwiY2xvc2VTaWduRGlhbG9nKGRpYWxvZ1JlZilcIiA+IENsb3NlIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInN1Ym1pdFwiIChjbGljayk9XCJzdWJtaXRTaWduRGlhbG9nKGRpYWxvZ1JlZilcIiA+IFN1Ym1pdCA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcbiJdfQ==
|