@hmcts/media-viewer 4.1.7 → 4.1.8-exui-2986

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.
package/assets/all.scss CHANGED
@@ -26,6 +26,7 @@
26
26
  @import "sass/tags";
27
27
  @import "sass/toolbar/main";
28
28
  @import 'sass/tabs';
29
+ @import 'sass/tooltip';
29
30
  @import 'sass/comment-filter';
30
31
  @import 'sass/angular-tree-component';
31
32
  @import 'sass/redaction';
@@ -0,0 +1,43 @@
1
+ .tooltip {
2
+ /* default: place above */
3
+ --tooltip-offset-y: -50%;
4
+ }
5
+
6
+ .tooltip::before {
7
+ content: attr(data-tooltip); /* Tooltip text comes from attribute */
8
+ position: absolute;
9
+ top: var(--tooltip-offset-y);
10
+ left: 50%;
11
+ transform: translateX(-50%);
12
+ background: #e3e2e1;
13
+ color: #444444;
14
+ border: 1px solid #d1d1d1;
15
+ font-size: 11px;
16
+ font-family: system-ui, sans-serif;
17
+ padding: 3px 6px;
18
+ border-radius: 2px;
19
+ /* Dynamic sizing */
20
+ white-space: nowrap;
21
+ width: max-content;
22
+ max-width: 300px;
23
+ z-index: 999;
24
+ opacity: 0;
25
+ visibility: hidden;
26
+ transition: opacity 0.2s ease-in-out;
27
+ box-shadow: 0px 2px 4px rgba(0,0,0,0.3);
28
+ }
29
+
30
+ /* Show tooltip on hover and focus */
31
+ .tooltip:hover::after,
32
+ .tooltip:focus::after,
33
+ .tooltip:hover::before,
34
+ /* Show tooltip on hover or keyboard focus */
35
+ .tooltip:focus::before {
36
+ opacity: 1;
37
+ visibility: visible;
38
+ }
39
+
40
+ /* place below */
41
+ .tooltip[data-placement="bottom"] {
42
+ --tooltip-offset-y: 100%;
43
+ }
@@ -4,6 +4,7 @@ import * as i0 from "@angular/core";
4
4
  import * as i1 from "../toolbar-event.service";
5
5
  import * as i2 from "../toolbar-button-visibility.service";
6
6
  import * as i3 from "@angular/common";
7
+ import * as i4 from "rpx-xui-translation";
7
8
  export class HighlightToolbarComponent {
8
9
  constructor(toolbarEventService, toolbarButtons) {
9
10
  this.toolbarEventService = toolbarEventService;
@@ -35,10 +36,10 @@ export class HighlightToolbarComponent {
35
36
  }
36
37
  }
37
38
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightToolbarComponent, deps: [{ token: i1.ToolbarEventService }, { token: i2.ToolbarButtonVisibilityService }], target: i0.ɵɵFactoryTarget.Component }); }
38
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HighlightToolbarComponent, selector: "mv-highlight-toolbar", ngImport: i0, template: "<div class=\"redaction\">\n <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n >Highlight options</label\n >\n\n <button\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw\"\n title=\"Draw a box\"\n [class.toggled]=\"toolbarEventService.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"mvDrawBtn\"\n (click)=\"onClickDrawToggle()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"draw_label\">Draw a box</span>\n </button>\n\n <button\n id=\"highlightTextBtn\"\n class=\"mv-button mv-toolbar__menu-button--highlight\"\n title=\"Highlight text\"\n data-l10n-id=\"highlightTextBtn\"\n (click)=\"onHighlight()\"\n [class.toggled]=\"toolbarEventService.highlightModeSubject | async\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"highlightTextBtn_label\">Highlight text</span>\n </button>\n\n <button\n id=\"mvHighlightFromSearchBtn\"\n title=\"From search\"\n data-l10n-id=\"fromSearchButton\"\n class=\"mv-button redaction-button--search\"\n (click)=\"onAllSearch()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\"\n >From search</span\n >\n </button>\n\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button redaction-button--close\"\n title=\"Close Redaction\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"onClose()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"Close Redaction\">Close Highlight</span>\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
39
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HighlightToolbarComponent, selector: "mv-highlight-toolbar", ngImport: i0, template: "<div class=\"redaction\">\n <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n >{{ \"Highlight options\" | rpxTranslate }}</label\n >\n\n <button\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw tooltip\"\n [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n data-placement=\"bottom\"\n [class.toggled]=\"toolbarEventService.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"mvDrawBtn\"\n (click)=\"onClickDrawToggle()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"draw_label\">{{ \"Draw a box\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"highlightTextBtn\"\n class=\"mv-button mv-toolbar__menu-button--highlight tooltip\"\n [attr.data-tooltip]=\"'Highlight text' | rpxTranslate\"\n data-placement=\"bottom\"\n data-l10n-id=\"highlightTextBtn\"\n (click)=\"onHighlight()\"\n [class.toggled]=\"toolbarEventService.highlightModeSubject | async\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"highlightTextBtn_label\">{{ \"Highlight text\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"mvHighlightFromSearchBtn\"\n [attr.data-tooltip]=\"'From search' | rpxTranslate\"\n data-placement=\"bottom\"\n data-l10n-id=\"fromSearchButton\"\n class=\"mv-button redaction-button--search tooltip\"\n (click)=\"onAllSearch()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\"\n >{{ \"From search\" | rpxTranslate }}</span\n >\n </button>\n\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button redaction-button--close tooltip\"\n [attr.data-tooltip]=\"'Close highlight' | rpxTranslate\"\n data-placement=\"bottom\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"onClose()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"Close Redaction\">{{ \"Close Highlight\" | rpxTranslate }}</span>\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.RpxTranslatePipe, name: "rpxTranslate" }] }); }
39
40
  }
40
41
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightToolbarComponent, decorators: [{
41
42
  type: Component,
42
- args: [{ selector: 'mv-highlight-toolbar', template: "<div class=\"redaction\">\n <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n >Highlight options</label\n >\n\n <button\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw\"\n title=\"Draw a box\"\n [class.toggled]=\"toolbarEventService.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"mvDrawBtn\"\n (click)=\"onClickDrawToggle()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"draw_label\">Draw a box</span>\n </button>\n\n <button\n id=\"highlightTextBtn\"\n class=\"mv-button mv-toolbar__menu-button--highlight\"\n title=\"Highlight text\"\n data-l10n-id=\"highlightTextBtn\"\n (click)=\"onHighlight()\"\n [class.toggled]=\"toolbarEventService.highlightModeSubject | async\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"highlightTextBtn_label\">Highlight text</span>\n </button>\n\n <button\n id=\"mvHighlightFromSearchBtn\"\n title=\"From search\"\n data-l10n-id=\"fromSearchButton\"\n class=\"mv-button redaction-button--search\"\n (click)=\"onAllSearch()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\"\n >From search</span\n >\n </button>\n\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button redaction-button--close\"\n title=\"Close Redaction\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"onClose()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"Close Redaction\">Close Highlight</span>\n </button>\n</div>\n" }]
43
+ args: [{ selector: 'mv-highlight-toolbar', template: "<div class=\"redaction\">\n <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n >{{ \"Highlight options\" | rpxTranslate }}</label\n >\n\n <button\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw tooltip\"\n [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n data-placement=\"bottom\"\n [class.toggled]=\"toolbarEventService.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"mvDrawBtn\"\n (click)=\"onClickDrawToggle()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"draw_label\">{{ \"Draw a box\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"highlightTextBtn\"\n class=\"mv-button mv-toolbar__menu-button--highlight tooltip\"\n [attr.data-tooltip]=\"'Highlight text' | rpxTranslate\"\n data-placement=\"bottom\"\n data-l10n-id=\"highlightTextBtn\"\n (click)=\"onHighlight()\"\n [class.toggled]=\"toolbarEventService.highlightModeSubject | async\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"highlightTextBtn_label\">{{ \"Highlight text\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"mvHighlightFromSearchBtn\"\n [attr.data-tooltip]=\"'From search' | rpxTranslate\"\n data-placement=\"bottom\"\n data-l10n-id=\"fromSearchButton\"\n class=\"mv-button redaction-button--search tooltip\"\n (click)=\"onAllSearch()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\"\n >{{ \"From search\" | rpxTranslate }}</span\n >\n </button>\n\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button redaction-button--close tooltip\"\n [attr.data-tooltip]=\"'Close highlight' | rpxTranslate\"\n data-placement=\"bottom\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"onClose()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"Close Redaction\">{{ \"Close Highlight\" | rpxTranslate }}</span>\n </button>\n</div>\n" }]
43
44
  }], ctorParameters: () => [{ type: i1.ToolbarEventService }, { type: i2.ToolbarButtonVisibilityService }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvdG9vbGJhci9oaWdobGlnaHQtdG9vbGJhci9oaWdobGlnaHQtdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL2hpZ2hsaWdodC10b29sYmFyL2hpZ2hsaWdodC10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBYyxVQUFVLEVBQXVCLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBWXZGLE1BQU0sT0FBTyx5QkFBeUI7SUFLcEMsWUFBNEIsbUJBQXdDLEVBQ2xELGNBQThDO1FBRHBDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDbEQsbUJBQWMsR0FBZCxjQUFjLENBQWdDO1FBSnhELGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUl5QixDQUFDO0lBRXJFLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2pHLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWdCLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsbUJBQW1CLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWdCLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRUQsV0FBVztRQUNULEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztrSUFwQ1UseUJBQXlCO3NIQUF6Qix5QkFBeUIsNERDYnRDLG9vREF3REE7OzRGRDNDYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VhcmNoTW9kZSwgU2VhcmNoVHlwZSwgVG9vbGJhckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sYmFyQnV0dG9uVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi90b29sYmFyLWJ1dHRvbi12aXNpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgZnJvbVN0b3JlIGZyb20gJy4uLy4uL3N0b3JlL3JlZHVjZXJzL3JlZHVjZXJzJztcbmltcG9ydCB7IFN0b3JlLCBzZWxlY3QgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIGZyb21SZWRhY3RTZWxlY3RvcnMgZnJvbSAnLi4vLi4vc3RvcmUvc2VsZWN0b3JzL3JlZGFjdGlvbi5zZWxlY3RvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdi1oaWdobGlnaHQtdG9vbGJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oaWdobGlnaHQtdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2hpZ2hsaWdodC10b29sYmFyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSGlnaGxpZ2h0VG9vbGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHJlZGFjdGlvbkFsbEluUHJvZ3Jlc3M6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHRvb2xiYXJFdmVudFNlcnZpY2U6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IHRvb2xiYXJCdXR0b25zOiBUb29sYmFyQnV0dG9uVmlzaWJpbGl0eVNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9vbGJhckV2ZW50U2VydmljZS5yZWRhY3RBbGxJblByb2dyZXNzU3ViamVjdC5zdWJzY3JpYmUoaW5wcm9ncmVzcyA9PiB7XG4gICAgICB0aGlzLnJlZGFjdGlvbkFsbEluUHJvZ3Jlc3MgPSBpbnByb2dyZXNzO1xuICAgIH0pKTtcbiAgfVxuXG4gIG9uQWxsU2VhcmNoKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS5vcGVuUmVkYWN0aW9uU2VhcmNoLm5leHQoeyBtb2RlVHlwZTogU2VhcmNoVHlwZS5IaWdobGlnaHQsIGlzT3BlbjogdHJ1ZSB9IGFzIFNlYXJjaE1vZGUpO1xuICB9XG5cbiAgb25IaWdobGlnaHQoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLnRvZ2dsZUhpZ2hsaWdodE1vZGUoKTtcbiAgfVxuXG4gIG9uQ2xpY2tEcmF3VG9nZ2xlKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS50b2dnbGVEcmF3TW9kZSgpO1xuICB9XG5cbiAgb25DbG9zZSgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2UuaGlnaGxpZ2h0VG9vbGJhclN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLmhpZ2hsaWdodE1vZGVTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS5vcGVuUmVkYWN0aW9uU2VhcmNoLm5leHQoeyBtb2RlVHlwZTogU2VhcmNoVHlwZS5IaWdobGlnaHQsIGlzT3BlbjogZmFsc2UgfSBhcyBTZWFyY2hNb2RlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJyZWRhY3Rpb25cIj5cbiAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgcmVkYWN0aW9uLXRpdGxlXCIgZGF0YS1sMTBuLWlkPVwicmVkYWN0aW9uX29wdGlvbnNcIlxuICAgID5IaWdobGlnaHQgb3B0aW9uczwvbGFiZWxcbiAgPlxuXG4gIDxidXR0b25cbiAgICBpZD1cIm12RHJhd0J0blwiXG4gICAgI212RHJhd0J0blxuICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1kcmF3XCJcbiAgICB0aXRsZT1cIkRyYXcgYSBib3hcIlxuICAgIFtjbGFzcy50b2dnbGVkXT1cInRvb2xiYXJFdmVudFNlcnZpY2UuZHJhd01vZGVTdWJqZWN0IHwgYXN5bmNcIlxuICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICBkYXRhLWwxMG4taWQ9XCJtdkRyYXdCdG5cIlxuICAgIChjbGljayk9XCJvbkNsaWNrRHJhd1RvZ2dsZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gID5cbiAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJkcmF3X2xhYmVsXCI+RHJhdyBhIGJveDwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIGlkPVwiaGlnaGxpZ2h0VGV4dEJ0blwiXG4gICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLWhpZ2hsaWdodFwiXG4gICAgdGl0bGU9XCJIaWdobGlnaHQgdGV4dFwiXG4gICAgZGF0YS1sMTBuLWlkPVwiaGlnaGxpZ2h0VGV4dEJ0blwiXG4gICAgKGNsaWNrKT1cIm9uSGlnaGxpZ2h0KClcIlxuICAgIFtjbGFzcy50b2dnbGVkXT1cInRvb2xiYXJFdmVudFNlcnZpY2UuaGlnaGxpZ2h0TW9kZVN1YmplY3QgfCBhc3luY1wiXG4gICAgW2Rpc2FibGVkXT1cInJlZGFjdGlvbkFsbEluUHJvZ3Jlc3NcIlxuICA+XG4gICAgPHNwYW4gZGF0YS1sMTBuLWlkPVwiaGlnaGxpZ2h0VGV4dEJ0bl9sYWJlbFwiPkhpZ2hsaWdodCB0ZXh0PC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgaWQ9XCJtdkhpZ2hsaWdodEZyb21TZWFyY2hCdG5cIlxuICAgIHRpdGxlPVwiRnJvbSBzZWFyY2hcIlxuICAgIGRhdGEtbDEwbi1pZD1cImZyb21TZWFyY2hCdXR0b25cIlxuICAgIGNsYXNzPVwibXYtYnV0dG9uIHJlZGFjdGlvbi1idXR0b24tLXNlYXJjaFwiXG4gICAgKGNsaWNrKT1cIm9uQWxsU2VhcmNoKClcIlxuICAgIFtkaXNhYmxlZF09XCJyZWRhY3Rpb25BbGxJblByb2dyZXNzXCJcbiAgPlxuICAgIDxzcGFuIHN0eWxlPVwid2lkdGg6IDVyZW1cIiBkYXRhLWwxMG4taWQ9XCJmcm9tU2VhcmNoQnV0dG9uX2xhYmVsXCJcbiAgICAgID5Gcm9tIHNlYXJjaDwvc3BhblxuICAgID5cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIGlkPVwibXZDbG9zZUJ0blwiXG4gICAgI212Q2xvc2VCdG5cbiAgICBjbGFzcz1cIm12LWJ1dHRvbiByZWRhY3Rpb24tYnV0dG9uLS1jbG9zZVwiXG4gICAgdGl0bGU9XCJDbG9zZSBSZWRhY3Rpb25cIlxuICAgIGRhdGEtbDEwbi1pZD1cIm12UmVkYWN0QnRuXCJcbiAgICAoY2xpY2spPVwib25DbG9zZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gID5cbiAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJDbG9zZSBSZWRhY3Rpb25cIj5DbG9zZSBIaWdobGlnaHQ8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvdG9vbGJhci9oaWdobGlnaHQtdG9vbGJhci9oaWdobGlnaHQtdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL2hpZ2hsaWdodC10b29sYmFyL2hpZ2hsaWdodC10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBYyxVQUFVLEVBQXVCLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQVl2RixNQUFNLE9BQU8seUJBQXlCO0lBS3BDLFlBQTRCLG1CQUF3QyxFQUNsRCxjQUE4QztRQURwQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ2xELG1CQUFjLEdBQWQsY0FBYyxDQUFnQztRQUp4RCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFJeUIsQ0FBQztJQUVyRSxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFnQixDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFnQixDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVELFdBQVc7UUFDVCxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7a0lBcENVLHlCQUF5QjtzSEFBekIseUJBQXlCLDREQ2J0Qyx5aEVBNERBOzs0RkQvQ2EseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlYXJjaE1vZGUsIFNlYXJjaFR5cGUsIFRvb2xiYXJFdmVudFNlcnZpY2UgfSBmcm9tICcuLi90b29sYmFyLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9vbGJhckJ1dHRvblZpc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vdG9vbGJhci1idXR0b24tdmlzaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIGZyb21TdG9yZSBmcm9tICcuLi8uLi9zdG9yZS9yZWR1Y2Vycy9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBTdG9yZSwgc2VsZWN0IH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBmcm9tUmVkYWN0U2VsZWN0b3JzIGZyb20gJy4uLy4uL3N0b3JlL3NlbGVjdG9ycy9yZWRhY3Rpb24uc2VsZWN0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtaGlnaGxpZ2h0LXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vaGlnaGxpZ2h0LXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oaWdobGlnaHQtdG9vbGJhci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEhpZ2hsaWdodFRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICByZWRhY3Rpb25BbGxJblByb2dyZXNzOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB0b29sYmFyRXZlbnRTZXJ2aWNlOiBUb29sYmFyRXZlbnRTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFkb25seSB0b29sYmFyQnV0dG9uczogVG9vbGJhckJ1dHRvblZpc2liaWxpdHlTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2UucmVkYWN0QWxsSW5Qcm9ncmVzc1N1YmplY3Quc3Vic2NyaWJlKGlucHJvZ3Jlc3MgPT4ge1xuICAgICAgdGhpcy5yZWRhY3Rpb25BbGxJblByb2dyZXNzID0gaW5wcm9ncmVzcztcbiAgICB9KSk7XG4gIH1cblxuICBvbkFsbFNlYXJjaCgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2Uub3BlblJlZGFjdGlvblNlYXJjaC5uZXh0KHsgbW9kZVR5cGU6IFNlYXJjaFR5cGUuSGlnaGxpZ2h0LCBpc09wZW46IHRydWUgfSBhcyBTZWFyY2hNb2RlKTtcbiAgfVxuXG4gIG9uSGlnaGxpZ2h0KCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS50b2dnbGVIaWdobGlnaHRNb2RlKCk7XG4gIH1cblxuICBvbkNsaWNrRHJhd1RvZ2dsZSgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2UudG9nZ2xlRHJhd01vZGUoKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLmhpZ2hsaWdodFRvb2xiYXJTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS5oaWdobGlnaHRNb2RlU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2Uub3BlblJlZGFjdGlvblNlYXJjaC5uZXh0KHsgbW9kZVR5cGU6IFNlYXJjaFR5cGUuSGlnaGxpZ2h0LCBpc09wZW46IGZhbHNlIH0gYXMgU2VhcmNoTW9kZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicmVkYWN0aW9uXCI+XG4gIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIHJlZGFjdGlvbi10aXRsZVwiIGRhdGEtbDEwbi1pZD1cInJlZGFjdGlvbl9vcHRpb25zXCJcbiAgICA+e3sgXCJIaWdobGlnaHQgb3B0aW9uc1wiIHwgcnB4VHJhbnNsYXRlIH19PC9sYWJlbFxuICA+XG5cbiAgPGJ1dHRvblxuICAgIGlkPVwibXZEcmF3QnRuXCJcbiAgICAjbXZEcmF3QnRuXG4gICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLWRyYXcgdG9vbHRpcFwiXG4gICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidEcmF3IGEgYm94JyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgZGF0YS1wbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgIFtjbGFzcy50b2dnbGVkXT1cInRvb2xiYXJFdmVudFNlcnZpY2UuZHJhd01vZGVTdWJqZWN0IHwgYXN5bmNcIlxuICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICBkYXRhLWwxMG4taWQ9XCJtdkRyYXdCdG5cIlxuICAgIChjbGljayk9XCJvbkNsaWNrRHJhd1RvZ2dsZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gID5cbiAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJkcmF3X2xhYmVsXCI+e3sgXCJEcmF3IGEgYm94XCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBpZD1cImhpZ2hsaWdodFRleHRCdG5cIlxuICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1oaWdobGlnaHQgdG9vbHRpcFwiXG4gICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidIaWdobGlnaHQgdGV4dCcgfCBycHhUcmFuc2xhdGVcIlxuICAgIGRhdGEtcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICBkYXRhLWwxMG4taWQ9XCJoaWdobGlnaHRUZXh0QnRuXCJcbiAgICAoY2xpY2spPVwib25IaWdobGlnaHQoKVwiXG4gICAgW2NsYXNzLnRvZ2dsZWRdPVwidG9vbGJhckV2ZW50U2VydmljZS5oaWdobGlnaHRNb2RlU3ViamVjdCB8IGFzeW5jXCJcbiAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gID5cbiAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJoaWdobGlnaHRUZXh0QnRuX2xhYmVsXCI+e3sgXCJIaWdobGlnaHQgdGV4dFwiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgaWQ9XCJtdkhpZ2hsaWdodEZyb21TZWFyY2hCdG5cIlxuICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInRnJvbSBzZWFyY2gnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICBkYXRhLXBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgZGF0YS1sMTBuLWlkPVwiZnJvbVNlYXJjaEJ1dHRvblwiXG4gICAgY2xhc3M9XCJtdi1idXR0b24gcmVkYWN0aW9uLWJ1dHRvbi0tc2VhcmNoIHRvb2x0aXBcIlxuICAgIChjbGljayk9XCJvbkFsbFNlYXJjaCgpXCJcbiAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gID5cbiAgICA8c3BhbiBzdHlsZT1cIndpZHRoOiA1cmVtXCIgZGF0YS1sMTBuLWlkPVwiZnJvbVNlYXJjaEJ1dHRvbl9sYWJlbFwiXG4gICAgICA+e3sgXCJGcm9tIHNlYXJjaFwiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuXG4gICAgPlxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgaWQ9XCJtdkNsb3NlQnRuXCJcbiAgICAjbXZDbG9zZUJ0blxuICAgIGNsYXNzPVwibXYtYnV0dG9uIHJlZGFjdGlvbi1idXR0b24tLWNsb3NlIHRvb2x0aXBcIlxuICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQ2xvc2UgaGlnaGxpZ2h0JyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgZGF0YS1wbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgIGRhdGEtbDEwbi1pZD1cIm12UmVkYWN0QnRuXCJcbiAgICAoY2xpY2spPVwib25DbG9zZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gID5cbiAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJDbG9zZSBSZWRhY3Rpb25cIj57eyBcIkNsb3NlIEhpZ2hsaWdodFwiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
@@ -171,11 +171,11 @@ export class MainToolbarComponent {
171
171
  }, 100);
172
172
  }
173
173
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MainToolbarComponent, deps: [{ token: i1.ToolbarEventService }, { token: i2.ToolbarButtonVisibilityService }, { token: i0.ChangeDetectorRef }, { token: i3.NumberHelperService }, { token: i4.IcpEventService }], target: i0.ɵɵFactoryTarget.Component }); }
174
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MainToolbarComponent, selector: "mv-main-toolbar", inputs: { enableAnnotations: "enableAnnotations", enableRedactions: "enableRedactions", enableICP: "enableICP", contentType: "contentType" }, host: { listeners: { "window:resize": "onResize()", "document:keydown.control.p": "onControlPrint($event)", "document:keydown.meta.p": "onControlPrint($event)" } }, viewQueries: [{ propertyName: "zoomSelect", first: true, predicate: ["zoomSelect"], descendants: true }, { propertyName: "mvToolbarMain", first: true, predicate: ["mvToolbarMain"], descendants: true }, { propertyName: "mvMenuItems", first: true, predicate: ["dropdownMenu"], descendants: true }], ngImport: i0, template: "<div class=\"toolbar\">\n <div id=\"toolbarContainer\">\n <div class=\"mv-toolbar__container\">\n <div #mvToolbar class=\"mv-toolbar\" [class.notSupported]=\"!contentType\">\n <!-- The mvToolbarMain div contains all toolbar buttons except the \"More options\" button. This allows for calculation of the available space to display buttons -->\n <div id=\"mvToolbarMain\" class=\"mv-toolbar-main\" #mvToolbarMain>\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n <!-- The mvToolbarMoreOptions div contains the \"More options\" toolbar button (and the overlay template for the dropdown menu).\n The space occupied by the button (if visible) is excluded from the toolbar space available calculation -->\n <div id=\"mvToolbarMoreOptions\" class=\"mv-toolbar-more-options\">\n <button\n id=\"mvMoreOptionsBtn\"\n class=\"mv-button mv-toolbar__menu-button--more-options\"\n [class.mv-toolbar__menu-button--more-options__hidden]=\"\n mvToolbar.offsetWidth >= allButtonsWidth\n \"\n [attr.aria-expanded]=\"isDropdownMenuOpen\"\n (click)=\"toggleMoreOptions()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"redactAllInProgress\"\n >\n <span>{{ \"More options\" | rpxTranslate }}</span>\n </button>\n <!-- This template displays the overlay content for the dropdown menu and is connected to the \"More options\" button -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownMenuOpen\"\n [cdkConnectedOverlayPositions]=\"dropdownMenuPositions\"\n >\n <div class=\"dropdown-menu\" #dropdownMenu tabindex=\"0\">\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div id=\"mvMenuItems\" #mvMenuItems>\n <ng-template #menuItems>\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvIndexBtn\"\n title=\"Index\"\n data-l10n-id=\"index\"\n #mvIndexBtn\n class=\"mv-button mv-toolbar__menu-button--index\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvIndexBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvIndexBtn']\n \"\n [attr.aria-expanded]=\"isIndexOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleIndexSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Index\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvBookmarksBtn\"\n title=\"Bookmarks\"\n data-l10n-id=\"bookmarks\"\n #mvBookmarksBtn\n [ngClass]=\"{\n 'mv-button mv-toolbar__menu-button--bookmarks': true,\n 'button-hidden-on-toolbar':\n mvToolbarMain.offsetWidth <\n widthRequiredForBtn['mvBookmarksBtn'],\n 'button-hidden-on-dropdown':\n mvToolbarMain.offsetWidth >=\n widthRequiredForBtn['mvBookmarksBtn']\n }\"\n [attr.aria-expanded]=\"isBookmarksOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleBookmarksSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Bookmarks\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDrawButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw\"\n title=\"Draw a box\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDrawBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDrawBtn']\n \"\n [class.toggled]=\"toolbarEvents.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"toggleDrawButton\"\n (click)=\"onClickDrawToggle(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"draw_label\">{{\n \"Draw a box\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showHighlightButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvHighlightBtn\"\n #mvHighlightBtn\n class=\"mv-button mv-toolbar__menu-button--highlight\"\n title=\"Highlight\"\n aria-label=\"Highlight\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.toggled]=\"toolbarEvents.highlightToolbarSubject | async\"\n aria-pressed=\"false\"\n (click)=\"onClickHighlightToggle(); isDropdownMenuOpen = false\"\n data-l10n-id=\"toggleHighlightButton\"\n >\n <span data-l10n-id=\"highlight_label\">{{\n \"Highlight\" | rpxTranslate\n }}</span>\n </button>\n\n <ng-container *ngIf=\"toolbarButtons.showNavigation\">\n <div\n id=\"mvPageBtn\"\n #mvPageBtn\n class=\"mv-toolbar__menu-button--page\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPageBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPageBtn']\n \"\n >\n <span>{{ \"Page\" | rpxTranslate }}</span>\n\n <button\n id=\"mvUpBtn\"\n [disabled]=\"pageNumber === 1 || redactAllInProgress\"\n title=\"Previous Page\"\n class=\"mv-toolbar__menu-button--up button-image\"\n data-l10n-id=\"previous\"\n (click)=\"decreasePageNumber()\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvDownBtn\"\n [disabled]=\"pageNumber === pageCount || redactAllInProgress\"\n title=\"Next Page\"\n class=\"mv-toolbar__menu-button--down button-image\"\n data-l10n-id=\"next\"\n (click)=\"increasePageNumber()\"\n >\n <span></span>\n </button>\n\n <input\n type=\"number\"\n id=\"pageNumber\"\n class=\"hmcts-toolbar-input govuk-input--width-2\"\n title=\"Page Number\"\n value=\"1\"\n size=\"4\"\n min=\"1\"\n [value]=\"pageNumber\"\n aria-label=\"page number\"\n tabindex=\"0\"\n data-l10n-id=\"page\"\n (change)=\"onPageNumberInputChange(pageNumberInput.value)\"\n [disabled]=\"redactAllInProgress\"\n #pageNumberInput\n />\n <span id=\"numPages\" class=\"toolbarLabel\">/ {{ pageCount }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"toolbarButtons.showZoom\">\n <div\n id=\"mvZoomBtn\"\n #mvZoomBtn\n class=\"mv-toolbar__menu-button--zoom\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvZoomBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvZoomBtn']\n \"\n >\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 0.1 ||\n redactAllInProgress\n \"\n id=\"mvMinusBtn\"\n class=\"mv-toolbar__menu-button--zoom-out button-image\"\n title=\"Zoom Out\"\n data-l10n-id=\"zoom_out\"\n (click)=\"stepZoom(-0.1)\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom Out\" | rpxTranslate\n }}</span>\n </button>\n <select\n id=\"scaleSelect\"\n class=\"hmcts-toolbar-select\"\n title=\"Zoom\"\n tabindex=\"0\"\n data-l10n-id=\"zoom\"\n (change)=\"zoom($event.target.value)\"\n aria-label=\"zoom\"\n [disabled]=\"redactAllInProgress\"\n >\n <option\n #zoomSelect\n id=\"customScaleOption\"\n title=\"\"\n [value]=\"toolbarEvents.zoomValueSubject.value\"\n >\n {{\n toolbarEvents.zoomValueSubject.value * 100\n | number : \"1.0-0\"\n }}%\n </option>\n <option\n *ngFor=\"let zoomScale of zoomScales\"\n title=\"\"\n [value]=\"zoomScale\"\n [attr.data-l10n-id]=\"'page_scale_percent_' + zoomScale * 100\"\n >\n {{ zoomScale * 100 }}%\n </option>\n </select>\n\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 5 ||\n redactAllInProgress\n \"\n id=\"mvPlusBtn\"\n class=\"mv-toolbar__menu-button--zoom-in button-image\"\n (click)=\"stepZoom(0.1)\"\n title=\"Zoom In\"\n data-l10n-id=\"zoom_in\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom In\" | rpxTranslate\n }}</span>\n </button>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"toolbarButtons.showRotate\"\n id=\"mvRotateBtn\"\n #mvRotateBtn\n class=\"mv-toolbar__menu-button--rotate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRotateBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRotateBtn']\n \"\n >\n <button\n id=\"mvRotateLeftBtn\"\n class=\"mv-toolbar__menu-button--rotate_left button-image\"\n title=\"Rotate Counterclockwise\"\n data-l10n-id=\"page_rotate_ccw\"\n (click)=\"rotate(270)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvRotateRightBtn\"\n class=\"mv-toolbar__menu-button--rotate_right button-image\"\n title=\"Rotate Clockwise\"\n data-l10n-id=\"page_rotate_cw\"\n (click)=\"rotate(90)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <span>{{ \"Rotate\" | rpxTranslate }}</span>\n </div>\n\n <button\n *ngIf=\"toolbarButtons.showSearchBar\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvSearchBtn\"\n #mvSearchBtn\n title=\"Search\"\n data-l10n-id=\"searchbar\"\n class=\"mv-button mv-toolbar__menu-button--search\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvSearchBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvSearchBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleSearchBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Search\" | rpxTranslate }}</span>\n </button>\n <mv-search-bar\n *ngIf=\"!toolbarEvents.searchBarHidden.getValue()\"\n ></mv-search-bar>\n\n <button\n *ngIf=\"enableICP && toolbarButtons.showPresentationMode && isPdf()\"\n [disabled]=\"icpEnabled || !contentType || redactionEnabled\"\n id=\"mvPresentBtn\"\n #mvPresentBtn\n class=\"mv-button mv-toolbar__menu-button--present\"\n title=\"In-Court Presentation Mode\"\n data-l10n-id=\"icpMode_label\"\n [ngClass]=\"onToolBarOffSetChange('mvPresentBtn')\"\n aria-pressed=\"false\"\n (click)=\"togglePresentBar(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"icpMode_label\">{{\n \"Present\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"enableRedactions && toolbarButtons.showRedact\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvRedactBtn\"\n #mvRedactBtn\n title=\"Redact\"\n data-l10n-id=\"redact\"\n class=\"mv-button mv-toolbar__menu-button--redact\"\n [ngClass]=\"onToolBarOffSetChange('mvRedactBtn')\"\n [attr.aria-expanded]=\"isRedactOpen\"\n (click)=\"toggleRedactBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Redact\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showGrabNDragButton\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvGrabBtn\"\n #mvGrabBtn\n class=\"mv-button mv-toolbar__menu-button--grab\"\n title=\"Grab and drag\"\n [ngClass]=\"onToolBarOffSetChange('mvGrabBtn')\"\n aria-pressed=\"false\"\n (click)=\"toggleGrabNDrag(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Grab and drag\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDownload\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDownloadBtn\"\n #mvDownloadBtn\n class=\"mv-button mv-toolbar__menu-button--download\"\n title=\"Download\"\n data-l10n-id=\"download\"\n [ngClass]=\"onToolBarOffSetChange('mvDownloadBtn')\"\n aria-pressed=\"false\"\n (click)=\"downloadFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Download\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showPrint\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvPrintBtn\"\n #mvPrintBtn\n title=\"Print\"\n data-l10n-id=\"print\"\n class=\"mv-button mv-toolbar__menu-button--print\"\n [ngClass]=\"onToolBarOffSetChange('mvPrintBtn')\"\n aria-pressed=\"false\"\n (click)=\"printFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Print\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"enableAnnotations && toolbarButtons.showCommentSummary\"\n [disabled]=\"redactionEnabled\"\n id=\"mvCommentsBtn\"\n #mvCommentsBtn\n class=\"mv-button mv-toolbar__menu-button--comments\"\n title=\"Comments\"\n data-l10n-id=\"comments\"\n [ngClass]=\"onToolBarOffSetChange('mvCommentsBtn')\"\n [attr.aria-expanded]=\"isCommentsOpen\"\n (click)=\"toggleCommentsPanel(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Comments\" | rpxTranslate }}</span>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i7.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i8.SearchBarComponent, selector: "mv-search-bar" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.DecimalPipe, name: "number" }, { kind: "pipe", type: i9.RpxTranslatePipe, name: "rpxTranslate" }] }); }
174
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MainToolbarComponent, selector: "mv-main-toolbar", inputs: { enableAnnotations: "enableAnnotations", enableRedactions: "enableRedactions", enableICP: "enableICP", contentType: "contentType" }, host: { listeners: { "window:resize": "onResize()", "document:keydown.control.p": "onControlPrint($event)", "document:keydown.meta.p": "onControlPrint($event)" } }, viewQueries: [{ propertyName: "zoomSelect", first: true, predicate: ["zoomSelect"], descendants: true }, { propertyName: "mvToolbarMain", first: true, predicate: ["mvToolbarMain"], descendants: true }, { propertyName: "mvMenuItems", first: true, predicate: ["dropdownMenu"], descendants: true }], ngImport: i0, template: "<div class=\"toolbar\">\n <div id=\"toolbarContainer\">\n <div class=\"mv-toolbar__container\">\n <div #mvToolbar class=\"mv-toolbar\" [class.notSupported]=\"!contentType\">\n <!-- The mvToolbarMain div contains all toolbar buttons except the \"More options\" button. This allows for calculation of the available space to display buttons -->\n <div id=\"mvToolbarMain\" class=\"mv-toolbar-main\" #mvToolbarMain>\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n <!-- The mvToolbarMoreOptions div contains the \"More options\" toolbar button (and the overlay template for the dropdown menu).\n The space occupied by the button (if visible) is excluded from the toolbar space available calculation -->\n <div id=\"mvToolbarMoreOptions\" class=\"mv-toolbar-more-options\">\n <button\n id=\"mvMoreOptionsBtn\"\n class=\"mv-button mv-toolbar__menu-button--more-options tooltip\"\n [class.mv-toolbar__menu-button--more-options__hidden]=\"\n mvToolbar.offsetWidth >= allButtonsWidth\n \"\n [attr.aria-expanded]=\"isDropdownMenuOpen\"\n [attr.data-tooltip]=\"'More options' | rpxTranslate\"\n (click)=\"toggleMoreOptions()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"redactAllInProgress\"\n >\n <span>{{ \"More options\" | rpxTranslate }}</span>\n </button>\n <!-- This template displays the overlay content for the dropdown menu and is connected to the \"More options\" button -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownMenuOpen\"\n [cdkConnectedOverlayPositions]=\"dropdownMenuPositions\"\n >\n <div class=\"dropdown-menu\" #dropdownMenu tabindex=\"0\">\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n </ng-template>\n </div>\n </div>\n <div id=\"mvMenuItems\" #mvMenuItems>\n <ng-template #menuItems>\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvIndexBtn\"\n data-l10n-id=\"index\"\n [attr.data-tooltip]=\"'Index' | rpxTranslate\"\n #mvIndexBtn\n class=\"mv-button mv-toolbar__menu-button--index tooltip\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvIndexBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvIndexBtn']\n \"\n [attr.aria-expanded]=\"isIndexOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleIndexSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Index\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvBookmarksBtn\"\n data-l10n-id=\"bookmarks\"\n [attr.data-tooltip]=\"'Bookmarks' | rpxTranslate\"\n #mvBookmarksBtn\n [ngClass]=\"{\n 'mv-button tooltip mv-toolbar__menu-button--bookmarks': true,\n 'button-hidden-on-toolbar':\n mvToolbarMain.offsetWidth <\n widthRequiredForBtn['mvBookmarksBtn'],\n 'button-hidden-on-dropdown':\n mvToolbarMain.offsetWidth >=\n widthRequiredForBtn['mvBookmarksBtn']\n }\"\n [attr.aria-expanded]=\"isBookmarksOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleBookmarksSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Bookmarks\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDrawButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw tooltip\"\n [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDrawBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDrawBtn']\n \"\n [class.toggled]=\"toolbarEvents.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"toggleDrawButton\"\n (click)=\"onClickDrawToggle(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"draw_label\">{{\n \"Draw a box\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showHighlightButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvHighlightBtn\"\n #mvHighlightBtn\n class=\"mv-button mv-toolbar__menu-button--highlight tooltip\"\n [attr.data-tooltip]=\"'Highlight' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.toggled]=\"toolbarEvents.highlightToolbarSubject | async\"\n aria-pressed=\"false\"\n (click)=\"onClickHighlightToggle(); isDropdownMenuOpen = false\"\n data-l10n-id=\"toggleHighlightButton\"\n >\n <span data-l10n-id=\"highlight_label\">{{\n \"Highlight\" | rpxTranslate\n }}</span>\n </button>\n\n <ng-container *ngIf=\"toolbarButtons.showNavigation\">\n <div\n id=\"mvPageBtn\"\n #mvPageBtn\n class=\"mv-toolbar__menu-button--page\"\n [attr.data-tooltip]=\"'Page' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPageBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPageBtn']\n \"\n >\n <span>{{ \"Page\" | rpxTranslate }}</span>\n\n <button\n id=\"mvUpBtn\"\n [disabled]=\"pageNumber === 1 || redactAllInProgress\"\n [attr.data-tooltip]=\"'Previous page' | rpxTranslate\"\n class=\"mv-toolbar__menu-button--up button-image tooltip\"\n data-l10n-id=\"previous\"\n (click)=\"decreasePageNumber()\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvDownBtn\"\n [disabled]=\"pageNumber === pageCount || redactAllInProgress\"\n [attr.data-tooltip]=\"'Next page' | rpxTranslate\"\n class=\"mv-toolbar__menu-button--down button-image tooltip\"\n data-l10n-id=\"next\"\n (click)=\"increasePageNumber()\"\n >\n <span></span>\n </button>\n\n <input\n type=\"number\"\n id=\"pageNumber\"\n class=\"hmcts-toolbar-input govuk-input--width-2 tooltip\"\n [attr.data-tooltip]=\"'Page number' | rpxTranslate\"\n [attr.aria-label]=\"'Page number' | rpxTranslate\"\n value=\"1\"\n size=\"4\"\n min=\"1\"\n [value]=\"pageNumber\"\n tabindex=\"0\"\n data-l10n-id=\"page\"\n (change)=\"onPageNumberInputChange(pageNumberInput.value)\"\n [disabled]=\"redactAllInProgress\"\n #pageNumberInput\n />\n <span id=\"numPages\" class=\"toolbarLabel\">/ {{ pageCount }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"toolbarButtons.showZoom\">\n <div\n id=\"mvZoomBtn\"\n #mvZoomBtn\n class=\"mv-toolbar__menu-button--zoom\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvZoomBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvZoomBtn']\n \"\n >\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 0.1 ||\n redactAllInProgress\n \"\n id=\"mvMinusBtn\"\n class=\"mv-toolbar__menu-button--zoom-out button-image tooltip\"\n [attr.data-tooltip]=\"'Zoom out' | rpxTranslate\"\n data-l10n-id=\"zoom_out\"\n (click)=\"stepZoom(-0.1)\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom Out\" | rpxTranslate\n }}</span>\n </button>\n <select\n id=\"scaleSelect\"\n class=\"hmcts-toolbar-select\"\n data-l10n-id=\"zoom\"\n (change)=\"zoom($event.target.value)\"\n aria-label=\"zoom\"\n tabindex=\"0\"\n [attr.data-tooltip]=\"'Zoom' | rpxTranslate\"\n [disabled]=\"redactAllInProgress\"\n >\n <option\n #zoomSelect\n id=\"customScaleOption\"\n title=\"\"\n [value]=\"toolbarEvents.zoomValueSubject.value\"\n >\n {{\n toolbarEvents.zoomValueSubject.value * 100\n | number : \"1.0-0\"\n }}%\n </option>\n <option\n *ngFor=\"let zoomScale of zoomScales\"\n title=\"\"\n [value]=\"zoomScale\"\n [attr.data-l10n-id]=\"'page_scale_percent_' + zoomScale * 100\"\n >\n {{ zoomScale * 100 }}%\n </option>\n </select>\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 5 ||\n redactAllInProgress\n \"\n id=\"mvPlusBtn\"\n class=\"mv-toolbar__menu-button--zoom-in button-image tooltip\"\n (click)=\"stepZoom(0.1)\"\n [attr.data-tooltip]=\"'Zoom in' | rpxTranslate\"\n data-l10n-id=\"zoom_in\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom In\" | rpxTranslate\n }}</span>\n </button>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"toolbarButtons.showRotate\"\n id=\"mvRotateBtn\"\n #mvRotateBtn\n class=\"mv-toolbar__menu-button--rotate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRotateBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRotateBtn']\n \"\n >\n <button\n id=\"mvRotateLeftBtn\"\n class=\"mv-toolbar__menu-button--rotate_left button-image tooltip\"\n aria-label=\"Rotate\"\n [attr.data-tooltip]=\"'Rotate counterclockwise' | rpxTranslate\"\n data-l10n-id=\"page_rotate_ccw\"\n (click)=\"rotate(270)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvRotateRightBtn\"\n class=\"mv-toolbar__menu-button--rotate_right button-image tooltip\"\n [attr.data-tooltip]=\"'Rotate clockwise' | rpxTranslate\"\n data-l10n-id=\"page_rotate_cw\"\n (click)=\"rotate(90)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <span>{{ \"Rotate\" | rpxTranslate }}</span>\n </div>\n\n <button\n *ngIf=\"toolbarButtons.showSearchBar\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvSearchBtn\"\n #mvSearchBtn\n [attr.data-tooltip]=\"'Search' | rpxTranslate\"\n data-l10n-id=\"searchbar\"\n class=\"mv-button mv-toolbar__menu-button--search tooltip\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvSearchBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvSearchBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleSearchBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Search\" | rpxTranslate }}</span>\n </button>\n <mv-search-bar\n *ngIf=\"!toolbarEvents.searchBarHidden.getValue()\"\n ></mv-search-bar>\n\n <button\n *ngIf=\"enableICP && toolbarButtons.showPresentationMode && isPdf()\"\n [disabled]=\"icpEnabled || !contentType || redactionEnabled\"\n id=\"mvPresentBtn\"\n #mvPresentBtn\n class=\"mv-button mv-toolbar__menu-button--present tooltip\"\n [attr.data-tooltip]=\"'In-Court presentation mode' | rpxTranslate\"\n data-l10n-id=\"icpMode_label\"\n [ngClass]=\"onToolBarOffSetChange('mvPresentBtn')\"\n aria-pressed=\"false\"\n (click)=\"togglePresentBar(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"icpMode_label\">{{\n \"Present\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"enableRedactions && toolbarButtons.showRedact\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvRedactBtn\"\n #mvRedactBtn\n [attr.data-tooltip]=\"'Redact' | rpxTranslate\"\n data-l10n-id=\"redact\"\n class=\"mv-button mv-toolbar__menu-button--redact tooltip\"\n [ngClass]=\"onToolBarOffSetChange('mvRedactBtn')\"\n [attr.aria-expanded]=\"isRedactOpen\"\n (click)=\"toggleRedactBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Redact\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showGrabNDragButton\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvGrabBtn\"\n #mvGrabBtn\n class=\"mv-button mv-toolbar__menu-button--grab tooltip\"\n data-tooltip=\"Grab and drag\"\n [ngClass]=\"onToolBarOffSetChange('mvGrabBtn')\"\n aria-pressed=\"false\"\n (click)=\"toggleGrabNDrag(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Grab and drag\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDownload\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDownloadBtn\"\n #mvDownloadBtn\n class=\"mv-button mv-toolbar__menu-button--download tooltip\"\n [attr.data-tooltip]=\"'Download' | rpxTranslate\"\n data-l10n-id=\"download\"\n [ngClass]=\"onToolBarOffSetChange('mvDownloadBtn')\"\n aria-pressed=\"false\"\n (click)=\"downloadFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Download\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showPrint\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvPrintBtn\"\n #mvPrintBtn\n data-l10n-id=\"print\"\n aria-label=\"Print\"\n [attr.data-tooltip]=\"'Print' | rpxTranslate\"\n data-l10n-id=\"print\"\n class=\"mv-button mv-toolbar__menu-button--print tooltip\"\n [ngClass]=\"onToolBarOffSetChange('mvPrintBtn')\"\n aria-pressed=\"false\"\n (click)=\"printFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Print\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"enableAnnotations && toolbarButtons.showCommentSummary\"\n [disabled]=\"redactionEnabled\"\n id=\"mvCommentsBtn\"\n #mvCommentsBtn\n class=\"mv-button mv-toolbar__menu-button--comments tooltip\"\n [attr.data-tooltip]=\"'Comments' | rpxTranslate\"\n data-l10n-id=\"comments\"\n [ngClass]=\"onToolBarOffSetChange('mvCommentsBtn')\"\n [attr.aria-expanded]=\"isCommentsOpen\"\n (click)=\"toggleCommentsPanel(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Comments\" | rpxTranslate }}</span>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i7.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i8.SearchBarComponent, selector: "mv-search-bar" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.DecimalPipe, name: "number" }, { kind: "pipe", type: i9.RpxTranslatePipe, name: "rpxTranslate" }] }); }
175
175
  }
176
176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MainToolbarComponent, decorators: [{
177
177
  type: Component,
178
- args: [{ selector: 'mv-main-toolbar', template: "<div class=\"toolbar\">\n <div id=\"toolbarContainer\">\n <div class=\"mv-toolbar__container\">\n <div #mvToolbar class=\"mv-toolbar\" [class.notSupported]=\"!contentType\">\n <!-- The mvToolbarMain div contains all toolbar buttons except the \"More options\" button. This allows for calculation of the available space to display buttons -->\n <div id=\"mvToolbarMain\" class=\"mv-toolbar-main\" #mvToolbarMain>\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n <!-- The mvToolbarMoreOptions div contains the \"More options\" toolbar button (and the overlay template for the dropdown menu).\n The space occupied by the button (if visible) is excluded from the toolbar space available calculation -->\n <div id=\"mvToolbarMoreOptions\" class=\"mv-toolbar-more-options\">\n <button\n id=\"mvMoreOptionsBtn\"\n class=\"mv-button mv-toolbar__menu-button--more-options\"\n [class.mv-toolbar__menu-button--more-options__hidden]=\"\n mvToolbar.offsetWidth >= allButtonsWidth\n \"\n [attr.aria-expanded]=\"isDropdownMenuOpen\"\n (click)=\"toggleMoreOptions()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"redactAllInProgress\"\n >\n <span>{{ \"More options\" | rpxTranslate }}</span>\n </button>\n <!-- This template displays the overlay content for the dropdown menu and is connected to the \"More options\" button -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownMenuOpen\"\n [cdkConnectedOverlayPositions]=\"dropdownMenuPositions\"\n >\n <div class=\"dropdown-menu\" #dropdownMenu tabindex=\"0\">\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div id=\"mvMenuItems\" #mvMenuItems>\n <ng-template #menuItems>\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvIndexBtn\"\n title=\"Index\"\n data-l10n-id=\"index\"\n #mvIndexBtn\n class=\"mv-button mv-toolbar__menu-button--index\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvIndexBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvIndexBtn']\n \"\n [attr.aria-expanded]=\"isIndexOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleIndexSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Index\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvBookmarksBtn\"\n title=\"Bookmarks\"\n data-l10n-id=\"bookmarks\"\n #mvBookmarksBtn\n [ngClass]=\"{\n 'mv-button mv-toolbar__menu-button--bookmarks': true,\n 'button-hidden-on-toolbar':\n mvToolbarMain.offsetWidth <\n widthRequiredForBtn['mvBookmarksBtn'],\n 'button-hidden-on-dropdown':\n mvToolbarMain.offsetWidth >=\n widthRequiredForBtn['mvBookmarksBtn']\n }\"\n [attr.aria-expanded]=\"isBookmarksOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleBookmarksSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Bookmarks\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDrawButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw\"\n title=\"Draw a box\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDrawBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDrawBtn']\n \"\n [class.toggled]=\"toolbarEvents.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"toggleDrawButton\"\n (click)=\"onClickDrawToggle(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"draw_label\">{{\n \"Draw a box\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showHighlightButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvHighlightBtn\"\n #mvHighlightBtn\n class=\"mv-button mv-toolbar__menu-button--highlight\"\n title=\"Highlight\"\n aria-label=\"Highlight\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.toggled]=\"toolbarEvents.highlightToolbarSubject | async\"\n aria-pressed=\"false\"\n (click)=\"onClickHighlightToggle(); isDropdownMenuOpen = false\"\n data-l10n-id=\"toggleHighlightButton\"\n >\n <span data-l10n-id=\"highlight_label\">{{\n \"Highlight\" | rpxTranslate\n }}</span>\n </button>\n\n <ng-container *ngIf=\"toolbarButtons.showNavigation\">\n <div\n id=\"mvPageBtn\"\n #mvPageBtn\n class=\"mv-toolbar__menu-button--page\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPageBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPageBtn']\n \"\n >\n <span>{{ \"Page\" | rpxTranslate }}</span>\n\n <button\n id=\"mvUpBtn\"\n [disabled]=\"pageNumber === 1 || redactAllInProgress\"\n title=\"Previous Page\"\n class=\"mv-toolbar__menu-button--up button-image\"\n data-l10n-id=\"previous\"\n (click)=\"decreasePageNumber()\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvDownBtn\"\n [disabled]=\"pageNumber === pageCount || redactAllInProgress\"\n title=\"Next Page\"\n class=\"mv-toolbar__menu-button--down button-image\"\n data-l10n-id=\"next\"\n (click)=\"increasePageNumber()\"\n >\n <span></span>\n </button>\n\n <input\n type=\"number\"\n id=\"pageNumber\"\n class=\"hmcts-toolbar-input govuk-input--width-2\"\n title=\"Page Number\"\n value=\"1\"\n size=\"4\"\n min=\"1\"\n [value]=\"pageNumber\"\n aria-label=\"page number\"\n tabindex=\"0\"\n data-l10n-id=\"page\"\n (change)=\"onPageNumberInputChange(pageNumberInput.value)\"\n [disabled]=\"redactAllInProgress\"\n #pageNumberInput\n />\n <span id=\"numPages\" class=\"toolbarLabel\">/ {{ pageCount }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"toolbarButtons.showZoom\">\n <div\n id=\"mvZoomBtn\"\n #mvZoomBtn\n class=\"mv-toolbar__menu-button--zoom\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvZoomBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvZoomBtn']\n \"\n >\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 0.1 ||\n redactAllInProgress\n \"\n id=\"mvMinusBtn\"\n class=\"mv-toolbar__menu-button--zoom-out button-image\"\n title=\"Zoom Out\"\n data-l10n-id=\"zoom_out\"\n (click)=\"stepZoom(-0.1)\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom Out\" | rpxTranslate\n }}</span>\n </button>\n <select\n id=\"scaleSelect\"\n class=\"hmcts-toolbar-select\"\n title=\"Zoom\"\n tabindex=\"0\"\n data-l10n-id=\"zoom\"\n (change)=\"zoom($event.target.value)\"\n aria-label=\"zoom\"\n [disabled]=\"redactAllInProgress\"\n >\n <option\n #zoomSelect\n id=\"customScaleOption\"\n title=\"\"\n [value]=\"toolbarEvents.zoomValueSubject.value\"\n >\n {{\n toolbarEvents.zoomValueSubject.value * 100\n | number : \"1.0-0\"\n }}%\n </option>\n <option\n *ngFor=\"let zoomScale of zoomScales\"\n title=\"\"\n [value]=\"zoomScale\"\n [attr.data-l10n-id]=\"'page_scale_percent_' + zoomScale * 100\"\n >\n {{ zoomScale * 100 }}%\n </option>\n </select>\n\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 5 ||\n redactAllInProgress\n \"\n id=\"mvPlusBtn\"\n class=\"mv-toolbar__menu-button--zoom-in button-image\"\n (click)=\"stepZoom(0.1)\"\n title=\"Zoom In\"\n data-l10n-id=\"zoom_in\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom In\" | rpxTranslate\n }}</span>\n </button>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"toolbarButtons.showRotate\"\n id=\"mvRotateBtn\"\n #mvRotateBtn\n class=\"mv-toolbar__menu-button--rotate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRotateBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRotateBtn']\n \"\n >\n <button\n id=\"mvRotateLeftBtn\"\n class=\"mv-toolbar__menu-button--rotate_left button-image\"\n title=\"Rotate Counterclockwise\"\n data-l10n-id=\"page_rotate_ccw\"\n (click)=\"rotate(270)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvRotateRightBtn\"\n class=\"mv-toolbar__menu-button--rotate_right button-image\"\n title=\"Rotate Clockwise\"\n data-l10n-id=\"page_rotate_cw\"\n (click)=\"rotate(90)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <span>{{ \"Rotate\" | rpxTranslate }}</span>\n </div>\n\n <button\n *ngIf=\"toolbarButtons.showSearchBar\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvSearchBtn\"\n #mvSearchBtn\n title=\"Search\"\n data-l10n-id=\"searchbar\"\n class=\"mv-button mv-toolbar__menu-button--search\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvSearchBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvSearchBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleSearchBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Search\" | rpxTranslate }}</span>\n </button>\n <mv-search-bar\n *ngIf=\"!toolbarEvents.searchBarHidden.getValue()\"\n ></mv-search-bar>\n\n <button\n *ngIf=\"enableICP && toolbarButtons.showPresentationMode && isPdf()\"\n [disabled]=\"icpEnabled || !contentType || redactionEnabled\"\n id=\"mvPresentBtn\"\n #mvPresentBtn\n class=\"mv-button mv-toolbar__menu-button--present\"\n title=\"In-Court Presentation Mode\"\n data-l10n-id=\"icpMode_label\"\n [ngClass]=\"onToolBarOffSetChange('mvPresentBtn')\"\n aria-pressed=\"false\"\n (click)=\"togglePresentBar(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"icpMode_label\">{{\n \"Present\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"enableRedactions && toolbarButtons.showRedact\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvRedactBtn\"\n #mvRedactBtn\n title=\"Redact\"\n data-l10n-id=\"redact\"\n class=\"mv-button mv-toolbar__menu-button--redact\"\n [ngClass]=\"onToolBarOffSetChange('mvRedactBtn')\"\n [attr.aria-expanded]=\"isRedactOpen\"\n (click)=\"toggleRedactBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Redact\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showGrabNDragButton\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvGrabBtn\"\n #mvGrabBtn\n class=\"mv-button mv-toolbar__menu-button--grab\"\n title=\"Grab and drag\"\n [ngClass]=\"onToolBarOffSetChange('mvGrabBtn')\"\n aria-pressed=\"false\"\n (click)=\"toggleGrabNDrag(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Grab and drag\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDownload\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDownloadBtn\"\n #mvDownloadBtn\n class=\"mv-button mv-toolbar__menu-button--download\"\n title=\"Download\"\n data-l10n-id=\"download\"\n [ngClass]=\"onToolBarOffSetChange('mvDownloadBtn')\"\n aria-pressed=\"false\"\n (click)=\"downloadFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Download\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showPrint\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvPrintBtn\"\n #mvPrintBtn\n title=\"Print\"\n data-l10n-id=\"print\"\n class=\"mv-button mv-toolbar__menu-button--print\"\n [ngClass]=\"onToolBarOffSetChange('mvPrintBtn')\"\n aria-pressed=\"false\"\n (click)=\"printFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Print\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"enableAnnotations && toolbarButtons.showCommentSummary\"\n [disabled]=\"redactionEnabled\"\n id=\"mvCommentsBtn\"\n #mvCommentsBtn\n class=\"mv-button mv-toolbar__menu-button--comments\"\n title=\"Comments\"\n data-l10n-id=\"comments\"\n [ngClass]=\"onToolBarOffSetChange('mvCommentsBtn')\"\n [attr.aria-expanded]=\"isCommentsOpen\"\n (click)=\"toggleCommentsPanel(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Comments\" | rpxTranslate }}</span>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n" }]
178
+ args: [{ selector: 'mv-main-toolbar', template: "<div class=\"toolbar\">\n <div id=\"toolbarContainer\">\n <div class=\"mv-toolbar__container\">\n <div #mvToolbar class=\"mv-toolbar\" [class.notSupported]=\"!contentType\">\n <!-- The mvToolbarMain div contains all toolbar buttons except the \"More options\" button. This allows for calculation of the available space to display buttons -->\n <div id=\"mvToolbarMain\" class=\"mv-toolbar-main\" #mvToolbarMain>\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n <!-- The mvToolbarMoreOptions div contains the \"More options\" toolbar button (and the overlay template for the dropdown menu).\n The space occupied by the button (if visible) is excluded from the toolbar space available calculation -->\n <div id=\"mvToolbarMoreOptions\" class=\"mv-toolbar-more-options\">\n <button\n id=\"mvMoreOptionsBtn\"\n class=\"mv-button mv-toolbar__menu-button--more-options tooltip\"\n [class.mv-toolbar__menu-button--more-options__hidden]=\"\n mvToolbar.offsetWidth >= allButtonsWidth\n \"\n [attr.aria-expanded]=\"isDropdownMenuOpen\"\n [attr.data-tooltip]=\"'More options' | rpxTranslate\"\n (click)=\"toggleMoreOptions()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"redactAllInProgress\"\n >\n <span>{{ \"More options\" | rpxTranslate }}</span>\n </button>\n <!-- This template displays the overlay content for the dropdown menu and is connected to the \"More options\" button -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownMenuOpen\"\n [cdkConnectedOverlayPositions]=\"dropdownMenuPositions\"\n >\n <div class=\"dropdown-menu\" #dropdownMenu tabindex=\"0\">\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n </ng-template>\n </div>\n </div>\n <div id=\"mvMenuItems\" #mvMenuItems>\n <ng-template #menuItems>\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvIndexBtn\"\n data-l10n-id=\"index\"\n [attr.data-tooltip]=\"'Index' | rpxTranslate\"\n #mvIndexBtn\n class=\"mv-button mv-toolbar__menu-button--index tooltip\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvIndexBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvIndexBtn']\n \"\n [attr.aria-expanded]=\"isIndexOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleIndexSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Index\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvBookmarksBtn\"\n data-l10n-id=\"bookmarks\"\n [attr.data-tooltip]=\"'Bookmarks' | rpxTranslate\"\n #mvBookmarksBtn\n [ngClass]=\"{\n 'mv-button tooltip mv-toolbar__menu-button--bookmarks': true,\n 'button-hidden-on-toolbar':\n mvToolbarMain.offsetWidth <\n widthRequiredForBtn['mvBookmarksBtn'],\n 'button-hidden-on-dropdown':\n mvToolbarMain.offsetWidth >=\n widthRequiredForBtn['mvBookmarksBtn']\n }\"\n [attr.aria-expanded]=\"isBookmarksOpen\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleBookmarksSideBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Bookmarks\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDrawButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw tooltip\"\n [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDrawBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDrawBtn']\n \"\n [class.toggled]=\"toolbarEvents.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"toggleDrawButton\"\n (click)=\"onClickDrawToggle(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"draw_label\">{{\n \"Draw a box\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showHighlightButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvHighlightBtn\"\n #mvHighlightBtn\n class=\"mv-button mv-toolbar__menu-button--highlight tooltip\"\n [attr.data-tooltip]=\"'Highlight' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.toggled]=\"toolbarEvents.highlightToolbarSubject | async\"\n aria-pressed=\"false\"\n (click)=\"onClickHighlightToggle(); isDropdownMenuOpen = false\"\n data-l10n-id=\"toggleHighlightButton\"\n >\n <span data-l10n-id=\"highlight_label\">{{\n \"Highlight\" | rpxTranslate\n }}</span>\n </button>\n\n <ng-container *ngIf=\"toolbarButtons.showNavigation\">\n <div\n id=\"mvPageBtn\"\n #mvPageBtn\n class=\"mv-toolbar__menu-button--page\"\n [attr.data-tooltip]=\"'Page' | rpxTranslate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPageBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPageBtn']\n \"\n >\n <span>{{ \"Page\" | rpxTranslate }}</span>\n\n <button\n id=\"mvUpBtn\"\n [disabled]=\"pageNumber === 1 || redactAllInProgress\"\n [attr.data-tooltip]=\"'Previous page' | rpxTranslate\"\n class=\"mv-toolbar__menu-button--up button-image tooltip\"\n data-l10n-id=\"previous\"\n (click)=\"decreasePageNumber()\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvDownBtn\"\n [disabled]=\"pageNumber === pageCount || redactAllInProgress\"\n [attr.data-tooltip]=\"'Next page' | rpxTranslate\"\n class=\"mv-toolbar__menu-button--down button-image tooltip\"\n data-l10n-id=\"next\"\n (click)=\"increasePageNumber()\"\n >\n <span></span>\n </button>\n\n <input\n type=\"number\"\n id=\"pageNumber\"\n class=\"hmcts-toolbar-input govuk-input--width-2 tooltip\"\n [attr.data-tooltip]=\"'Page number' | rpxTranslate\"\n [attr.aria-label]=\"'Page number' | rpxTranslate\"\n value=\"1\"\n size=\"4\"\n min=\"1\"\n [value]=\"pageNumber\"\n tabindex=\"0\"\n data-l10n-id=\"page\"\n (change)=\"onPageNumberInputChange(pageNumberInput.value)\"\n [disabled]=\"redactAllInProgress\"\n #pageNumberInput\n />\n <span id=\"numPages\" class=\"toolbarLabel\">/ {{ pageCount }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"toolbarButtons.showZoom\">\n <div\n id=\"mvZoomBtn\"\n #mvZoomBtn\n class=\"mv-toolbar__menu-button--zoom\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvZoomBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvZoomBtn']\n \"\n >\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 0.1 ||\n redactAllInProgress\n \"\n id=\"mvMinusBtn\"\n class=\"mv-toolbar__menu-button--zoom-out button-image tooltip\"\n [attr.data-tooltip]=\"'Zoom out' | rpxTranslate\"\n data-l10n-id=\"zoom_out\"\n (click)=\"stepZoom(-0.1)\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom Out\" | rpxTranslate\n }}</span>\n </button>\n <select\n id=\"scaleSelect\"\n class=\"hmcts-toolbar-select\"\n data-l10n-id=\"zoom\"\n (change)=\"zoom($event.target.value)\"\n aria-label=\"zoom\"\n tabindex=\"0\"\n [attr.data-tooltip]=\"'Zoom' | rpxTranslate\"\n [disabled]=\"redactAllInProgress\"\n >\n <option\n #zoomSelect\n id=\"customScaleOption\"\n title=\"\"\n [value]=\"toolbarEvents.zoomValueSubject.value\"\n >\n {{\n toolbarEvents.zoomValueSubject.value * 100\n | number : \"1.0-0\"\n }}%\n </option>\n <option\n *ngFor=\"let zoomScale of zoomScales\"\n title=\"\"\n [value]=\"zoomScale\"\n [attr.data-l10n-id]=\"'page_scale_percent_' + zoomScale * 100\"\n >\n {{ zoomScale * 100 }}%\n </option>\n </select>\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 5 ||\n redactAllInProgress\n \"\n id=\"mvPlusBtn\"\n class=\"mv-toolbar__menu-button--zoom-in button-image tooltip\"\n (click)=\"stepZoom(0.1)\"\n [attr.data-tooltip]=\"'Zoom in' | rpxTranslate\"\n data-l10n-id=\"zoom_in\"\n >\n <span class=\"mv-toolbar__menu-button--zoom-out-text\">{{\n \"Zoom In\" | rpxTranslate\n }}</span>\n </button>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"toolbarButtons.showRotate\"\n id=\"mvRotateBtn\"\n #mvRotateBtn\n class=\"mv-toolbar__menu-button--rotate\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRotateBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRotateBtn']\n \"\n >\n <button\n id=\"mvRotateLeftBtn\"\n class=\"mv-toolbar__menu-button--rotate_left button-image tooltip\"\n aria-label=\"Rotate\"\n [attr.data-tooltip]=\"'Rotate counterclockwise' | rpxTranslate\"\n data-l10n-id=\"page_rotate_ccw\"\n (click)=\"rotate(270)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvRotateRightBtn\"\n class=\"mv-toolbar__menu-button--rotate_right button-image tooltip\"\n [attr.data-tooltip]=\"'Rotate clockwise' | rpxTranslate\"\n data-l10n-id=\"page_rotate_cw\"\n (click)=\"rotate(90)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <span>{{ \"Rotate\" | rpxTranslate }}</span>\n </div>\n\n <button\n *ngIf=\"toolbarButtons.showSearchBar\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvSearchBtn\"\n #mvSearchBtn\n [attr.data-tooltip]=\"'Search' | rpxTranslate\"\n data-l10n-id=\"searchbar\"\n class=\"mv-button mv-toolbar__menu-button--search tooltip\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvSearchBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvSearchBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleSearchBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Search\" | rpxTranslate }}</span>\n </button>\n <mv-search-bar\n *ngIf=\"!toolbarEvents.searchBarHidden.getValue()\"\n ></mv-search-bar>\n\n <button\n *ngIf=\"enableICP && toolbarButtons.showPresentationMode && isPdf()\"\n [disabled]=\"icpEnabled || !contentType || redactionEnabled\"\n id=\"mvPresentBtn\"\n #mvPresentBtn\n class=\"mv-button mv-toolbar__menu-button--present tooltip\"\n [attr.data-tooltip]=\"'In-Court presentation mode' | rpxTranslate\"\n data-l10n-id=\"icpMode_label\"\n [ngClass]=\"onToolBarOffSetChange('mvPresentBtn')\"\n aria-pressed=\"false\"\n (click)=\"togglePresentBar(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"icpMode_label\">{{\n \"Present\" | rpxTranslate\n }}</span>\n </button>\n\n <button\n *ngIf=\"enableRedactions && toolbarButtons.showRedact\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvRedactBtn\"\n #mvRedactBtn\n [attr.data-tooltip]=\"'Redact' | rpxTranslate\"\n data-l10n-id=\"redact\"\n class=\"mv-button mv-toolbar__menu-button--redact tooltip\"\n [ngClass]=\"onToolBarOffSetChange('mvRedactBtn')\"\n [attr.aria-expanded]=\"isRedactOpen\"\n (click)=\"toggleRedactBar(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Redact\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showGrabNDragButton\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvGrabBtn\"\n #mvGrabBtn\n class=\"mv-button mv-toolbar__menu-button--grab tooltip\"\n data-tooltip=\"Grab and drag\"\n [ngClass]=\"onToolBarOffSetChange('mvGrabBtn')\"\n aria-pressed=\"false\"\n (click)=\"toggleGrabNDrag(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Grab and drag\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDownload\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDownloadBtn\"\n #mvDownloadBtn\n class=\"mv-button mv-toolbar__menu-button--download tooltip\"\n [attr.data-tooltip]=\"'Download' | rpxTranslate\"\n data-l10n-id=\"download\"\n [ngClass]=\"onToolBarOffSetChange('mvDownloadBtn')\"\n aria-pressed=\"false\"\n (click)=\"downloadFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Download\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showPrint\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvPrintBtn\"\n #mvPrintBtn\n data-l10n-id=\"print\"\n aria-label=\"Print\"\n [attr.data-tooltip]=\"'Print' | rpxTranslate\"\n data-l10n-id=\"print\"\n class=\"mv-button mv-toolbar__menu-button--print tooltip\"\n [ngClass]=\"onToolBarOffSetChange('mvPrintBtn')\"\n aria-pressed=\"false\"\n (click)=\"printFile(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Print\" | rpxTranslate }}</span>\n </button>\n\n <button\n *ngIf=\"enableAnnotations && toolbarButtons.showCommentSummary\"\n [disabled]=\"redactionEnabled\"\n id=\"mvCommentsBtn\"\n #mvCommentsBtn\n class=\"mv-button mv-toolbar__menu-button--comments tooltip\"\n [attr.data-tooltip]=\"'Comments' | rpxTranslate\"\n data-l10n-id=\"comments\"\n [ngClass]=\"onToolBarOffSetChange('mvCommentsBtn')\"\n [attr.aria-expanded]=\"isCommentsOpen\"\n (click)=\"toggleCommentsPanel(); isDropdownMenuOpen = false\"\n >\n <span>{{ \"Comments\" | rpxTranslate }}</span>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n" }]
179
179
  }], ctorParameters: () => [{ type: i1.ToolbarEventService }, { type: i2.ToolbarButtonVisibilityService }, { type: i0.ChangeDetectorRef }, { type: i3.NumberHelperService }, { type: i4.IcpEventService }], propDecorators: { enableAnnotations: [{
180
180
  type: Input
181
181
  }], enableRedactions: [{
@@ -203,4 +203,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
203
203
  type: HostListener,
204
204
  args: ['document:keydown.meta.p', ['$event']]
205
205
  }] } });
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3Rvb2xiYXIvbWFpbi10b29sYmFyL21haW4tdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL21haW4tdG9vbGJhci9tYWluLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQU12QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7Ozs7Ozs7QUFNdEYsTUFBTSxPQUFPLG9CQUFvQjtJQTRDL0IsWUFDa0IsYUFBa0MsRUFDbEMsY0FBOEMsRUFDN0MsR0FBc0IsRUFDdEIsWUFBaUMsRUFDakMsZUFBZ0M7UUFKakMsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQztRQUM3QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBL0MxQyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFNWCxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFFN0MsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFJekIsZUFBVSxHQUFH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MUIsY0FBYztzQkFGcEIsWUFBWTt1QkFBQyw0QkFBNEIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3JELFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0aW9uUG9zaXRpb25QYWlyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVG9vbGJhckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sYmFyQnV0dG9uVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi90b29sYmFyLWJ1dHRvbi12aXNpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTnVtYmVySGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2xpYi9zaGFyZWQvdXRpbC9zZXJ2aWNlcy9udW1iZXIuaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWNwRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vaWNwLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgSHRtbFRlbXBsYXRlc0hlbHBlciB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlsL2hlbHBlcnMvaHRtbC10ZW1wbGF0ZXMuaGVscGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtbWFpbi10b29sYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tdG9vbGJhci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgTWFpblRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgZW5hYmxlQW5ub3RhdGlvbnMgPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlUmVkYWN0aW9ucyA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVJQ1AgPSBmYWxzZTtcbiAgQElucHV0KCkgY29udGVudFR5cGUgPSBudWxsO1xuXG4gIEBWaWV3Q2hpbGQoJ3pvb21TZWxlY3QnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIHpvb21TZWxlY3Q6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ212VG9vbGJhck1haW4nLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIG12VG9vbGJhck1haW46IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdkcm9wZG93bk1lbnUnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIG12TWVudUl0ZW1zOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgcHVibGljIGljcEVuYWJsZWQgPSBmYWxzZTtcbiAgcHVibGljIHJlZGFjdGlvbkVuYWJsZWQgPSBmYWxzZTtcbiAgcHVibGljIHNob3dDb21tZW50c1BhbmVsOiBib29sZWFuO1xuICBwdWJsaWMgcmVkYWN0QWxsSW5Qcm9ncmVzczogYm9vbGVhbjtcblxuICBwdWJsaWMgcGFnZU51bWJlciA9IDE7XG4gIHB1YmxpYyBwYWdlQ291bnQgPSAwO1xuICBwdWJsaWMgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBpc0Jvb2ttYXJrc09wZW4gPSBmYWxzZTtcbiAgcHVibGljIGlzSW5kZXhPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBpc1JlZGFjdE9wZW4gPSBmYWxzZTtcbiAgcHVibGljIGlzQ29tbWVudHNPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBkcm9wZG93bk1lbnVQb3NpdGlvbnMgPSBbXG4gICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgIH0sXG4gICAgICAwLFxuICAgICAgMylcbiAgXTtcblxuICBwdWJsaWMgem9vbVNjYWxlcyA9IFswLjEsIDAuMjUsIDAuNSwgMC43NSwgMSwgMS4yNSwgMS41LCAyLjUsIDMsIDVdO1xuXG4gIGFsbEJ1dHRvbnNXaWR0aCA9IDA7XG4gIHdpZHRoUmVxdWlyZWRGb3JCdG46IHsgW2lkOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckV2ZW50czogVG9vbGJhckV2ZW50U2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckJ1dHRvbnM6IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBudW1iZXJIZWxwZXI6IE51bWJlckhlbHBlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY3BFdmVudFNlcnZpY2U6IEljcEV2ZW50U2VydmljZVxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZXRDdXJyZW50UGFnZVN1YmplY3Quc3Vic2NyaWJlKHBhZ2VOdW1iZXIgPT4gdGhpcy5zZXRDdXJyZW50UGFnZShwYWdlTnVtYmVyKSksXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2V0Q3VycmVudFBhZ2VJbnB1dFZhbHVlU3ViamVjdC5zdWJzY3JpYmUocGFnZU51bWJlciA9PiB0aGlzLnBhZ2VOdW1iZXIgPSBwYWdlTnVtYmVyKSxcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5nZXRQYWdlQ291bnQoKS5zdWJzY3JpYmUoY291bnQgPT4gdGhpcy5wYWdlQ291bnQgPSBjb3VudCksXG4gICAgICB0aGlzLmljcEV2ZW50U2VydmljZS5lbmFibGVkLnN1YnNjcmliZShlbmFibGVkID0+IHtcbiAgICAgICAgdGhpcy5pY3BFbmFibGVkID0gZW5hYmxlZDtcbiAgICAgICAgaWYgKHRoaXMuaWNwRW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVDb21tZW50c1BhbmVsKCFlbmFibGVkKTtcbiAgICAgICAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2lkZWJhck9wZW4ubmV4dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnJlZGFjdGlvbk1vZGUuc3Vic2NyaWJlKGVuYWJsZWQgPT4ge1xuICAgICAgICB0aGlzLnJlZGFjdGlvbkVuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgfSksXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMucmVkYWN0QWxsSW5Qcm9ncmVzc1N1YmplY3Quc3Vic2NyaWJlKGRpc2FibGUgPT4ge1xuICAgICAgICB0aGlzLnJlZGFjdEFsbEluUHJvZ3Jlc3MgPSBkaXNhYmxlO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgQXJyYXkuZnJvbSh0aGlzLm12VG9vbGJhck1haW4ubmF0aXZlRWxlbWVudC5jaGlsZHJlbikuZm9yRWFjaCgoYnV0dG9uOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgdGhpcy5hbGxCdXR0b25zV2lkdGggKz0gSHRtbFRlbXBsYXRlc0hlbHBlci5nZXRBZGp1c3RlZEJvdW5kaW5nUmVjdChidXR0b24pLndpZHRoO1xuICAgICAgdGhpcy53aWR0aFJlcXVpcmVkRm9yQnRuW2J1dHRvbi5pZF0gPSB0aGlzLmFsbEJ1dHRvbnNXaWR0aDtcbiAgICB9KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgW10pXG4gIHB1YmxpYyBvblJlc2l6ZSgpIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmNvbnRyb2wucCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24ubWV0YS5wJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uQ29udHJvbFByaW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnByaW50RmlsZSgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpY2tIaWdobGlnaHRUb2dnbGUoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZUhpZ2hsaWdodFRvb2xiYXIoKTtcbiAgfVxuICBwdWJsaWMgb25DbGlja0RyYXdUb2dnbGUoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZURyYXdNb2RlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlSW5kZXhTaWRlQmFyKCkge1xuICAgIGNvbnN0IHNpZGViYXJPcGVuID0gdGhpcy50b29sYmFyRXZlbnRzLnNpZGViYXJPcGVuLmdldFZhbHVlKCk7XG4gICAgY29uc3Qgc2lkZWJhclZpZXcgPSB0aGlzLnRvb2xiYXJFdmVudHMuc2lkZWJhck91dGxpbmVWaWV3LmdldFZhbHVlKCk7XG4gICAgaWYgKCEoc2lkZWJhck9wZW4gJiYgIXNpZGViYXJWaWV3KSkge1xuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZVNpZGVCYXIoIXNpZGViYXJPcGVuKTtcbiAgICB9XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZVNpZGVCYXJWaWV3KHRydWUpO1xuICAgIHRoaXMuaXNJbmRleE9wZW4gPSAhdGhpcy5pc0luZGV4T3BlbjtcbiAgfVxuXG4gIHB1YmxpYyBvblRvb2xCYXJPZmZTZXRDaGFuZ2UoYnV0dG9uSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm12VG9vbGJhck1haW4gJiYgdGhpcy5tdlRvb2xiYXJNYWluLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCB0aGlzLndpZHRoUmVxdWlyZWRGb3JCdG5bYnV0dG9uSWRdKSB7XG4gICAgICByZXR1cm4gXCJidXR0b24taGlkZGVuLW9uLXRvb2xiYXJcIjtcblxuICAgIH1cbiAgICByZXR1cm4gXCJidXR0b24taGlkZGVuLW9uLWRyb3Bkb3duXCI7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQm9va21hcmtzU2lkZUJhcigpIHtcbiAgICBjb25zdCBzaWRlYmFyT3BlbiA9IHRoaXMudG9vbGJhckV2ZW50cy5zaWRlYmFyT3Blbi5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHNpZGViYXJWaWV3ID0gdGhpcy50b29sYmFyRXZlbnRzLnNpZGViYXJPdXRsaW5lVmlldy5nZXRWYWx1ZSgpO1xuICAgIGlmICghKHNpZGViYXJPcGVuICYmIHNpZGViYXJWaWV3KSkge1xuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZVNpZGVCYXIoIXNpZGViYXJPcGVuKTtcbiAgICB9XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZVNpZGVCYXJWaWV3KGZhbHNlKTtcbiAgICB0aGlzLmlzQm9va21hcmtzT3BlbiA9ICF0aGlzLmlzQm9va21hcmtzT3BlbjtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVQcmVzZW50QmFyKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2hCYXJIaWRkZW4ubmV4dCh0cnVlKTtcbiAgICB0aGlzLmljcEV2ZW50U2VydmljZS5lbmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbmNyZWFzZVBhZ2VOdW1iZXIoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLmluY3JlbWVudFBhZ2UoMSk7XG4gIH1cblxuICBwdWJsaWMgZGVjcmVhc2VQYWdlTnVtYmVyKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5pbmNyZW1lbnRQYWdlKC0xKTtcbiAgfVxuXG4gIHB1YmxpYyBvblBhZ2VOdW1iZXJJbnB1dENoYW5nZShwYWdlTnVtYmVyOiBzdHJpbmcpIHtcbiAgICBpZiAoTnVtYmVyKHBhZ2VOdW1iZXIpIDwgMSkge1xuICAgICAgcGFnZU51bWJlciA9ICcxJztcbiAgICB9XG4gICAgaWYgKE51bWJlcihwYWdlTnVtYmVyKSA+IHRoaXMucGFnZUNvdW50KSB7XG4gICAgICBwYWdlTnVtYmVyID0gdGhpcy5wYWdlQ291bnQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2V0UGFnZShOdW1iZXIucGFyc2VJbnQocGFnZU51bWJlciwgMTApKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3VycmVudFBhZ2UocGFnZU51bWJlcjogbnVtYmVyKSB7XG4gICAgdGhpcy5wYWdlTnVtYmVyID0gcGFnZU51bWJlcjtcbiAgfVxuXG4gIHB1YmxpYyByb3RhdGUocm90YXRpb246IG51bWJlcikge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5yb3RhdGUocm90YXRpb24pO1xuICB9XG5cbiAgcHVibGljIHByaW50RmlsZSgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMucHJpbnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZEZpbGUoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLmRvd25sb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgem9vbSh6b29tRmFjdG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuem9vbSgrem9vbUZhY3Rvcik7XG4gIH1cblxuICBwdWJsaWMgc3RlcFpvb20oem9vbUZhY3RvcjogbnVtYmVyKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnN0ZXBab29tKHpvb21GYWN0b3IpO1xuICAgIHRoaXMuem9vbVNlbGVjdC5uYXRpdmVFbGVtZW50LnNlbGVjdGVkID0gJ3NlbGVjdGVkJztcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tZW50c1BhbmVsKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVDb21tZW50c1BhbmVsKCF0aGlzLnRvb2xiYXJFdmVudHMuY29tbWVudHNQYW5lbFZpc2libGUuZ2V0VmFsdWUoKSk7XG4gICAgdGhpcy5pc0NvbW1lbnRzT3BlbiA9ICF0aGlzLmlzQ29tbWVudHNPcGVuO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVJlZGFjdEJhcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlUmVkYWN0aW9uTW9kZSgpO1xuICAgIHRoaXMuaXNSZWRhY3RPcGVuID0gIXRoaXMuaXNSZWRhY3RPcGVuO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUdyYWJORHJhZygpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlR3JhYk5EcmFnKCk7XG4gIH1cblxuICBwdWJsaWMgaXNQZGYoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFR5cGUgPT09ICdwZGYnO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlYXJjaEJhcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoQmFySGlkZGVuLm5leHQoIXRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2hCYXJIaWRkZW4uZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlTW9yZU9wdGlvbnMoKSB7XG4gICAgdGhpcy5pc0Ryb3Bkb3duTWVudU9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duTWVudU9wZW47XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tdk1lbnVJdGVtcykge1xuICAgICAgICB0aGlzLm12TWVudUl0ZW1zLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidG9vbGJhclwiPlxuICA8ZGl2IGlkPVwidG9vbGJhckNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtdi10b29sYmFyX19jb250YWluZXJcIj5cbiAgICAgIDxkaXYgI212VG9vbGJhciBjbGFzcz1cIm12LXRvb2xiYXJcIiBbY2xhc3Mubm90U3VwcG9ydGVkXT1cIiFjb250ZW50VHlwZVwiPlxuICAgICAgICA8IS0tIFRoZSBtdlRvb2xiYXJNYWluIGRpdiBjb250YWlucyBhbGwgdG9vbGJhciBidXR0b25zIGV4Y2VwdCB0aGUgXCJNb3JlIG9wdGlvbnNcIiBidXR0b24uIFRoaXMgYWxsb3dzIGZvciBjYWxjdWxhdGlvbiBvZiB0aGUgYXZhaWxhYmxlIHNwYWNlIHRvIGRpc3BsYXkgYnV0dG9ucyAtLT5cbiAgICAgICAgPGRpdiBpZD1cIm12VG9vbGJhck1haW5cIiBjbGFzcz1cIm12LXRvb2xiYXItbWFpblwiICNtdlRvb2xiYXJNYWluPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gVGhlIG12VG9vbGJhck1vcmVPcHRpb25zIGRpdiBjb250YWlucyB0aGUgXCJNb3JlIG9wdGlvbnNcIiB0b29sYmFyIGJ1dHRvbiAoYW5kIHRoZSBvdmVybGF5IHRlbXBsYXRlIGZvciB0aGUgZHJvcGRvd24gbWVudSkuXG4gICAgICAgICAgICBUaGUgc3BhY2Ugb2NjdXBpZWQgYnkgdGhlIGJ1dHRvbiAoaWYgdmlzaWJsZSkgaXMgZXhjbHVkZWQgZnJvbSB0aGUgdG9vbGJhciBzcGFjZSBhdmFpbGFibGUgY2FsY3VsYXRpb24gLS0+XG4gICAgICAgIDxkaXYgaWQ9XCJtdlRvb2xiYXJNb3JlT3B0aW9uc1wiIGNsYXNzPVwibXYtdG9vbGJhci1tb3JlLW9wdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cIm12TW9yZU9wdGlvbnNCdG5cIlxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLW1vcmUtb3B0aW9uc1wiXG4gICAgICAgICAgICBbY2xhc3MubXYtdG9vbGJhcl9fbWVudS1idXR0b24tLW1vcmUtb3B0aW9uc19faGlkZGVuXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXIub2Zmc2V0V2lkdGggPj0gYWxsQnV0dG9uc1dpZHRoXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0Ryb3Bkb3duTWVudU9wZW5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1vcmVPcHRpb25zKClcIlxuICAgICAgICAgICAgY2RrT3ZlcmxheU9yaWdpblxuICAgICAgICAgICAgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57eyBcIk1vcmUgb3B0aW9uc1wiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwhLS0gVGhpcyB0ZW1wbGF0ZSBkaXNwbGF5cyB0aGUgb3ZlcmxheSBjb250ZW50IGZvciB0aGUgZHJvcGRvd24gbWVudSBhbmQgaXMgY29ubmVjdGVkIHRvIHRoZSBcIk1vcmUgb3B0aW9uc1wiIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIlxuICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cImlzRHJvcGRvd25NZW51T3BlblwiXG4gICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJkcm9wZG93bk1lbnVQb3NpdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgI2Ryb3Bkb3duTWVudSB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVJdGVtc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBpZD1cIm12TWVudUl0ZW1zXCIgI212TWVudUl0ZW1zPlxuICAgICAgICA8bmctdGVtcGxhdGUgI21lbnVJdGVtcz5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dTaWRlYmFyXCJcbiAgICAgICAgICAgIGlkPVwibXZJbmRleEJ0blwiXG4gICAgICAgICAgICB0aXRsZT1cIkluZGV4XCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cImluZGV4XCJcbiAgICAgICAgICAgICNtdkluZGV4QnRuXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0taW5kZXhcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA8IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212SW5kZXhCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLWRyb3Bkb3duXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoID49IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212SW5kZXhCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNJbmRleE9wZW5cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUluZGV4U2lkZUJhcigpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJJbmRleFwiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93U2lkZWJhclwiXG4gICAgICAgICAgICBpZD1cIm12Qm9va21hcmtzQnRuXCJcbiAgICAgICAgICAgIHRpdGxlPVwiQm9va21hcmtzXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cImJvb2ttYXJrc1wiXG4gICAgICAgICAgICAjbXZCb29rbWFya3NCdG5cbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ212LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tYm9va21hcmtzJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ2J1dHRvbi1oaWRkZW4tb24tdG9vbGJhcic6XG4gICAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA8XG4gICAgICAgICAgICAgICAgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZCb29rbWFya3NCdG4nXSxcbiAgICAgICAgICAgICAgJ2J1dHRvbi1oaWRkZW4tb24tZHJvcGRvd24nOlxuICAgICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj1cbiAgICAgICAgICAgICAgICB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkJvb2ttYXJrc0J0biddXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNCb29rbWFya3NPcGVuXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVCb29rbWFya3NTaWRlQmFyKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57eyBcIkJvb2ttYXJrc1wiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93RHJhd0J1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3Rpb25FbmFibGVkXCJcbiAgICAgICAgICAgIGlkPVwibXZEcmF3QnRuXCJcbiAgICAgICAgICAgICNtdkRyYXdCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1kcmF3XCJcbiAgICAgICAgICAgIHRpdGxlPVwiRHJhdyBhIGJveFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZEcmF3QnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkRyYXdCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy50b2dnbGVkXT1cInRvb2xiYXJFdmVudHMuZHJhd01vZGVTdWJqZWN0IHwgYXN5bmNcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwidG9nZ2xlRHJhd0J1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0RyYXdUb2dnbGUoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cImRyYXdfbGFiZWxcIj57e1xuICAgICAgICAgICAgICBcIkRyYXcgYSBib3hcIiB8IHJweFRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dIaWdobGlnaHRCdXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImljcEVuYWJsZWQgfHwgcmVkYWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBpZD1cIm12SGlnaGxpZ2h0QnRuXCJcbiAgICAgICAgICAgICNtdkhpZ2hsaWdodEJ0blxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLWhpZ2hsaWdodFwiXG4gICAgICAgICAgICB0aXRsZT1cIkhpZ2hsaWdodFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiSGlnaGxpZ2h0XCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLXRvb2xiYXJdPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkhpZ2hsaWdodEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZIaWdobGlnaHRCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy50b2dnbGVkXT1cInRvb2xiYXJFdmVudHMuaGlnaGxpZ2h0VG9vbGJhclN1YmplY3QgfCBhc3luY1wiXG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0hpZ2hsaWdodFRvZ2dsZSgpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJ0b2dnbGVIaWdobGlnaHRCdXR0b25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cImhpZ2hsaWdodF9sYWJlbFwiPnt7XG4gICAgICAgICAgICAgIFwiSGlnaGxpZ2h0XCIgfCBycHhUcmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dOYXZpZ2F0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPVwibXZQYWdlQnRuXCJcbiAgICAgICAgICAgICAgI212UGFnZUJ0blxuICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1wYWdlXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZQYWdlQnRuJ11cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlBhZ2VCdG4nXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBcIlBhZ2VcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJtdlVwQnRuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnZU51bWJlciA9PT0gMSB8fCByZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlByZXZpb3VzIFBhZ2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXVwIGJ1dHRvbi1pbWFnZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwicHJldmlvdXNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWNyZWFzZVBhZ2VOdW1iZXIoKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwibXZEb3duQnRuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnZU51bWJlciA9PT0gcGFnZUNvdW50IHx8IHJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiTmV4dCBQYWdlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1kb3duIGJ1dHRvbi1pbWFnZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwibmV4dFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImluY3JlYXNlUGFnZU51bWJlcigpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgaWQ9XCJwYWdlTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhtY3RzLXRvb2xiYXItaW5wdXQgZ292dWstaW5wdXQtLXdpZHRoLTJcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiUGFnZSBOdW1iZXJcIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwiMVwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cIjRcIlxuICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwYWdlTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwicGFnZSBudW1iZXJcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwicGFnZVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBhZ2VOdW1iZXJJbnB1dENoYW5nZShwYWdlTnVtYmVySW5wdXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgI3BhZ2VOdW1iZXJJbnB1dFxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3BhbiBpZD1cIm51bVBhZ2VzXCIgY2xhc3M9XCJ0b29sYmFyTGFiZWxcIj4vIHt7IHBhZ2VDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dab29tXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPVwibXZab29tQnRuXCJcbiAgICAgICAgICAgICAgI212Wm9vbUJ0blxuICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS16b29tXCJcbiAgICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlpvb21CdG4nXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoID49IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212Wm9vbUJ0biddXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICB0b29sYmFyRXZlbnRzLnpvb21WYWx1ZVN1YmplY3QudmFsdWUgPT09IDAuMSB8fFxuICAgICAgICAgICAgICAgICAgcmVkYWN0QWxsSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJtdk1pbnVzQnRuXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS16b29tLW91dCBidXR0b24taW1hZ2VcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiWm9vbSBPdXRcIlxuICAgICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInpvb21fb3V0XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RlcFpvb20oLTAuMSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tem9vbS1vdXQtdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgICBcIlpvb20gT3V0XCIgfCBycHhUcmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICBpZD1cInNjYWxlU2VsZWN0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhtY3RzLXRvb2xiYXItc2VsZWN0XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlpvb21cIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiem9vbVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ6b29tKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiem9vbVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgI3pvb21TZWxlY3RcbiAgICAgICAgICAgICAgICAgIGlkPVwiY3VzdG9tU2NhbGVPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRvb2xiYXJFdmVudHMuem9vbVZhbHVlU3ViamVjdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgdG9vbGJhckV2ZW50cy56b29tVmFsdWVTdWJqZWN0LnZhbHVlICogMTAwXG4gICAgICAgICAgICAgICAgICAgICAgfCBudW1iZXIgOiBcIjEuMC0wXCJcbiAgICAgICAgICAgICAgICAgIH19JVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB6b29tU2NhbGUgb2Ygem9vbVNjYWxlc1wiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiem9vbVNjYWxlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtbDEwbi1pZF09XCIncGFnZV9zY2FsZV9wZXJjZW50XycgKyB6b29tU2NhbGUgKiAxMDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHpvb21TY2FsZSAqIDEwMCB9fSVcbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgIHRvb2xiYXJFdmVudHMuem9vbVZhbHVlU3ViamVjdC52YWx1ZSA9PT0gNSB8fFxuICAgICAgICAgICAgICAgICAgcmVkYWN0QWxsSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJtdlBsdXNCdG5cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXpvb20taW4gYnV0dG9uLWltYWdlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RlcFpvb20oMC4xKVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJab29tIEluXCJcbiAgICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJ6b29tX2luXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXpvb20tb3V0LXRleHRcIj57e1xuICAgICAgICAgICAgICAgICAgXCJab29tIEluXCIgfCBycHhUcmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1JvdGF0ZVwiXG4gICAgICAgICAgICBpZD1cIm12Um90YXRlQnRuXCJcbiAgICAgICAgICAgICNtdlJvdGF0ZUJ0blxuICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tcm90YXRlXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLXRvb2xiYXJdPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlJvdGF0ZUJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZSb3RhdGVCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwibXZSb3RhdGVMZWZ0QnRuXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tcm90YXRlX2xlZnQgYnV0dG9uLWltYWdlXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJSb3RhdGUgQ291bnRlcmNsb2Nrd2lzZVwiXG4gICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInBhZ2Vfcm90YXRlX2Njd1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGUoMjcwKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwibXZSb3RhdGVSaWdodEJ0blwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXJvdGF0ZV9yaWdodCBidXR0b24taW1hZ2VcIlxuICAgICAgICAgICAgICB0aXRsZT1cIlJvdGF0ZSBDbG9ja3dpc2VcIlxuICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJwYWdlX3JvdGF0ZV9jd1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGUoOTApXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IFwiUm90YXRlXCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dTZWFyY2hCYXJcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImljcEVuYWJsZWQgfHwgcmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICBpZD1cIm12U2VhcmNoQnRuXCJcbiAgICAgICAgICAgICNtdlNlYXJjaEJ0blxuICAgICAgICAgICAgdGl0bGU9XCJTZWFyY2hcIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwic2VhcmNoYmFyXCJcbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1zZWFyY2hcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA8IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212U2VhcmNoQnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlNlYXJjaEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlYXJjaEJhcigpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJTZWFyY2hcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8bXYtc2VhcmNoLWJhclxuICAgICAgICAgICAgKm5nSWY9XCIhdG9vbGJhckV2ZW50cy5zZWFyY2hCYXJIaWRkZW4uZ2V0VmFsdWUoKVwiXG4gICAgICAgICAgPjwvbXYtc2VhcmNoLWJhcj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlSUNQICYmIHRvb2xiYXJCdXR0b25zLnNob3dQcmVzZW50YXRpb25Nb2RlICYmIGlzUGRmKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImljcEVuYWJsZWQgfHwgIWNvbnRlbnRUeXBlIHx8IHJlZGFjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgaWQ9XCJtdlByZXNlbnRCdG5cIlxuICAgICAgICAgICAgI212UHJlc2VudEJ0blxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXByZXNlbnRcIlxuICAgICAgICAgICAgdGl0bGU9XCJJbi1Db3VydCBQcmVzZW50YXRpb24gTW9kZVwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJpY3BNb2RlX2xhYmVsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9uVG9vbEJhck9mZlNldENoYW5nZSgnbXZQcmVzZW50QnRuJylcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVByZXNlbnRCYXIoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cImljcE1vZGVfbGFiZWxcIj57e1xuICAgICAgICAgICAgICBcIlByZXNlbnRcIiB8IHJweFRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZVJlZGFjdGlvbnMgJiYgdG9vbGJhckJ1dHRvbnMuc2hvd1JlZGFjdFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgIGlkPVwibXZSZWRhY3RCdG5cIlxuICAgICAgICAgICAgI212UmVkYWN0QnRuXG4gICAgICAgICAgICB0aXRsZT1cIlJlZGFjdFwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJyZWRhY3RcIlxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXJlZGFjdFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJvblRvb2xCYXJPZmZTZXRDaGFuZ2UoJ212UmVkYWN0QnRuJylcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc1JlZGFjdE9wZW5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJlZGFjdEJhcigpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJSZWRhY3RcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd0dyYWJORHJhZ0J1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgIGlkPVwibXZHcmFiQnRuXCJcbiAgICAgICAgICAgICNtdkdyYWJCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1ncmFiXCJcbiAgICAgICAgICAgIHRpdGxlPVwiR3JhYiBhbmQgZHJhZ1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJvblRvb2xCYXJPZmZTZXRDaGFuZ2UoJ212R3JhYkJ0bicpXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVHcmFiTkRyYWcoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7IFwiR3JhYiBhbmQgZHJhZ1wiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93RG93bmxvYWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImljcEVuYWJsZWQgfHwgcmVkYWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBpZD1cIm12RG93bmxvYWRCdG5cIlxuICAgICAgICAgICAgI212RG93bmxvYWRCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1kb3dubG9hZFwiXG4gICAgICAgICAgICB0aXRsZT1cIkRvd25sb2FkXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cImRvd25sb2FkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9uVG9vbEJhck9mZlNldENoYW5nZSgnbXZEb3dubG9hZEJ0bicpXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEZpbGUoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7IFwiRG93bmxvYWRcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1ByaW50XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpY3BFbmFibGVkIHx8IHJlZGFjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgaWQ9XCJtdlByaW50QnRuXCJcbiAgICAgICAgICAgICNtdlByaW50QnRuXG4gICAgICAgICAgICB0aXRsZT1cIlByaW50XCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInByaW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1wcmludFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJvblRvb2xCYXJPZmZTZXRDaGFuZ2UoJ212UHJpbnRCdG4nKVwiXG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwicHJpbnRGaWxlKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57eyBcIlByaW50XCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZUFubm90YXRpb25zICYmIHRvb2xiYXJCdXR0b25zLnNob3dDb21tZW50U3VtbWFyeVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBpZD1cIm12Q29tbWVudHNCdG5cIlxuICAgICAgICAgICAgI212Q29tbWVudHNCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1jb21tZW50c1wiXG4gICAgICAgICAgICB0aXRsZT1cIkNvbW1lbnRzXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cImNvbW1lbnRzXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9uVG9vbEJhck9mZlNldENoYW5nZSgnbXZDb21tZW50c0J0bicpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNDb21tZW50c09wZW5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbW1lbnRzUGFuZWwoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7IFwiQ29tbWVudHNcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBpZD1cImxvYWRpbmdCYXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2xpbW1lclwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3Rvb2xiYXIvbWFpbi10b29sYmFyL21haW4tdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL21haW4tdG9vbGJhci9tYWluLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQU12QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7Ozs7Ozs7QUFNdEYsTUFBTSxPQUFPLG9CQUFvQjtJQTRDL0IsWUFDa0IsYUFBa0MsRUFDbEMsY0FBOEMsRUFDN0MsR0FBc0IsRUFDdEIsWUFBaUMsRUFDakMsZUFBZ0M7UUFKakMsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQztRQUM3QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBL0MxQyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFNWCxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFFN0MsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFJekIsZUFBVSxHQUFH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MUIsY0FBYztzQkFGcEIsWUFBWTt1QkFBQyw0QkFBNEIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3JELFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0aW9uUG9zaXRpb25QYWlyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVG9vbGJhckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sYmFyQnV0dG9uVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi90b29sYmFyLWJ1dHRvbi12aXNpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTnVtYmVySGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2xpYi9zaGFyZWQvdXRpbC9zZXJ2aWNlcy9udW1iZXIuaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWNwRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vaWNwLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgSHRtbFRlbXBsYXRlc0hlbHBlciB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlsL2hlbHBlcnMvaHRtbC10ZW1wbGF0ZXMuaGVscGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtbWFpbi10b29sYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tdG9vbGJhci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgTWFpblRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgZW5hYmxlQW5ub3RhdGlvbnMgPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlUmVkYWN0aW9ucyA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVJQ1AgPSBmYWxzZTtcbiAgQElucHV0KCkgY29udGVudFR5cGUgPSBudWxsO1xuXG4gIEBWaWV3Q2hpbGQoJ3pvb21TZWxlY3QnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIHpvb21TZWxlY3Q6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ212VG9vbGJhck1haW4nLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIG12VG9vbGJhck1haW46IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdkcm9wZG93bk1lbnUnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIG12TWVudUl0ZW1zOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgcHVibGljIGljcEVuYWJsZWQgPSBmYWxzZTtcbiAgcHVibGljIHJlZGFjdGlvbkVuYWJsZWQgPSBmYWxzZTtcbiAgcHVibGljIHNob3dDb21tZW50c1BhbmVsOiBib29sZWFuO1xuICBwdWJsaWMgcmVkYWN0QWxsSW5Qcm9ncmVzczogYm9vbGVhbjtcblxuICBwdWJsaWMgcGFnZU51bWJlciA9IDE7XG4gIHB1YmxpYyBwYWdlQ291bnQgPSAwO1xuICBwdWJsaWMgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBpc0Jvb2ttYXJrc09wZW4gPSBmYWxzZTtcbiAgcHVibGljIGlzSW5kZXhPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBpc1JlZGFjdE9wZW4gPSBmYWxzZTtcbiAgcHVibGljIGlzQ29tbWVudHNPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBkcm9wZG93bk1lbnVQb3NpdGlvbnMgPSBbXG4gICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgIH0sXG4gICAgICAwLFxuICAgICAgMylcbiAgXTtcblxuICBwdWJsaWMgem9vbVNjYWxlcyA9IFswLjEsIDAuMjUsIDAuNSwgMC43NSwgMSwgMS4yNSwgMS41LCAyLjUsIDMsIDVdO1xuXG4gIGFsbEJ1dHRvbnNXaWR0aCA9IDA7XG4gIHdpZHRoUmVxdWlyZWRGb3JCdG46IHsgW2lkOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckV2ZW50czogVG9vbGJhckV2ZW50U2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckJ1dHRvbnM6IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBudW1iZXJIZWxwZXI6IE51bWJlckhlbHBlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY3BFdmVudFNlcnZpY2U6IEljcEV2ZW50U2VydmljZVxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZXRDdXJyZW50UGFnZVN1YmplY3Quc3Vic2NyaWJlKHBhZ2VOdW1iZXIgPT4gdGhpcy5zZXRDdXJyZW50UGFnZShwYWdlTnVtYmVyKSksXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2V0Q3VycmVudFBhZ2VJbnB1dFZhbHVlU3ViamVjdC5zdWJzY3JpYmUocGFnZU51bWJlciA9PiB0aGlzLnBhZ2VOdW1iZXIgPSBwYWdlTnVtYmVyKSxcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5nZXRQYWdlQ291bnQoKS5zdWJzY3JpYmUoY291bnQgPT4gdGhpcy5wYWdlQ291bnQgPSBjb3VudCksXG4gICAgICB0aGlzLmljcEV2ZW50U2VydmljZS5lbmFibGVkLnN1YnNjcmliZShlbmFibGVkID0+IHtcbiAgICAgICAgdGhpcy5pY3BFbmFibGVkID0gZW5hYmxlZDtcbiAgICAgICAgaWYgKHRoaXMuaWNwRW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVDb21tZW50c1BhbmVsKCFlbmFibGVkKTtcbiAgICAgICAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2lkZWJhck9wZW4ubmV4dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnJlZGFjdGlvbk1vZGUuc3Vic2NyaWJlKGVuYWJsZWQgPT4ge1xuICAgICAgICB0aGlzLnJlZGFjdGlvbkVuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgfSksXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMucmVkYWN0QWxsSW5Qcm9ncmVzc1N1YmplY3Quc3Vic2NyaWJlKGRpc2FibGUgPT4ge1xuICAgICAgICB0aGlzLnJlZGFjdEFsbEluUHJvZ3Jlc3MgPSBkaXNhYmxlO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgQXJyYXkuZnJvbSh0aGlzLm12VG9vbGJhck1haW4ubmF0aXZlRWxlbWVudC5jaGlsZHJlbikuZm9yRWFjaCgoYnV0dG9uOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgdGhpcy5hbGxCdXR0b25zV2lkdGggKz0gSHRtbFRlbXBsYXRlc0hlbHBlci5nZXRBZGp1c3RlZEJvdW5kaW5nUmVjdChidXR0b24pLndpZHRoO1xuICAgICAgdGhpcy53aWR0aFJlcXVpcmVkRm9yQnRuW2J1dHRvbi5pZF0gPSB0aGlzLmFsbEJ1dHRvbnNXaWR0aDtcbiAgICB9KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgW10pXG4gIHB1YmxpYyBvblJlc2l6ZSgpIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmNvbnRyb2wucCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24ubWV0YS5wJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uQ29udHJvbFByaW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnByaW50RmlsZSgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpY2tIaWdobGlnaHRUb2dnbGUoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZUhpZ2hsaWdodFRvb2xiYXIoKTtcbiAgfVxuICBwdWJsaWMgb25DbGlja0RyYXdUb2dnbGUoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZURyYXdNb2RlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlSW5kZXhTaWRlQmFyKCkge1xuICAgIGNvbnN0IHNpZGViYXJPcGVuID0gdGhpcy50b29sYmFyRXZlbnRzLnNpZGViYXJPcGVuLmdldFZhbHVlKCk7XG4gICAgY29uc3Qgc2lkZWJhclZpZXcgPSB0aGlzLnRvb2xiYXJFdmVudHMuc2lkZWJhck91dGxpbmVWaWV3LmdldFZhbHVlKCk7XG4gICAgaWYgKCEoc2lkZWJhck9wZW4gJiYgIXNpZGViYXJWaWV3KSkge1xuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZVNpZGVCYXIoIXNpZGViYXJPcGVuKTtcbiAgICB9XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZVNpZGVCYXJWaWV3KHRydWUpO1xuICAgIHRoaXMuaXNJbmRleE9wZW4gPSAhdGhpcy5pc0luZGV4T3BlbjtcbiAgfVxuXG4gIHB1YmxpYyBvblRvb2xCYXJPZmZTZXRDaGFuZ2UoYnV0dG9uSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm12VG9vbGJhck1haW4gJiYgdGhpcy5tdlRvb2xiYXJNYWluLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCB0aGlzLndpZHRoUmVxdWlyZWRGb3JCdG5bYnV0dG9uSWRdKSB7XG4gICAgICByZXR1cm4gXCJidXR0b24taGlkZGVuLW9uLXRvb2xiYXJcIjtcblxuICAgIH1cbiAgICByZXR1cm4gXCJidXR0b24taGlkZGVuLW9uLWRyb3Bkb3duXCI7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQm9va21hcmtzU2lkZUJhcigpIHtcbiAgICBjb25zdCBzaWRlYmFyT3BlbiA9IHRoaXMudG9vbGJhckV2ZW50cy5zaWRlYmFyT3Blbi5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHNpZGViYXJWaWV3ID0gdGhpcy50b29sYmFyRXZlbnRzLnNpZGViYXJPdXRsaW5lVmlldy5nZXRWYWx1ZSgpO1xuICAgIGlmICghKHNpZGViYXJPcGVuICYmIHNpZGViYXJWaWV3KSkge1xuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZVNpZGVCYXIoIXNpZGViYXJPcGVuKTtcbiAgICB9XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZVNpZGVCYXJWaWV3KGZhbHNlKTtcbiAgICB0aGlzLmlzQm9va21hcmtzT3BlbiA9ICF0aGlzLmlzQm9va21hcmtzT3BlbjtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVQcmVzZW50QmFyKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2hCYXJIaWRkZW4ubmV4dCh0cnVlKTtcbiAgICB0aGlzLmljcEV2ZW50U2VydmljZS5lbmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbmNyZWFzZVBhZ2VOdW1iZXIoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLmluY3JlbWVudFBhZ2UoMSk7XG4gIH1cblxuICBwdWJsaWMgZGVjcmVhc2VQYWdlTnVtYmVyKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5pbmNyZW1lbnRQYWdlKC0xKTtcbiAgfVxuXG4gIHB1YmxpYyBvblBhZ2VOdW1iZXJJbnB1dENoYW5nZShwYWdlTnVtYmVyOiBzdHJpbmcpIHtcbiAgICBpZiAoTnVtYmVyKHBhZ2VOdW1iZXIpIDwgMSkge1xuICAgICAgcGFnZU51bWJlciA9ICcxJztcbiAgICB9XG4gICAgaWYgKE51bWJlcihwYWdlTnVtYmVyKSA+IHRoaXMucGFnZUNvdW50KSB7XG4gICAgICBwYWdlTnVtYmVyID0gdGhpcy5wYWdlQ291bnQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2V0UGFnZShOdW1iZXIucGFyc2VJbnQocGFnZU51bWJlciwgMTApKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3VycmVudFBhZ2UocGFnZU51bWJlcjogbnVtYmVyKSB7XG4gICAgdGhpcy5wYWdlTnVtYmVyID0gcGFnZU51bWJlcjtcbiAgfVxuXG4gIHB1YmxpYyByb3RhdGUocm90YXRpb246IG51bWJlcikge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5yb3RhdGUocm90YXRpb24pO1xuICB9XG5cbiAgcHVibGljIHByaW50RmlsZSgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMucHJpbnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZEZpbGUoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLmRvd25sb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgem9vbSh6b29tRmFjdG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuem9vbSgrem9vbUZhY3Rvcik7XG4gIH1cblxuICBwdWJsaWMgc3RlcFpvb20oem9vbUZhY3RvcjogbnVtYmVyKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnN0ZXBab29tKHpvb21GYWN0b3IpO1xuICAgIHRoaXMuem9vbVNlbGVjdC5uYXRpdmVFbGVtZW50LnNlbGVjdGVkID0gJ3NlbGVjdGVkJztcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tZW50c1BhbmVsKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVDb21tZW50c1BhbmVsKCF0aGlzLnRvb2xiYXJFdmVudHMuY29tbWVudHNQYW5lbFZpc2libGUuZ2V0VmFsdWUoKSk7XG4gICAgdGhpcy5pc0NvbW1lbnRzT3BlbiA9ICF0aGlzLmlzQ29tbWVudHNPcGVuO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVJlZGFjdEJhcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlUmVkYWN0aW9uTW9kZSgpO1xuICAgIHRoaXMuaXNSZWRhY3RPcGVuID0gIXRoaXMuaXNSZWRhY3RPcGVuO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUdyYWJORHJhZygpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlR3JhYk5EcmFnKCk7XG4gIH1cblxuICBwdWJsaWMgaXNQZGYoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFR5cGUgPT09ICdwZGYnO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlYXJjaEJhcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoQmFySGlkZGVuLm5leHQoIXRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2hCYXJIaWRkZW4uZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlTW9yZU9wdGlvbnMoKSB7XG4gICAgdGhpcy5pc0Ryb3Bkb3duTWVudU9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duTWVudU9wZW47XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tdk1lbnVJdGVtcykge1xuICAgICAgICB0aGlzLm12TWVudUl0ZW1zLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidG9vbGJhclwiPlxuICA8ZGl2IGlkPVwidG9vbGJhckNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtdi10b29sYmFyX19jb250YWluZXJcIj5cbiAgICAgIDxkaXYgI212VG9vbGJhciBjbGFzcz1cIm12LXRvb2xiYXJcIiBbY2xhc3Mubm90U3VwcG9ydGVkXT1cIiFjb250ZW50VHlwZVwiPlxuICAgICAgICA8IS0tIFRoZSBtdlRvb2xiYXJNYWluIGRpdiBjb250YWlucyBhbGwgdG9vbGJhciBidXR0b25zIGV4Y2VwdCB0aGUgXCJNb3JlIG9wdGlvbnNcIiBidXR0b24uIFRoaXMgYWxsb3dzIGZvciBjYWxjdWxhdGlvbiBvZiB0aGUgYXZhaWxhYmxlIHNwYWNlIHRvIGRpc3BsYXkgYnV0dG9ucyAtLT5cbiAgICAgICAgPGRpdiBpZD1cIm12VG9vbGJhck1haW5cIiBjbGFzcz1cIm12LXRvb2xiYXItbWFpblwiICNtdlRvb2xiYXJNYWluPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gVGhlIG12VG9vbGJhck1vcmVPcHRpb25zIGRpdiBjb250YWlucyB0aGUgXCJNb3JlIG9wdGlvbnNcIiB0b29sYmFyIGJ1dHRvbiAoYW5kIHRoZSBvdmVybGF5IHRlbXBsYXRlIGZvciB0aGUgZHJvcGRvd24gbWVudSkuXG4gICAgICAgICAgICBUaGUgc3BhY2Ugb2NjdXBpZWQgYnkgdGhlIGJ1dHRvbiAoaWYgdmlzaWJsZSkgaXMgZXhjbHVkZWQgZnJvbSB0aGUgdG9vbGJhciBzcGFjZSBhdmFpbGFibGUgY2FsY3VsYXRpb24gLS0+XG4gICAgICAgIDxkaXYgaWQ9XCJtdlRvb2xiYXJNb3JlT3B0aW9uc1wiIGNsYXNzPVwibXYtdG9vbGJhci1tb3JlLW9wdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cIm12TW9yZU9wdGlvbnNCdG5cIlxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLW1vcmUtb3B0aW9ucyB0b29sdGlwXCJcbiAgICAgICAgICAgIFtjbGFzcy5tdi10b29sYmFyX19tZW51LWJ1dHRvbi0tbW9yZS1vcHRpb25zX19oaWRkZW5dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhci5vZmZzZXRXaWR0aCA+PSBhbGxCdXR0b25zV2lkdGhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRHJvcGRvd25NZW51T3BlblwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ01vcmUgb3B0aW9ucycgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1vcmVPcHRpb25zKClcIlxuICAgICAgICAgICAgY2RrT3ZlcmxheU9yaWdpblxuICAgICAgICAgICAgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57eyBcIk1vcmUgb3B0aW9uc1wiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwhLS0gVGhpcyB0ZW1wbGF0ZSBkaXNwbGF5cyB0aGUgb3ZlcmxheSBjb250ZW50IGZvciB0aGUgZHJvcGRvd24gbWVudSBhbmQgaXMgY29ubmVjdGVkIHRvIHRoZSBcIk1vcmUgb3B0aW9uc1wiIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIlxuICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cImlzRHJvcGRvd25NZW51T3BlblwiXG4gICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJkcm9wZG93bk1lbnVQb3NpdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgI2Ryb3Bkb3duTWVudSB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVJdGVtc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJtdk1lbnVJdGVtc1wiICNtdk1lbnVJdGVtcz5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNtZW51SXRlbXM+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93U2lkZWJhclwiXG4gICAgICAgICAgICBpZD1cIm12SW5kZXhCdG5cIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiaW5kZXhcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidJbmRleCcgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgI212SW5kZXhCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1pbmRleCB0b29sdGlwXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLXRvb2xiYXJdPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkluZGV4QnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkluZGV4QnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzSW5kZXhPcGVuXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJbmRleFNpZGVCYXIoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7IFwiSW5kZXhcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1NpZGViYXJcIlxuICAgICAgICAgICAgaWQ9XCJtdkJvb2ttYXJrc0J0blwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJib29rbWFya3NcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidCb29rbWFya3MnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgICNtdkJvb2ttYXJrc0J0blxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnbXYtYnV0dG9uIHRvb2x0aXAgbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLWJvb2ttYXJrcyc6IHRydWUsXG4gICAgICAgICAgICAgICdidXR0b24taGlkZGVuLW9uLXRvb2xiYXInOlxuICAgICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPFxuICAgICAgICAgICAgICAgIHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212Qm9va21hcmtzQnRuJ10sXG4gICAgICAgICAgICAgICdidXR0b24taGlkZGVuLW9uLWRyb3Bkb3duJzpcbiAgICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoID49XG4gICAgICAgICAgICAgICAgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZCb29rbWFya3NCdG4nXVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzQm9va21hcmtzT3BlblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQm9va21hcmtzU2lkZUJhcigpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJCb29rbWFya3NcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd0RyYXdCdXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImljcEVuYWJsZWQgfHwgcmVkYWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBpZD1cIm12RHJhd0J0blwiXG4gICAgICAgICAgICAjbXZEcmF3QnRuXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tZHJhdyB0b29sdGlwXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInRHJhdyBhIGJveCcgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA8IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212RHJhd0J0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZEcmF3QnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MudG9nZ2xlZF09XCJ0b29sYmFyRXZlbnRzLmRyYXdNb2RlU3ViamVjdCB8IGFzeW5jXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInRvZ2dsZURyYXdCdXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tEcmF3VG9nZ2xlKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJkcmF3X2xhYmVsXCI+e3tcbiAgICAgICAgICAgICAgXCJEcmF3IGEgYm94XCIgfCBycHhUcmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93SGlnaGxpZ2h0QnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpY3BFbmFibGVkIHx8IHJlZGFjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgaWQ9XCJtdkhpZ2hsaWdodEJ0blwiXG4gICAgICAgICAgICAjbXZIaWdobGlnaHRCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1oaWdobGlnaHQgdG9vbHRpcFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0hpZ2hsaWdodCcgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA8IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212SGlnaGxpZ2h0QnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkhpZ2hsaWdodEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnRvZ2dsZWRdPVwidG9vbGJhckV2ZW50cy5oaWdobGlnaHRUb29sYmFyU3ViamVjdCB8IGFzeW5jXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrSGlnaGxpZ2h0VG9nZ2xlKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInRvZ2dsZUhpZ2hsaWdodEJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gZGF0YS1sMTBuLWlkPVwiaGlnaGxpZ2h0X2xhYmVsXCI+e3tcbiAgICAgICAgICAgICAgXCJIaWdobGlnaHRcIiB8IHJweFRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd05hdmlnYXRpb25cIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgaWQ9XCJtdlBhZ2VCdG5cIlxuICAgICAgICAgICAgICAjbXZQYWdlQnRuXG4gICAgICAgICAgICAgIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXBhZ2VcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ1BhZ2UnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZQYWdlQnRuJ11cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlBhZ2VCdG4nXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBcIlBhZ2VcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJtdlVwQnRuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnZU51bWJlciA9PT0gMSB8fCByZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ1ByZXZpb3VzIHBhZ2UnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS11cCBidXR0b24taW1hZ2UgdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwicHJldmlvdXNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWNyZWFzZVBhZ2VOdW1iZXIoKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwibXZEb3duQnRuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnZU51bWJlciA9PT0gcGFnZUNvdW50IHx8IHJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInTmV4dCBwYWdlJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tZG93biBidXR0b24taW1hZ2UgdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwibmV4dFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImluY3JlYXNlUGFnZU51bWJlcigpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgaWQ9XCJwYWdlTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhtY3RzLXRvb2xiYXItaW5wdXQgZ292dWstaW5wdXQtLXdpZHRoLTIgdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidQYWdlIG51bWJlcicgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1BhZ2UgbnVtYmVyJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCIxXCJcbiAgICAgICAgICAgICAgICBzaXplPVwiNFwiXG4gICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBhZ2VOdW1iZXJcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwicGFnZVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBhZ2VOdW1iZXJJbnB1dENoYW5nZShwYWdlTnVtYmVySW5wdXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgI3BhZ2VOdW1iZXJJbnB1dFxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3BhbiBpZD1cIm51bVBhZ2VzXCIgY2xhc3M9XCJ0b29sYmFyTGFiZWxcIj4vIHt7IHBhZ2VDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dab29tXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPVwibXZab29tQnRuXCJcbiAgICAgICAgICAgICAgI212Wm9vbUJ0blxuICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS16b29tXCJcbiAgICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlpvb21CdG4nXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoID49IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212Wm9vbUJ0biddXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICB0b29sYmFyRXZlbnRzLnpvb21WYWx1ZVN1YmplY3QudmFsdWUgPT09IDAuMSB8fFxuICAgICAgICAgICAgICAgICAgcmVkYWN0QWxsSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJtdk1pbnVzQnRuXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS16b29tLW91dCBidXR0b24taW1hZ2UgdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidab29tIG91dCcgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInpvb21fb3V0XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RlcFpvb20oLTAuMSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tem9vbS1vdXQtdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgICBcIlpvb20gT3V0XCIgfCBycHhUcmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICBpZD1cInNjYWxlU2VsZWN0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhtY3RzLXRvb2xiYXItc2VsZWN0XCJcbiAgICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJ6b29tXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInpvb20oJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJ6b29tXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInWm9vbScgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICN6b29tU2VsZWN0XG4gICAgICAgICAgICAgICAgICBpZD1cImN1c3RvbVNjYWxlT3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0b29sYmFyRXZlbnRzLnpvb21WYWx1ZVN1YmplY3QudmFsdWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHRvb2xiYXJFdmVudHMuem9vbVZhbHVlU3ViamVjdC52YWx1ZSAqIDEwMFxuICAgICAgICAgICAgICAgICAgICAgIHwgbnVtYmVyIDogXCIxLjAtMFwiXG4gICAgICAgICAgICAgICAgICB9fSVcbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgem9vbVNjYWxlIG9mIHpvb21TY2FsZXNcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInpvb21TY2FsZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWwxMG4taWRdPVwiJ3BhZ2Vfc2NhbGVfcGVyY2VudF8nICsgem9vbVNjYWxlICogMTAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyB6b29tU2NhbGUgKiAxMDAgfX0lXG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgdG9vbGJhckV2ZW50cy56b29tVmFsdWVTdWJqZWN0LnZhbHVlID09PSA1IHx8XG4gICAgICAgICAgICAgICAgICByZWRhY3RBbGxJblByb2dyZXNzXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBpZD1cIm12UGx1c0J0blwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tem9vbS1pbiBidXR0b24taW1hZ2UgdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0ZXBab29tKDAuMSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInWm9vbSBpbicgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInpvb21faW5cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tem9vbS1vdXQtdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgICBcIlpvb20gSW5cIiB8IHJweFRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93Um90YXRlXCJcbiAgICAgICAgICAgIGlkPVwibXZSb3RhdGVCdG5cIlxuICAgICAgICAgICAgI212Um90YXRlQnRuXG4gICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1yb3RhdGVcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA8IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212Um90YXRlQnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlJvdGF0ZUJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJtdlJvdGF0ZUxlZnRCdG5cIlxuICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1yb3RhdGVfbGVmdCBidXR0b24taW1hZ2UgdG9vbHRpcFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSb3RhdGVcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ1JvdGF0ZSBjb3VudGVyY2xvY2t3aXNlJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInBhZ2Vfcm90YXRlX2Njd1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGUoMjcwKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwibXZSb3RhdGVSaWdodEJ0blwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXJvdGF0ZV9yaWdodCBidXR0b24taW1hZ2UgdG9vbHRpcFwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInUm90YXRlIGNsb2Nrd2lzZScgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJwYWdlX3JvdGF0ZV9jd1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGUoOTApXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IFwiUm90YXRlXCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dTZWFyY2hCYXJcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImljcEVuYWJsZWQgfHwgcmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICBpZD1cIm12U2VhcmNoQnRuXCJcbiAgICAgICAgICAgICNtdlNlYXJjaEJ0blxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidTZWFyY2gnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInNlYXJjaGJhclwiXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tc2VhcmNoIHRvb2x0aXBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA8IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212U2VhcmNoQnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlNlYXJjaEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlYXJjaEJhcigpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJTZWFyY2hcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8bXYtc2VhcmNoLWJhclxuICAgICAgICAgICAgKm5nSWY9XCIhdG9vbGJhckV2ZW50cy5zZWFyY2hCYXJIaWRkZW4uZ2V0VmFsdWUoKVwiXG4gICAgICAgICAgPjwvbXYtc2VhcmNoLWJhcj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlSUNQICYmIHRvb2xiYXJCdXR0b25zLnNob3dQcmVzZW50YXRpb25Nb2RlICYmIGlzUGRmKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImljcEVuYWJsZWQgfHwgIWNvbnRlbnRUeXBlIHx8IHJlZGFjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgaWQ9XCJtdlByZXNlbnRCdG5cIlxuICAgICAgICAgICAgI212UHJlc2VudEJ0blxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXByZXNlbnQgdG9vbHRpcFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0luLUNvdXJ0IHByZXNlbnRhdGlvbiBtb2RlJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJpY3BNb2RlX2xhYmVsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9uVG9vbEJhck9mZlNldENoYW5nZSgnbXZQcmVzZW50QnRuJylcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVByZXNlbnRCYXIoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cImljcE1vZGVfbGFiZWxcIj57e1xuICAgICAgICAgICAgICBcIlByZXNlbnRcIiB8IHJweFRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZVJlZGFjdGlvbnMgJiYgdG9vbGJhckJ1dHRvbnMuc2hvd1JlZGFjdFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgIGlkPVwibXZSZWRhY3RCdG5cIlxuICAgICAgICAgICAgI212UmVkYWN0QnRuXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ1JlZGFjdCcgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwicmVkYWN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1yZWRhY3QgdG9vbHRpcFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJvblRvb2xCYXJPZmZTZXRDaGFuZ2UoJ212UmVkYWN0QnRuJylcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc1JlZGFjdE9wZW5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJlZGFjdEJhcigpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJSZWRhY3RcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd0dyYWJORHJhZ0J1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgIGlkPVwibXZHcmFiQnRuXCJcbiAgICAgICAgICAgICNtdkdyYWJCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1ncmFiIHRvb2x0aXBcIlxuICAgICAgICAgICAgZGF0YS10b29sdGlwPVwiR3JhYiBhbmQgZHJhZ1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJvblRvb2xCYXJPZmZTZXRDaGFuZ2UoJ212R3JhYkJ0bicpXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVHcmFiTkRyYWcoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7IFwiR3JhYiBhbmQgZHJhZ1wiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93RG93bmxvYWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImljcEVuYWJsZWQgfHwgcmVkYWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBpZD1cIm12RG93bmxvYWRCdG5cIlxuICAgICAgICAgICAgI212RG93bmxvYWRCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1kb3dubG9hZCB0b29sdGlwXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInRG93bmxvYWQnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cImRvd25sb2FkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9uVG9vbEJhck9mZlNldENoYW5nZSgnbXZEb3dubG9hZEJ0bicpXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEZpbGUoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7IFwiRG93bmxvYWRcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1ByaW50XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpY3BFbmFibGVkIHx8IHJlZGFjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgaWQ9XCJtdlByaW50QnRuXCJcbiAgICAgICAgICAgICNtdlByaW50QnRuXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJwcmludFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHJpbnRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidQcmludCcgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwicHJpbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXByaW50IHRvb2x0aXBcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwib25Ub29sQmFyT2ZmU2V0Q2hhbmdlKCdtdlByaW50QnRuJylcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInByaW50RmlsZSgpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgXCJQcmludFwiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVBbm5vdGF0aW9ucyAmJiB0b29sYmFyQnV0dG9ucy5zaG93Q29tbWVudFN1bW1hcnlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgaWQ9XCJtdkNvbW1lbnRzQnRuXCJcbiAgICAgICAgICAgICNtdkNvbW1lbnRzQnRuXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tY29tbWVudHMgdG9vbHRpcFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0NvbW1lbnRzJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJjb21tZW50c1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJvblRvb2xCYXJPZmZTZXRDaGFuZ2UoJ212Q29tbWVudHNCdG4nKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzQ29tbWVudHNPcGVuXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21tZW50c1BhbmVsKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57eyBcIkNvbW1lbnRzXCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJsb2FkaW5nQmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdsaW1tZXJcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19