@skyux/text-editor 10.7.0 → 10.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/documentation.json +496 -357
- package/esm2022/lib/modules/rich-text-display/rich-text-display.component.mjs +2 -1
- package/esm2022/lib/modules/text-editor/text-editor.component.mjs +26 -9
- package/esm2022/lib/modules/text-editor/toolbar/text-editor-toolbar.component.mjs +2 -2
- package/fesm2022/skyux-text-editor.mjs +28 -11
- package/fesm2022/skyux-text-editor.mjs.map +1 -1
- package/lib/modules/text-editor/text-editor.component.d.ts +11 -3
- package/package.json +12 -12
|
@@ -18,6 +18,7 @@ export class SkyRichTextDisplayComponent {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
else {
|
|
21
|
+
this.#_richText = '';
|
|
21
22
|
this.sanitizedText = '';
|
|
22
23
|
}
|
|
23
24
|
}
|
|
@@ -39,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
39
40
|
}], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2.SkyTextSanitizationService }], propDecorators: { richText: [{
|
|
40
41
|
type: Input
|
|
41
42
|
}] } });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LWRpc3BsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy9yaWNoLXRleHQtZGlzcGxheS9yaWNoLXRleHQtZGlzcGxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3JpY2gtdGV4dC1kaXNwbGF5L3JpY2gtdGV4dC1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBU2pELE1BQU0sT0FBTywyQkFBMkI7SUFDdEM7O09BRUc7SUFDSCxJQUNXLFFBQVEsQ0FBQyxLQUF5QjtRQUMzQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCwwQkFBMEI7WUFDMUIsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztnQkFFMUIsb0RBQW9EO2dCQUNwRCx3REFBd0Q7Z0JBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUlELFVBQVUsQ0FBTTtJQUVoQixVQUFVLENBQWU7SUFDekIsb0JBQW9CLENBQTZCO0lBRWpELFlBQ0UsU0FBdUIsRUFDdkIsbUJBQStDO1FBVDFDLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBRXBDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFTZCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDbEQsQ0FBQzs4R0FuQ1UsMkJBQTJCO2tHQUEzQiwyQkFBMkIsK0ZDVHhDLG9GQUNBOzsyRkRRYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsdUJBQXVCOzBIQVF0QixRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL3RleHQtZWRpdG9yL3NlcnZpY2VzL3RleHQtc2FuaXRpemF0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcmljaC10ZXh0LWRpc3BsYXknLFxuICB0ZW1wbGF0ZVVybDogJy4vcmljaC10ZXh0LWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lSaWNoVGV4dERpc3BsYXlDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIHJpY2ggdGV4dCB0byBkaXNwbGF5LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCByaWNoVGV4dCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBjbGVhbmVkID0gdGhpcy4jc2FuaXRpemF0aW9uU2VydmljZS5zYW5pdGl6ZSh2YWx1ZSk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGNsZWFuZWQgIT09IHRoaXMuI19yaWNoVGV4dCkge1xuICAgICAgICB0aGlzLiNfcmljaFRleHQgPSBjbGVhbmVkO1xuXG4gICAgICAgIC8vIFRleHQgaGFzIGFscmVhZHkgYmVlbiBzYW5pdGl6ZWQgd2l0aCBET01QdXJpZmllci5cbiAgICAgICAgLy8gVGVsbCBBbmd1bGFyIHRvIGJ5cGFzcyBpdHMgb3duIGludGVybmFsIHNhbml0aXphdGlvbi5cbiAgICAgICAgdGhpcy5zYW5pdGl6ZWRUZXh0ID0gdGhpcy4jc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGNsZWFuZWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNfcmljaFRleHQgPSAnJztcbiAgICAgIHRoaXMuc2FuaXRpemVkVGV4dCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGl6ZWRUZXh0OiBTYWZlSHRtbCA9ICcnO1xuXG4gICNfcmljaFRleHQgPSAnJztcblxuICAjc2FuaXRpemVyOiBEb21TYW5pdGl6ZXI7XG4gICNzYW5pdGl6YXRpb25TZXJ2aWNlOiBTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBzYW5pdGl6YXRpb25TZXJ2aWNlOiBTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy4jc2FuaXRpemVyID0gc2FuaXRpemVyO1xuICAgIHRoaXMuI3Nhbml0aXphdGlvblNlcnZpY2UgPSBzYW5pdGl6YXRpb25TZXJ2aWNlO1xuICB9XG59XG4iLCI8c3BhbiBjbGFzcz1cInNreS1yaWNoLXRleHQtZGlzcGxheS10ZXh0XCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRUZXh0XCI+PC9zcGFuPlxuIl19
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, NgZone, TemplateRef, ViewChild, ViewEncapsulation, inject, } from '@angular/core';
|
|
3
3
|
import { NgControl } from '@angular/forms';
|
|
4
|
-
import { SkyCoreAdapterService, SkyFormsUtility, SkyIdService, } from '@skyux/core';
|
|
5
|
-
import { SKY_FORM_ERRORS_ENABLED, SkyFormErrorsModule, SkyInputBoxHostService, } from '@skyux/forms';
|
|
4
|
+
import { SkyCoreAdapterService, SkyFormsUtility, SkyIdModule, SkyIdService, } from '@skyux/core';
|
|
5
|
+
import { SKY_FORM_ERRORS_ENABLED, SkyFormErrorsModule, SkyFormFieldLabelTextRequiredService, SkyInputBoxHostService, } from '@skyux/forms';
|
|
6
6
|
import { SkyToolbarModule } from '@skyux/layout';
|
|
7
7
|
import { Subject } from 'rxjs';
|
|
8
8
|
import { takeUntil } from 'rxjs/operators';
|
|
@@ -21,9 +21,10 @@ import { SkyTextSanitizationService } from './services/text-sanitization.service
|
|
|
21
21
|
import { SkyTextEditorToolbarComponent } from './toolbar/text-editor-toolbar.component';
|
|
22
22
|
import * as i0 from "@angular/core";
|
|
23
23
|
import * as i1 from "@angular/common";
|
|
24
|
-
import * as i2 from "@skyux/
|
|
25
|
-
import * as i3 from "@skyux/
|
|
26
|
-
import * as i4 from "@skyux/
|
|
24
|
+
import * as i2 from "@skyux/core";
|
|
25
|
+
import * as i3 from "@skyux/layout";
|
|
26
|
+
import * as i4 from "@skyux/forms";
|
|
27
|
+
import * as i5 from "@skyux/i18n";
|
|
27
28
|
/**
|
|
28
29
|
* The text editor component lets users format and manipulate text.
|
|
29
30
|
*/
|
|
@@ -229,6 +230,7 @@ export class SkyTextEditorComponent {
|
|
|
229
230
|
#idSvc;
|
|
230
231
|
#sanitizationService;
|
|
231
232
|
#zone;
|
|
233
|
+
#labelTextRequired;
|
|
232
234
|
constructor() {
|
|
233
235
|
/**
|
|
234
236
|
* Whether to put focus on the editor after it renders.
|
|
@@ -259,6 +261,9 @@ export class SkyTextEditorComponent {
|
|
|
259
261
|
this.#idSvc = inject(SkyIdService);
|
|
260
262
|
this.#sanitizationService = inject(SkyTextSanitizationService);
|
|
261
263
|
this.#zone = inject(NgZone);
|
|
264
|
+
this.#labelTextRequired = inject(SkyFormFieldLabelTextRequiredService, {
|
|
265
|
+
optional: true,
|
|
266
|
+
});
|
|
262
267
|
this.errorId = this.#idSvc.generateId();
|
|
263
268
|
this.ngControl = inject(NgControl);
|
|
264
269
|
/* istanbul ignore next */
|
|
@@ -275,6 +280,12 @@ export class SkyTextEditorComponent {
|
|
|
275
280
|
ngAfterViewInit() {
|
|
276
281
|
this.#initIframe();
|
|
277
282
|
}
|
|
283
|
+
ngOnInit() {
|
|
284
|
+
if (this.#labelTextRequired && !this.labelText) {
|
|
285
|
+
this.display = 'none';
|
|
286
|
+
}
|
|
287
|
+
this.#labelTextRequired?.validateLabelText(this.labelText);
|
|
288
|
+
}
|
|
278
289
|
ngOnDestroy() {
|
|
279
290
|
this.#adapterService.removeObservers(this.#editorService.editor);
|
|
280
291
|
this.#ngUnsubscribe.next();
|
|
@@ -422,12 +433,12 @@ export class SkyTextEditorComponent {
|
|
|
422
433
|
/* istanbul ignore next */
|
|
423
434
|
#_onChange;
|
|
424
435
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyTextEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
425
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyTextEditorComponent, isStandalone: true, selector: "sky-text-editor", inputs: { autofocus: "autofocus", disabled: "disabled", fontList: "fontList", fontSizeList: "fontSizeList", id: "id", initialStyleState: "initialStyleState", labelText: "labelText", menus: "menus", mergeFields: "mergeFields", placeholder: "placeholder", toolbarActions: "toolbarActions", linkWindowOptions: "linkWindowOptions" }, host: { properties: { "class.sky-form-control": "this.formControlClass" } }, providers: [
|
|
436
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyTextEditorComponent, isStandalone: true, selector: "sky-text-editor", inputs: { autofocus: "autofocus", disabled: "disabled", fontList: "fontList", fontSizeList: "fontSizeList", hintText: "hintText", id: "id", initialStyleState: "initialStyleState", labelText: "labelText", menus: "menus", mergeFields: "mergeFields", placeholder: "placeholder", toolbarActions: "toolbarActions", linkWindowOptions: "linkWindowOptions" }, host: { properties: { "class.sky-form-control": "this.formControlClass", "style.display": "this.display" } }, providers: [
|
|
426
437
|
SkyTextEditorService,
|
|
427
438
|
SkyTextEditorSelectionService,
|
|
428
439
|
SkyTextEditorAdapterService,
|
|
429
440
|
{ provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
|
|
430
|
-
], viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["iframe"], descendants: true }, { propertyName: "inputTemplateRef", first: true, predicate: ["inputTemplateRef"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<div\n class=\"sky-text-editor\"\n [ngClass]=\"{\n 'sky-text-editor-disabled': disabled,\n 'sky-text-editor-wrapper-focused': editorFocused,\n 'sky-text-editor-invalid': ngControl.errors\n }\"\n>\n <div class=\"sky-text-editor-label-wrapper\">\n <label *ngIf=\"labelText\" class=\"sky-control-label\">{{ labelText }}</label>\n </div>\n <sky-toolbar\n *ngIf=\"\n (menus && menus.length) > 0 ||\n (toolbarActions && toolbarActions.length > 0)\n \"\n class=\"sky-text-editor-toolbar\"\n >\n <sky-toolbar-section\n *ngIf=\"menus && menus.length > 0\"\n aria-label=\"Text formatting\"\n class=\"menubar\"\n role=\"toolbar\"\n >\n <sky-text-editor-menubar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [menus]=\"menus\"\n [mergeFields]=\"mergeFields\"\n >\n </sky-text-editor-menubar>\n </sky-toolbar-section>\n <sky-toolbar-section\n *ngIf=\"toolbarActions && toolbarActions.length > 0\"\n aria-label=\"Text formatting\"\n class=\"toolbar\"\n role=\"toolbar\"\n >\n <sky-text-editor-toolbar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [fontList]=\"fontList\"\n [fontSizeList]=\"fontSizeList\"\n [linkWindowOptions]=\"linkWindowOptions\"\n [toolbarActions]=\"toolbarActions\"\n [styleState]=\"initialStyleState\"\n >\n </sky-text-editor-toolbar>\n </sky-toolbar-section>\n </sky-toolbar>\n <iframe\n class=\"sky-text-editor-wrapper\"\n src=\"about:blank\"\n [attr.title]=\"\n labelText || ('skyux_text_editor_iframe_title_default' | skyLibResources)\n \"\n [ngClass]=\"{\n 'sky-text-editor-wrapper-disabled': disabled\n }\"\n (load)=\"onIframeLoad()\"\n #iframe\n allow=\"clipboard-read *; clipboard-write *\"\n >\n </iframe>\n</div>\n<sky-form-errors\n *ngIf=\"labelText && ngControl?.errors\"\n [id]=\"errorId\"\n [errors]=\"ngControl.errors\"\n [labelText]=\"labelText\"\n [showErrors]=\"ngControl.touched || ngControl.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n", styles: [".sky-text-editor.sky-text-editor-disabled .sky-toolbar *,.sky-text-editor.sky-text-editor-disabled .sky-text-editor-wrapper *{color:var(--sky-text-color-deemphasized)!important}.sky-text-editor .sky-text-editor-label-wrapper{display:flex;width:100%}.sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:#fff;width:100%;height:300px;padding:1rem;font-size:1.2rem;border:1px solid #cdcfd2;border-top:none;overflow-y:auto;outline:none}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:var(--sky-background-color-disabled)}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{box-shadow:0 0 8px #ef404499;border:1px solid var(--sky-highlight-color-danger);outline:none}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{box-shadow:0 0 8px #00b4f199;border:1px solid var(--sky-highlight-color-info);outline:none}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-dropdown-button{border:none}.sky-text-editor .sky-text-editor-toolbar sky-text-editor-menubar,.sky-text-editor .sky-text-editor-toolbar sky-text-editor-toolbar{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-text-editor{border:none;box-shadow:inset 0 0 0 1px #d2d2d2;border-radius:6px}.sky-theme-modern .sky-text-editor.sky-text-editor-disabled{background-color:var(--sky-background-color-disabled);cursor:not-allowed}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty){display:flex;padding:10px 10px 0;width:100%;color:#686c73;transition:border-color .15s,box-shadow .15s,color .15s}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty) label{font-size:13px;margin-bottom:0}.sky-theme-modern .sky-text-editor.sky-text-editor-invalid .sky-text-editor-label-wrapper{color:var(--sky-highlight-color-danger)}.sky-theme-modern .sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{border:none;box-shadow:inset 0 0 0 2px var(--sky-highlight-color-danger)}.sky-theme-modern .sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-label-wrapper{color:#1870b8}.sky-theme-modern .sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 3px #0000004d}.sky-theme-modern .sky-text-editor:not(.sky-text-editor-wrapper-focused) .sky-text-editor-wrapper:hover{border:none;box-shadow:inset 0 0 0 1px #1870b8}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{transition:border-color .15s,box-shadow .15s,color .15s;box-shadow:inset 0 0 0 1px #d2d2d2;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border:none}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar{padding:10px 10px 0}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px!important;border-top:none!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar sky-toolbar-section:not(:last-of-type) .sky-toolbar-section{padding-bottom:0!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:none!important;border-right:none!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 0 0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SkyTextEditorMenubarComponent, selector: "sky-text-editor-menubar", inputs: ["editorFocusStream", "menus", "mergeFields", "disabled"] }, { kind: "component", type: SkyTextEditorToolbarComponent, selector: "sky-text-editor-toolbar", inputs: ["editorFocusStream", "fontList", "fontSizeList", "toolbarActions", "linkWindowOptions", "styleState", "disabled"] }, { kind: "ngmodule", type: SkyToolbarModule }, { kind: "component", type:
|
|
441
|
+
], viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["iframe"], descendants: true }, { propertyName: "inputTemplateRef", first: true, predicate: ["inputTemplateRef"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<div\n class=\"sky-text-editor\"\n [ngClass]=\"{\n 'sky-text-editor-disabled': disabled,\n 'sky-text-editor-wrapper-focused': editorFocused,\n 'sky-text-editor-invalid': ngControl.errors,\n 'sky-margin-stacked-xs': !!hintText\n }\"\n>\n <div class=\"sky-text-editor-label-wrapper\">\n <label *ngIf=\"labelText\" class=\"sky-control-label\">{{ labelText }}</label>\n </div>\n <sky-toolbar\n *ngIf=\"\n (menus && menus.length) > 0 ||\n (toolbarActions && toolbarActions.length > 0)\n \"\n class=\"sky-text-editor-toolbar\"\n >\n <sky-toolbar-section\n *ngIf=\"menus && menus.length > 0\"\n aria-label=\"Text formatting\"\n class=\"menubar\"\n role=\"toolbar\"\n >\n <sky-text-editor-menubar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [menus]=\"menus\"\n [mergeFields]=\"mergeFields\"\n >\n </sky-text-editor-menubar>\n </sky-toolbar-section>\n <sky-toolbar-section\n *ngIf=\"toolbarActions && toolbarActions.length > 0\"\n aria-label=\"Text formatting\"\n class=\"toolbar\"\n role=\"toolbar\"\n >\n <sky-text-editor-toolbar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [fontList]=\"fontList\"\n [fontSizeList]=\"fontSizeList\"\n [linkWindowOptions]=\"linkWindowOptions\"\n [toolbarActions]=\"toolbarActions\"\n [styleState]=\"initialStyleState\"\n >\n </sky-text-editor-toolbar>\n </sky-toolbar-section>\n </sky-toolbar>\n <iframe\n class=\"sky-text-editor-wrapper\"\n src=\"about:blank\"\n [attr.title]=\"\n labelText || ('skyux_text_editor_iframe_title_default' | skyLibResources)\n \"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [ngClass]=\"{\n 'sky-text-editor-wrapper-disabled': disabled\n }\"\n (load)=\"onIframeLoad()\"\n #iframe\n allow=\"clipboard-read *; clipboard-write *\"\n >\n </iframe>\n</div>\n<div\n skyId\n [ngClass]=\"{\n 'sky-font-deemphasized sky-text-editor-hint-text': !!hintText\n }\"\n #hintTextEl=\"skyId\"\n>\n {{ hintText }}\n</div>\n<sky-form-errors\n *ngIf=\"labelText && ngControl?.errors\"\n [id]=\"errorId\"\n [errors]=\"ngControl.errors\"\n [labelText]=\"labelText\"\n [showErrors]=\"ngControl.touched || ngControl.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n", styles: [".sky-text-editor.sky-text-editor-disabled .sky-toolbar *,.sky-text-editor.sky-text-editor-disabled .sky-text-editor-wrapper *{color:var(--sky-text-color-deemphasized)!important}.sky-text-editor .sky-text-editor-label-wrapper{display:flex;width:100%}.sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:#fff;width:100%;height:300px;padding:1rem;font-size:1.2rem;border:1px solid #cdcfd2;border-top:none;overflow-y:auto;outline:none}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:var(--sky-background-color-disabled)}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{box-shadow:0 0 8px #ef404499;border:1px solid var(--sky-highlight-color-danger);outline:none}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{box-shadow:0 0 8px #00b4f199;border:1px solid var(--sky-highlight-color-info);outline:none}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-dropdown-button{border:none}.sky-text-editor .sky-text-editor-toolbar sky-text-editor-menubar,.sky-text-editor .sky-text-editor-toolbar sky-text-editor-toolbar{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-text-editor{border:none;box-shadow:inset 0 0 0 1px #d2d2d2;border-radius:6px}.sky-theme-modern .sky-text-editor.sky-text-editor-disabled{background-color:var(--sky-background-color-disabled);cursor:not-allowed}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty){display:flex;padding:10px 10px 0;width:100%;color:#686c73;transition:border-color .15s,box-shadow .15s,color .15s}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty) label{font-size:13px;margin-bottom:0}.sky-theme-modern .sky-text-editor.sky-text-editor-invalid .sky-text-editor-label-wrapper{color:var(--sky-highlight-color-danger)}.sky-theme-modern .sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{border:none;box-shadow:inset 0 0 0 2px var(--sky-highlight-color-danger)}.sky-theme-modern .sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-label-wrapper{color:#1870b8}.sky-theme-modern .sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 3px #0000004d}.sky-theme-modern .sky-text-editor:not(.sky-text-editor-wrapper-focused) .sky-text-editor-wrapper:hover{border:none;box-shadow:inset 0 0 0 1px #1870b8}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{transition:border-color .15s,box-shadow .15s,color .15s;box-shadow:inset 0 0 0 1px #d2d2d2;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border:none}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar{padding:10px 10px 0}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px!important;border-top:none!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar sky-toolbar-section:not(:last-of-type) .sky-toolbar-section{padding-bottom:0!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:none!important;border-right:none!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 0 0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: SkyIdModule }, { kind: "directive", type: i2.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "component", type: SkyTextEditorMenubarComponent, selector: "sky-text-editor-menubar", inputs: ["editorFocusStream", "menus", "mergeFields", "disabled"] }, { kind: "component", type: SkyTextEditorToolbarComponent, selector: "sky-text-editor-toolbar", inputs: ["editorFocusStream", "fontList", "fontSizeList", "toolbarActions", "linkWindowOptions", "styleState", "disabled"] }, { kind: "ngmodule", type: SkyToolbarModule }, { kind: "component", type: i3.λ37, selector: "sky-toolbar", inputs: ["listDescriptor"] }, { kind: "component", type: i3.λ38, selector: "sky-toolbar-section" }, { kind: "ngmodule", type: SkyFormErrorsModule }, { kind: "component", type: i4.λ21, selector: "sky-form-errors", inputs: ["errors", "labelText", "showErrors"] }, { kind: "ngmodule", type: SkyTextEditorResourcesModule }, { kind: "pipe", type: i5.SkyLibResourcesPipe, name: "skyLibResources" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
431
442
|
}
|
|
432
443
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyTextEditorComponent, decorators: [{
|
|
433
444
|
type: Component,
|
|
@@ -438,12 +449,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
438
449
|
{ provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
|
|
439
450
|
], imports: [
|
|
440
451
|
CommonModule,
|
|
452
|
+
SkyIdModule,
|
|
441
453
|
SkyTextEditorMenubarComponent,
|
|
442
454
|
SkyTextEditorToolbarComponent,
|
|
443
455
|
SkyToolbarModule,
|
|
444
456
|
SkyFormErrorsModule,
|
|
445
457
|
SkyTextEditorResourcesModule,
|
|
446
|
-
], template: "<div\n class=\"sky-text-editor\"\n [ngClass]=\"{\n 'sky-text-editor-disabled': disabled,\n 'sky-text-editor-wrapper-focused': editorFocused,\n 'sky-text-editor-invalid': ngControl.errors\n }\"\n>\n <div class=\"sky-text-editor-label-wrapper\">\n <label *ngIf=\"labelText\" class=\"sky-control-label\">{{ labelText }}</label>\n </div>\n <sky-toolbar\n *ngIf=\"\n (menus && menus.length) > 0 ||\n (toolbarActions && toolbarActions.length > 0)\n \"\n class=\"sky-text-editor-toolbar\"\n >\n <sky-toolbar-section\n *ngIf=\"menus && menus.length > 0\"\n aria-label=\"Text formatting\"\n class=\"menubar\"\n role=\"toolbar\"\n >\n <sky-text-editor-menubar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [menus]=\"menus\"\n [mergeFields]=\"mergeFields\"\n >\n </sky-text-editor-menubar>\n </sky-toolbar-section>\n <sky-toolbar-section\n *ngIf=\"toolbarActions && toolbarActions.length > 0\"\n aria-label=\"Text formatting\"\n class=\"toolbar\"\n role=\"toolbar\"\n >\n <sky-text-editor-toolbar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [fontList]=\"fontList\"\n [fontSizeList]=\"fontSizeList\"\n [linkWindowOptions]=\"linkWindowOptions\"\n [toolbarActions]=\"toolbarActions\"\n [styleState]=\"initialStyleState\"\n >\n </sky-text-editor-toolbar>\n </sky-toolbar-section>\n </sky-toolbar>\n <iframe\n class=\"sky-text-editor-wrapper\"\n src=\"about:blank\"\n [attr.title]=\"\n labelText || ('skyux_text_editor_iframe_title_default' | skyLibResources)\n \"\n [ngClass]=\"{\n 'sky-text-editor-wrapper-disabled': disabled\n }\"\n (load)=\"onIframeLoad()\"\n #iframe\n allow=\"clipboard-read *; clipboard-write *\"\n >\n </iframe>\n</div>\n<sky-form-errors\n *ngIf=\"labelText && ngControl?.errors\"\n [id]=\"errorId\"\n [errors]=\"ngControl.errors\"\n [labelText]=\"labelText\"\n [showErrors]=\"ngControl.touched || ngControl.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n", styles: [".sky-text-editor.sky-text-editor-disabled .sky-toolbar *,.sky-text-editor.sky-text-editor-disabled .sky-text-editor-wrapper *{color:var(--sky-text-color-deemphasized)!important}.sky-text-editor .sky-text-editor-label-wrapper{display:flex;width:100%}.sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:#fff;width:100%;height:300px;padding:1rem;font-size:1.2rem;border:1px solid #cdcfd2;border-top:none;overflow-y:auto;outline:none}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:var(--sky-background-color-disabled)}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{box-shadow:0 0 8px #ef404499;border:1px solid var(--sky-highlight-color-danger);outline:none}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{box-shadow:0 0 8px #00b4f199;border:1px solid var(--sky-highlight-color-info);outline:none}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-dropdown-button{border:none}.sky-text-editor .sky-text-editor-toolbar sky-text-editor-menubar,.sky-text-editor .sky-text-editor-toolbar sky-text-editor-toolbar{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-text-editor{border:none;box-shadow:inset 0 0 0 1px #d2d2d2;border-radius:6px}.sky-theme-modern .sky-text-editor.sky-text-editor-disabled{background-color:var(--sky-background-color-disabled);cursor:not-allowed}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty){display:flex;padding:10px 10px 0;width:100%;color:#686c73;transition:border-color .15s,box-shadow .15s,color .15s}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty) label{font-size:13px;margin-bottom:0}.sky-theme-modern .sky-text-editor.sky-text-editor-invalid .sky-text-editor-label-wrapper{color:var(--sky-highlight-color-danger)}.sky-theme-modern .sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{border:none;box-shadow:inset 0 0 0 2px var(--sky-highlight-color-danger)}.sky-theme-modern .sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-label-wrapper{color:#1870b8}.sky-theme-modern .sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 3px #0000004d}.sky-theme-modern .sky-text-editor:not(.sky-text-editor-wrapper-focused) .sky-text-editor-wrapper:hover{border:none;box-shadow:inset 0 0 0 1px #1870b8}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{transition:border-color .15s,box-shadow .15s,color .15s;box-shadow:inset 0 0 0 1px #d2d2d2;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border:none}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar{padding:10px 10px 0}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px!important;border-top:none!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar sky-toolbar-section:not(:last-of-type) .sky-toolbar-section{padding-bottom:0!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:none!important;border-right:none!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 0 0!important}\n"] }]
|
|
458
|
+
], template: "<div\n class=\"sky-text-editor\"\n [ngClass]=\"{\n 'sky-text-editor-disabled': disabled,\n 'sky-text-editor-wrapper-focused': editorFocused,\n 'sky-text-editor-invalid': ngControl.errors,\n 'sky-margin-stacked-xs': !!hintText\n }\"\n>\n <div class=\"sky-text-editor-label-wrapper\">\n <label *ngIf=\"labelText\" class=\"sky-control-label\">{{ labelText }}</label>\n </div>\n <sky-toolbar\n *ngIf=\"\n (menus && menus.length) > 0 ||\n (toolbarActions && toolbarActions.length > 0)\n \"\n class=\"sky-text-editor-toolbar\"\n >\n <sky-toolbar-section\n *ngIf=\"menus && menus.length > 0\"\n aria-label=\"Text formatting\"\n class=\"menubar\"\n role=\"toolbar\"\n >\n <sky-text-editor-menubar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [menus]=\"menus\"\n [mergeFields]=\"mergeFields\"\n >\n </sky-text-editor-menubar>\n </sky-toolbar-section>\n <sky-toolbar-section\n *ngIf=\"toolbarActions && toolbarActions.length > 0\"\n aria-label=\"Text formatting\"\n class=\"toolbar\"\n role=\"toolbar\"\n >\n <sky-text-editor-toolbar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [fontList]=\"fontList\"\n [fontSizeList]=\"fontSizeList\"\n [linkWindowOptions]=\"linkWindowOptions\"\n [toolbarActions]=\"toolbarActions\"\n [styleState]=\"initialStyleState\"\n >\n </sky-text-editor-toolbar>\n </sky-toolbar-section>\n </sky-toolbar>\n <iframe\n class=\"sky-text-editor-wrapper\"\n src=\"about:blank\"\n [attr.title]=\"\n labelText || ('skyux_text_editor_iframe_title_default' | skyLibResources)\n \"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [ngClass]=\"{\n 'sky-text-editor-wrapper-disabled': disabled\n }\"\n (load)=\"onIframeLoad()\"\n #iframe\n allow=\"clipboard-read *; clipboard-write *\"\n >\n </iframe>\n</div>\n<div\n skyId\n [ngClass]=\"{\n 'sky-font-deemphasized sky-text-editor-hint-text': !!hintText\n }\"\n #hintTextEl=\"skyId\"\n>\n {{ hintText }}\n</div>\n<sky-form-errors\n *ngIf=\"labelText && ngControl?.errors\"\n [id]=\"errorId\"\n [errors]=\"ngControl.errors\"\n [labelText]=\"labelText\"\n [showErrors]=\"ngControl.touched || ngControl.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n", styles: [".sky-text-editor.sky-text-editor-disabled .sky-toolbar *,.sky-text-editor.sky-text-editor-disabled .sky-text-editor-wrapper *{color:var(--sky-text-color-deemphasized)!important}.sky-text-editor .sky-text-editor-label-wrapper{display:flex;width:100%}.sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:#fff;width:100%;height:300px;padding:1rem;font-size:1.2rem;border:1px solid #cdcfd2;border-top:none;overflow-y:auto;outline:none}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:var(--sky-background-color-disabled)}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{box-shadow:0 0 8px #ef404499;border:1px solid var(--sky-highlight-color-danger);outline:none}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{box-shadow:0 0 8px #00b4f199;border:1px solid var(--sky-highlight-color-info);outline:none}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-dropdown-button{border:none}.sky-text-editor .sky-text-editor-toolbar sky-text-editor-menubar,.sky-text-editor .sky-text-editor-toolbar sky-text-editor-toolbar{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-text-editor{border:none;box-shadow:inset 0 0 0 1px #d2d2d2;border-radius:6px}.sky-theme-modern .sky-text-editor.sky-text-editor-disabled{background-color:var(--sky-background-color-disabled);cursor:not-allowed}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty){display:flex;padding:10px 10px 0;width:100%;color:#686c73;transition:border-color .15s,box-shadow .15s,color .15s}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty) label{font-size:13px;margin-bottom:0}.sky-theme-modern .sky-text-editor.sky-text-editor-invalid .sky-text-editor-label-wrapper{color:var(--sky-highlight-color-danger)}.sky-theme-modern .sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{border:none;box-shadow:inset 0 0 0 2px var(--sky-highlight-color-danger)}.sky-theme-modern .sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-label-wrapper{color:#1870b8}.sky-theme-modern .sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 3px #0000004d}.sky-theme-modern .sky-text-editor:not(.sky-text-editor-wrapper-focused) .sky-text-editor-wrapper:hover{border:none;box-shadow:inset 0 0 0 1px #1870b8}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{transition:border-color .15s,box-shadow .15s,color .15s;box-shadow:inset 0 0 0 1px #d2d2d2;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border:none}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar{padding:10px 10px 0}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px!important;border-top:none!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar sky-toolbar-section:not(:last-of-type) .sky-toolbar-section{padding-bottom:0!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:none!important;border-right:none!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 0 0!important}\n"] }]
|
|
447
459
|
}], ctorParameters: () => [], propDecorators: { autofocus: [{
|
|
448
460
|
type: Input
|
|
449
461
|
}], disabled: [{
|
|
@@ -452,6 +464,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
452
464
|
type: Input
|
|
453
465
|
}], fontSizeList: [{
|
|
454
466
|
type: Input
|
|
467
|
+
}], hintText: [{
|
|
468
|
+
type: Input
|
|
455
469
|
}], id: [{
|
|
456
470
|
type: Input
|
|
457
471
|
}], initialStyleState: [{
|
|
@@ -480,5 +494,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
480
494
|
}], formControlClass: [{
|
|
481
495
|
type: HostBinding,
|
|
482
496
|
args: ['class.sky-form-control']
|
|
497
|
+
}], display: [{
|
|
498
|
+
type: HostBinding,
|
|
499
|
+
args: ['style.display']
|
|
483
500
|
}] } });
|
|
484
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsWUFBWSxHQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLHNCQUFzQixHQUN2QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FB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LG1CQUFtQiwrSUFDbkIsNEJBQTRCOzsyRkFHbkIsc0JBQXNCO2tCQXRCbEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04saUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUI7d0JBQ1Qsb0JBQW9CO3dCQUNwQiw2QkFBNkI7d0JBQzdCLDJCQUEyQjt3QkFDM0IsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtxQkFDckQsV0FDUTt3QkFDUCxZQUFZO3dCQUNaLDZCQUE2Qjt3QkFDN0IsNkJBQTZCO3dCQUM3QixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsNEJBQTRCO3FCQUM3Qjt3REFTTSxTQUFTO3NCQURmLEtBQUs7Z0JBU0ssUUFBUTtzQkFEbEIsS0FBSztnQkEyQ0ssUUFBUTtzQkFEbEIsS0FBSztnQkFjSyxZQUFZO3NCQUR0QixLQUFLO2dCQWNLLEVBQUU7c0JBRFosS0FBSztnQkFhSyxpQkFBaUI7c0JBRDNCLEtBQUs7Z0JBcUJLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBZUssS0FBSztzQkFEZixLQUFLO2dCQWFLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBYUssV0FBVztzQkFEckIsS0FBSztnQkFvQkssY0FBYztzQkFEeEIsS0FBSztnQkFnQkssaUJBQWlCO3NCQUQzQixLQUFLO2dCQVlDLFNBQVM7c0JBRGYsU0FBUzt1QkFBQyxRQUFRO2dCQXNEWixnQkFBZ0I7c0JBSnRCLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUU7d0JBQzdCLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFNTSxnQkFBZ0I7c0JBRHRCLFdBQVc7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBTa3lDb3JlQWRhcHRlclNlcnZpY2UsXG4gIFNreUZvcm1zVXRpbGl0eSxcbiAgU2t5SWRTZXJ2aWNlLFxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCxcbiAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgU2t5SW5wdXRCb3hIb3N0U2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2Zvcm1zJztcbmltcG9ydCB7IFNreVRvb2xiYXJNb2R1bGUgfSBmcm9tICdAc2t5dXgvbGF5b3V0JztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vc2hhcmVkL3NreS10ZXh0LWVkaXRvci1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHsgRk9OVF9MSVNUX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9mb250LWxpc3QtZGVmYXVsdHMnO1xuaW1wb3J0IHsgRk9OVF9TSVpFX0xJU1RfREVGQVVMVFMgfSBmcm9tICcuL2RlZmF1bHRzL2ZvbnQtc2l6ZS1saXN0LWRlZmF1bHRzJztcbmltcG9ydCB7IExJTktfV0lORE9XX09QVElPTlNfREVGQVVMVFMgfSBmcm9tICcuL2RlZmF1bHRzL2xpbmstd2luZG93LW9wdGlvbnMtZGVmYXVsdHMnO1xuaW1wb3J0IHsgTUVOVV9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvbWVudS1kZWZhdWx0cyc7XG5pbXBvcnQgeyBTVFlMRV9TVEFURV9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvc3R5bGUtc3RhdGUtZGVmYXVsdHMnO1xuaW1wb3J0IHsgVE9PTEJBUl9BQ1RJT05fREVGQVVMVFMgfSBmcm9tICcuL2RlZmF1bHRzL3Rvb2xiYXItYWN0aW9uLWRlZmF1bHRzJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JNZW51YmFyQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51YmFyL3RleHQtZWRpdG9yLW1lbnViYXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGV4dC1lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGV4dC1zYW5pdGl6YXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vdG9vbGJhci90ZXh0LWVkaXRvci10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yRm9udCB9IGZyb20gJy4vdHlwZXMvZm9udC1zdGF0ZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlIH0gZnJvbSAnLi90eXBlcy9saW5rLXdpbmRvdy1vcHRpb25zLXR5cGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lbnVUeXBlIH0gZnJvbSAnLi90eXBlcy9tZW51LXR5cGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUgfSBmcm9tICcuL3R5cGVzL3N0eWxlLXN0YXRlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkIH0gZnJvbSAnLi90eXBlcy90ZXh0LWVkaXRvci1tZXJnZS1maWVsZCc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGUgfSBmcm9tICcuL3R5cGVzL3Rvb2xiYXItYWN0aW9uLXR5cGUnO1xuXG4vKipcbiAqIFRoZSB0ZXh0IGVkaXRvciBjb21wb25lbnQgbGV0cyB1c2VycyBmb3JtYXQgYW5kIG1hbmlwdWxhdGUgdGV4dC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnc2t5LXRleHQtZWRpdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIFNreVRleHRFZGl0b3JTZXJ2aWNlLFxuICAgIFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSxcbiAgICB7IHByb3ZpZGU6IFNLWV9GT1JNX0VSUk9SU19FTkFCTEVELCB1c2VWYWx1ZTogdHJ1ZSB9LFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFNreVRleHRFZGl0b3JNZW51YmFyQ29tcG9uZW50LFxuICAgIFNreVRleHRFZGl0b3JUb29sYmFyQ29tcG9uZW50LFxuICAgIFNreVRvb2xiYXJNb2R1bGUsXG4gICAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgICBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3Nvclxue1xuICAvKipcbiAgICogV2hldGhlciB0byBwdXQgZm9jdXMgb24gdGhlIGVkaXRvciBhZnRlciBpdCByZW5kZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIHRleHQgZWRpdG9yIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb2VyY2VkVmFsdWUgPSBTa3lGb3Jtc1V0aWxpdHkuY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAoY29lcmNlZFZhbHVlICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLiNfZGlzYWJsZWQgPSBjb2VyY2VkVmFsdWU7XG5cbiAgICAgIC8vIFVwZGF0ZSBmb2N1c2FibGVDaGlsZHJlbiBpbnNpZGUgdGhlIGlmcmFtZS5cbiAgICAgIGxldCBmb2N1c2FibGVDaGlsZHJlbjogSFRNTEVsZW1lbnRbXTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5pZnJhbWVSZWYpIHtcbiAgICAgICAgZm9jdXNhYmxlQ2hpbGRyZW4gPSB0aGlzLiNjb3JlQWRhcHRlclNlcnZpY2UuZ2V0Rm9jdXNhYmxlQ2hpbGRyZW4oXG4gICAgICAgICAgdGhpcy5pZnJhbWVSZWYubmF0aXZlRWxlbWVudC5jb250ZW50RG9jdW1lbnQuYm9keSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZ25vcmVWaXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICAgICAgaWdub3JlVGFiSW5kZXg6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGhpcy4jX2Rpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZGlzYWJsZUVkaXRvcihcbiAgICAgICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuLFxuICAgICAgICAgICAgdGhpcy5pZnJhbWVSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmVuYWJsZUVkaXRvcihcbiAgICAgICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuLFxuICAgICAgICAgICAgdGhpcy5pZnJhbWVSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9udHMgdG8gaW5jbHVkZSBpbiB0aGUgZm9udCBwaWNrZXIuXG4gICAqIEBkZWZhdWx0IFt7bmFtZTogJ0JsYWNrYmF1ZCBTYW5zJywgdmFsdWU6ICdcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmJ30sIHtuYW1lOiAnQXJpYWwnLCB2YWx1ZTogJ0FyaWFsJ30sIHtuYW1lOiAnQXJpYWwgQmxhY2snLCB2YWx1ZTogJ1wiQXJpYWwgQmxhY2tcIid9LCB7bmFtZTogJ0NvdXJpZXIgTmV3JywgdmFsdWU6ICdcIkNvdXJpZXIgTmV3XCInfSwge25hbWU6ICdHZW9yZ2lhJywgdmFsdWU6ICdHZW9yZ2lhLCBzZXJpZid9LCB7bmFtZTogJ1RhaG9tYScsIHZhbHVlOiAnVGFob21hLCBHZW5ldmEsIHNhbnMtc2VyaWYnfSwge25hbWU6ICdUaW1lcyBOZXcgUm9tYW4nLCB2YWx1ZTogJ1wiVGltZXMgTmV3IFJvbWFuXCInfSwge25hbWU6ICdUcmVidWNoZXQgTVMnLCB2YWx1ZTogJ1wiVHJlYnVjaGV0IE1TXCIsIHNhbnMtc2VyaWYnfSwge25hbWU6ICdWZXJkYW5hJywgdmFsdWU6ICdWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWYnfV1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZm9udExpc3QodmFsdWU6IFNreVRleHRFZGl0b3JGb250W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9udExpc3QgPSB2YWx1ZSB8fCBGT05UX0xJU1RfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvbnRMaXN0KCk6IFNreVRleHRFZGl0b3JGb250W10ge1xuICAgIHJldHVybiB0aGlzLiNfZm9udExpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbnQgc2l6ZXMgdG8gaW5jbHVkZSBpbiB0aGUgZm9udCBzaXplIHBpY2tlci5cbiAgICogQGRlZmF1bHQgWzYsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzNiwgNDhdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZvbnRTaXplTGlzdCh2YWx1ZTogbnVtYmVyW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9udFNpemVMaXN0ID0gdmFsdWUgfHwgRk9OVF9TSVpFX0xJU1RfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvbnRTaXplTGlzdCgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19mb250U2l6ZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBhdHRyaWJ1dGUgZm9yIHRoZSB0ZXh0IGVkaXRvci5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGNvbXBvbmVudCBnZW5lcmF0ZXMgYSByYW5kb20gSUQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNpZCA9IHZhbHVlIHx8IHRoaXMuI2RlZmF1bHRJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jaWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGluaXRpYWwgc3R5bGVzIGZvciBhbGwgY29udGVudCwgaW5jbHVkaW5nIGJhY2tncm91bmQgY29sb3IsIGZvbnQgc2l6ZSwgYW5kIGxpbmsgc3RhdGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluaXRpYWxTdHlsZVN0YXRlKHN0YXRlOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIHN0YXRlIGFmdGVyIGluaXRpYWxpemF0aW9uIGhhcyB0YWtlbiBwbGFjZVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNpbml0aWFsaXplZCkge1xuICAgICAgdGhpcy4jX2luaXRpYWxTdHlsZVN0YXRlID0ge1xuICAgICAgICAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUyxcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5pdGlhbFN0eWxlU3RhdGUoKTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUge1xuICAgIHJldHVybiB0aGlzLiNfaW5pdGlhbFN0eWxlU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgdGV4dCBlZGl0b3IncyBsYWJlbC5cbiAgICogQHByZXZpZXdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGFiZWxUZXh0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbGFiZWxUZXh0ID0gdmFsdWU7XG4gICAgdGhpcy4jdXBkYXRlQTExeUF0dHJpYnV0ZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFiZWxUZXh0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19sYWJlbFRleHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1lbnVzIHRvIGluY2x1ZGUgaW4gdGhlIG1lbnUgYmFyLlxuICAgKiBAZGVmYXVsdCBbICdlZGl0JywgJ2Zvcm1hdCcgXVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtZW51cyh2YWx1ZTogU2t5VGV4dEVkaXRvck1lbnVUeXBlW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWVudXMgPSB2YWx1ZSB8fCBNRU5VX0RFRkFVTFRTO1xuICB9XG5cbiAgcHVibGljIGdldCBtZW51cygpOiBTa3lUZXh0RWRpdG9yTWVudVR5cGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19tZW51cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWVyZ2UgZmllbGRzIHRvIGluY2x1ZGUgaW4gdGhlIG1lcmdlIGZpZWxkIG1lbnUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1lcmdlRmllbGRzKHZhbHVlOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZFtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21lcmdlRmllbGRzID0gdmFsdWUgfHwgW107XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lcmdlRmllbGRzKCk6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10ge1xuICAgIHJldHVybiB0aGlzLiNfbWVyZ2VGaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogUGxhY2Vob2xkZXIgdGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlIHRleHQgZW50cnkgYXJlYSBpcyBlbXB0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLiNfcGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuI19wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICAgICAgaWYgKHRoaXMuI2luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldFBsYWNlaG9sZGVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI19wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9ucyB0byBpbmNsdWRlIGluIHRoZSB0b29sYmFyIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIuXG4gICAqIEBkZWZhdWx0IFsgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXN0eWxlJywgJ2NvbG9yJywgJ2xpc3QnLCAnbGluayBdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRvb2xiYXJBY3Rpb25zKFxuICAgIHZhbHVlOiBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGVbXSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy4jX3Rvb2xiYXJBY3Rpb25zID0gdmFsdWUgfHwgVE9PTEJBUl9BQ1RJT05fREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvb2xiYXJBY3Rpb25zKCk6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jX3Rvb2xiYXJBY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgd2luZG93IG9wdGlvbnMgZm9yIGFkZGluZyBhIGh5cGVybGluay5cbiAgICogQGRlZmF1bHQgWyAnbmV3JywgJ2V4aXN0aW5nJyBdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGxpbmtXaW5kb3dPcHRpb25zKFxuICAgIHZhbHVlOiBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlW10gfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuI19saW5rV2luZG93T3B0aW9ucyA9IHZhbHVlID8/IExJTktfV0lORE9XX09QVElPTlNfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmtXaW5kb3dPcHRpb25zKCk6IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19saW5rV2luZG93T3B0aW9ucztcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lmcmFtZScpXG4gIHB1YmxpYyBpZnJhbWVSZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5hbCB2YWx1ZSBvZiB0aGUgY29udHJvbC5cbiAgICovXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIC8vIE5vcm1hbGl6ZSB2YWx1ZSBhbmQgc2V0IGFueSBlbXB0eSBzdGF0ZSB0byBhbiBlbXB0eSBzdHJpbmcuXG4gICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZTogc3RyaW5nO1xuICAgIGNvbnN0IHZhbHVlVHJpbW1lZCA9IHZhbHVlPy50cmltKCk7XG5cbiAgICBpZiAoXG4gICAgICAhdmFsdWUgfHxcbiAgICAgIHZhbHVlVHJpbW1lZCA9PT0gJzxwPjwvcD4nIHx8XG4gICAgICB2YWx1ZVRyaW1tZWQgPT09ICc8YnI+JyB8fFxuICAgICAgdmFsdWVUcmltbWVkID09PSAnPHA+PGJyPjwvcD4nXG4gICAgKSB7XG4gICAgICBub3JtYWxpemVkVmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgbm9ybWFsaXplZFZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplZFZhbHVlID0gdGhpcy4jc2FuaXRpemF0aW9uU2VydmljZVxuICAgICAgLnNhbml0aXplKG5vcm1hbGl6ZWRWYWx1ZSlcbiAgICAgIC50cmltKCk7XG5cbiAgICBpZiAodGhpcy4jX3ZhbHVlICE9PSBub3JtYWxpemVkVmFsdWUpIHtcbiAgICAgIHRoaXMuI192YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcblxuICAgICAgLy8gVXBkYXRlIGFuZ3VsYXIgZm9ybSBjb250cm9sIGlmIG1vZGVsIGhhcyBiZWVuIG5vcm1hbGl6ZWQuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm5nQ29udHJvbD8uY29udHJvbCAmJlxuICAgICAgICBub3JtYWxpemVkVmFsdWUgIT09IHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZWRWYWx1ZSwge1xuICAgICAgICAgIGVtaXRNb2RlbFRvVmlld0NoYW5nZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyAjaW5pdElmcmFtZSgpIHdpbGwgZG8gYW5vdGhlciBjaGVjayBsYXRlciB0byBzZWUgaWYgdGhlIGVkaXRvciBzaG91bGRcbiAgICAgIC8vIHJlY2VpdmUgZm9jdXMgaWYgbm90IGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC5cbiAgICAgIHRoaXMuI2NoZWNrQXV0b2ZvY3VzQW5kRm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI192YWx1ZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0VGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgaW5wdXRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGVkaXRvckZvY3VzU3RyZWFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1mb3JtLWNvbnRyb2wnKVxuICBwdWJsaWMgZm9ybUNvbnRyb2xDbGFzcyA9ICEhaW5qZWN0KFNreUlucHV0Qm94SG9zdFNlcnZpY2UsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGVkaXRvckZvY3VzZWQgPSBmYWxzZTtcblxuICAjZGVmYXVsdElkOiBzdHJpbmc7XG4gICNpZDogc3RyaW5nO1xuICAjZm9jdXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAjaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNfZm9udExpc3QgPSBGT05UX0xJU1RfREVGQVVMVFM7XG4gICNfZm9udFNpemVMaXN0ID0gRk9OVF9TSVpFX0xJU1RfREVGQVVMVFM7XG4gICNfbGFiZWxUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNfbWVyZ2VGaWVsZHM6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10gPSBbXTtcbiAgI19tZW51cyA9IE1FTlVfREVGQVVMVFM7XG4gICNfdG9vbGJhckFjdGlvbnM6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdID0gVE9PTEJBUl9BQ1RJT05fREVGQVVMVFM7XG4gICNfbGlua1dpbmRvd09wdGlvbnMgPSBMSU5LX1dJTkRPV19PUFRJT05TX0RFRkFVTFRTO1xuICAjX2Rpc2FibGVkID0gZmFsc2U7XG4gICNfaW5pdGlhbFN0eWxlU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBTVFlMRV9TVEFURV9ERUZBVUxUUyk7XG4gICNfcGxhY2Vob2xkZXIgPSAnJztcbiAgI192YWx1ZSA9ICc8cD48L3A+JztcblxuICByZWFkb25seSAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2NoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcmVhZG9ubHkgI2NvcmVBZGFwdGVyU2VydmljZSA9IGluamVjdChTa3lDb3JlQWRhcHRlclNlcnZpY2UpO1xuICByZWFkb25seSAjZWRpdG9yU2VydmljZSA9IGluamVjdChTa3lUZXh0RWRpdG9yU2VydmljZSk7XG4gIHJlYWRvbmx5ICNpZFN2YyA9IGluamVjdChTa3lJZFNlcnZpY2UpO1xuICByZWFkb25seSAjc2FuaXRpemF0aW9uU2VydmljZSA9IGluamVjdChTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZSk7XG4gIHJlYWRvbmx5ICN6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVycm9ySWQgPSB0aGlzLiNpZFN2Yy5nZW5lcmF0ZUlkKCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBuZ0NvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNpZCA9IHRoaXMuI2RlZmF1bHRJZCA9IHRoaXMuI2lkU3ZjLmdlbmVyYXRlSWQoKTtcbiAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jaW5pdElmcmFtZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnJlbW92ZU9ic2VydmVycyh0aGlzLiNlZGl0b3JTZXJ2aWNlLmVkaXRvcik7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIG9uSWZyYW1lTG9hZCgpOiB2b2lkIHtcbiAgICAvLyBSZWluaXRpYWxpemUgdGhlIGVkaXRvciBpZiBpdCBhbHJlYWR5IGV4aXN0cyB0byBjb3ZlciBzaXR1YXRpb25zIHdoZXJlIHRoZSB0ZXh0IGVkaXRvciBtaWdodCBoYXZlIGJlZW4gbW92ZWQgaW4gdGhlIERPTS5cbiAgICBpZiAodGhpcy4jZWRpdG9yU2VydmljZS5pc0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLiNpbml0SWZyYW1lKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXG4gICAgLy8gVXBkYXRlIEhUTUwgaWYgbmVjZXNzYXJ5LlxuICAgIGlmICh0aGlzLiNpbml0aWFsaXplZCkge1xuICAgICAgY29uc3QgZWRpdG9yVmFsdWUgPSB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRFZGl0b3JJbm5lckh0bWwoKTtcbiAgICAgIGlmIChlZGl0b3JWYWx1ZSAhPT0gdGhpcy4jX3ZhbHVlKSB7XG4gICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldEVkaXRvcklubmVySHRtbCh0aGlzLiNfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI19vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgI2NoZWNrQXV0b2ZvY3VzQW5kRm9jdXMoKTogdm9pZCB7XG4gICAgLy8gRG9uJ3Qgc2V0IGZvY3VzIG9uIHRoZSBlZGl0b3IgaWYgdGhlIGlmcmFtZSBpc24ndCBpbml0aWFsaXplZC5cbiAgICAvLyBBdXRvZm9jdXMgaXNuJ3QgdGVzdGFibGUgaW4gRmlyZWZveCBhbmQgSUUuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodGhpcy5hdXRvZm9jdXMgJiYgdGhpcy4jaW5pdGlhbGl6ZWQgJiYgIXRoaXMuI2ZvY3VzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmZvY3VzRWRpdG9yKCk7XG4gICAgICB0aGlzLiNmb2N1c0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAjdXBkYXRlU3R5bGUoKTogdm9pZCB7XG4gICAgdGhpcy4jX2luaXRpYWxTdHlsZVN0YXRlID0ge1xuICAgICAgLi4udGhpcy4jX2luaXRpYWxTdHlsZVN0YXRlLFxuICAgICAgLi4udGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0U3R5bGVTdGF0ZSgpLFxuICAgIH07XG4gIH1cblxuICAjaW5pdElmcmFtZSgpOiB2b2lkIHtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5pbml0RWRpdG9yKFxuICAgICAgdGhpcy5pZCxcbiAgICAgICh0aGlzLmlmcmFtZVJlZiBhcyBFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5pbml0aWFsU3R5bGVTdGF0ZSxcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIsXG4gICAgKTtcblxuICAgIHRoaXMubmdDb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jdXBkYXRlQTExeUF0dHJpYnV0ZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmlucHV0TGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBydW4gY2hhbmdlIGRldGVjdGlvbiBmb3IgY2hhbmdlcyBvcmlnaW5hdGluZyBpbnNpZGUgYW4gaWZyYW1lLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGNhbGwgdGhlIG9uQ2hhbmdlKCkgZXZlbnQgaW5zaWRlIE5nWm9uZSB0byBmb3JjZSBjaGFuZ2UgcHJvcGFnYXRpb24gdG8gY29uc3VtaW5nIGNvbXBvbmVudHMuXG4gICAgICAgIHRoaXMuI3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiN2aWV3VG9Nb2RlbFVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLnNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiN1cGRhdGVTdHlsZSgpO1xuICAgICAgICB0aGlzLmVkaXRvckZvY3VzU3RyZWFtLm5leHQoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmNsaWNrTGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdG9yRm9jdXNTdHJlYW0ubmV4dCgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNlZGl0b3JTZXJ2aWNlXG4gICAgICAuYmx1ckxpc3RlbmVyKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyBBbmd1bGFyIGRvZXNuJ3QgcnVuIGNoYW5nZSBkZXRlY3Rpb24gZm9yIGNoYW5nZXMgb3JpZ2luYXRpbmcgaW5zaWRlIGFuIGlmcmFtZSxcbiAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBydW4gbWFya0ZvckNoZWNrKCkgaW5zaWRlIHRoZSBOZ1pvbmUgdG8gZm9yY2UgY2hhbmdlIHByb3BhZ2F0aW9uIHRvIGNvbnN1bWluZyBjb21wb25lbnRzLlxuICAgICAgICB0aGlzLiN6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jX29uVG91Y2hlZCgpO1xuICAgICAgICAgIHRoaXMuZWRpdG9yRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmNvbW1hbmRDaGFuZ2VMaXN0ZW5lcigpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jdXBkYXRlU3R5bGUoKTtcbiAgICAgICAgdGhpcy4jdmlld1RvTW9kZWxVcGRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmZvY3VzTGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBydW4gY2hhbmdlIGRldGVjdGlvbiBmb3IgY2hhbmdlcyBvcmlnaW5hdGluZyBpbnNpZGUgYW4gaWZyYW1lLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHJ1biBtYXJrRm9yQ2hlY2soKSBpbnNpZGUgdGhlIE5nWm9uZSB0byBmb3JjZSBjaGFuZ2UgcHJvcGFnYXRpb24gdG8gY29uc3VtaW5nIGNvbXBvbmVudHMuXG4gICAgICAgIHRoaXMuI3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVkaXRvckZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0RWRpdG9ySW5uZXJIdG1sKHRoaXMuI192YWx1ZSk7XG4gICAgdGhpcy4jdXBkYXRlQTExeUF0dHJpYnV0ZXMoKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VkaXRvcigpO1xuICAgIH1cblxuICAgIHRoaXMuI2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB0aGlzLiNmb2N1c0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICB0aGlzLiNjaGVja0F1dG9mb2N1c0FuZEZvY3VzKCk7XG4gIH1cblxuICAjdXBkYXRlQTExeUF0dHJpYnV0ZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2VkaXRvclNlcnZpY2UuaXNJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0TGFiZWxBdHRyaWJ1dGUodGhpcy5sYWJlbFRleHQpO1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0RXJyb3JBdHRyaWJ1dGVzKFxuICAgICAgICB0aGlzLmxhYmVsVGV4dCA/IHRoaXMuZXJyb3JJZCA6ICcnLFxuICAgICAgICB0aGlzLm5nQ29udHJvbC5lcnJvcnMsXG4gICAgICApO1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0UmVxdWlyZWRBdHRyaWJ1dGUoXG4gICAgICAgIFNreUZvcm1zVXRpbGl0eS5oYXNSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5uZ0NvbnRyb2wpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAjdmlld1RvTW9kZWxVcGRhdGUoZW1pdENoYW5nZSA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0RWRpdG9ySW5uZXJIdG1sKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZW1pdENoYW5nZSkge1xuICAgICAgdGhpcy4jX29uQ2hhbmdlKHRoaXMuI192YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgI19vblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICB9O1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICNfb25DaGFuZ2U6IChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHZhbHVlOiBhbnksXG4gICkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIH07XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yXCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdza3ktdGV4dC1lZGl0b3ItZGlzYWJsZWQnOiBkaXNhYmxlZCxcbiAgICAnc2t5LXRleHQtZWRpdG9yLXdyYXBwZXItZm9jdXNlZCc6IGVkaXRvckZvY3VzZWQsXG4gICAgJ3NreS10ZXh0LWVkaXRvci1pbnZhbGlkJzogbmdDb250cm9sLmVycm9yc1xuICB9XCJcbj5cbiAgPGRpdiBjbGFzcz1cInNreS10ZXh0LWVkaXRvci1sYWJlbC13cmFwcGVyXCI+XG4gICAgPGxhYmVsICpuZ0lmPVwibGFiZWxUZXh0XCIgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbFwiPnt7IGxhYmVsVGV4dCB9fTwvbGFiZWw+XG4gIDwvZGl2PlxuICA8c2t5LXRvb2xiYXJcbiAgICAqbmdJZj1cIlxuICAgICAgKG1lbnVzICYmIG1lbnVzLmxlbmd0aCkgPiAwIHx8XG4gICAgICAodG9vbGJhckFjdGlvbnMgJiYgdG9vbGJhckFjdGlvbnMubGVuZ3RoID4gMClcbiAgICBcIlxuICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLXRvb2xiYXJcIlxuICA+XG4gICAgPHNreS10b29sYmFyLXNlY3Rpb25cbiAgICAgICpuZ0lmPVwibWVudXMgJiYgbWVudXMubGVuZ3RoID4gMFwiXG4gICAgICBhcmlhLWxhYmVsPVwiVGV4dCBmb3JtYXR0aW5nXCJcbiAgICAgIGNsYXNzPVwibWVudWJhclwiXG4gICAgICByb2xlPVwidG9vbGJhclwiXG4gICAgPlxuICAgICAgPHNreS10ZXh0LWVkaXRvci1tZW51YmFyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtlZGl0b3JGb2N1c1N0cmVhbV09XCJlZGl0b3JGb2N1c1N0cmVhbVwiXG4gICAgICAgIFttZW51c109XCJtZW51c1wiXG4gICAgICAgIFttZXJnZUZpZWxkc109XCJtZXJnZUZpZWxkc1wiXG4gICAgICA+XG4gICAgICA8L3NreS10ZXh0LWVkaXRvci1tZW51YmFyPlxuICAgIDwvc2t5LXRvb2xiYXItc2VjdGlvbj5cbiAgICA8c2t5LXRvb2xiYXItc2VjdGlvblxuICAgICAgKm5nSWY9XCJ0b29sYmFyQWN0aW9ucyAmJiB0b29sYmFyQWN0aW9ucy5sZW5ndGggPiAwXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJUZXh0IGZvcm1hdHRpbmdcIlxuICAgICAgY2xhc3M9XCJ0b29sYmFyXCJcbiAgICAgIHJvbGU9XCJ0b29sYmFyXCJcbiAgICA+XG4gICAgICA8c2t5LXRleHQtZWRpdG9yLXRvb2xiYXJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2VkaXRvckZvY3VzU3RyZWFtXT1cImVkaXRvckZvY3VzU3RyZWFtXCJcbiAgICAgICAgW2ZvbnRMaXN0XT1cImZvbnRMaXN0XCJcbiAgICAgICAgW2ZvbnRTaXplTGlzdF09XCJmb250U2l6ZUxpc3RcIlxuICAgICAgICBbbGlua1dpbmRvd09wdGlvbnNdPVwibGlua1dpbmRvd09wdGlvbnNcIlxuICAgICAgICBbdG9vbGJhckFjdGlvbnNdPVwidG9vbGJhckFjdGlvbnNcIlxuICAgICAgICBbc3R5bGVTdGF0ZV09XCJpbml0aWFsU3R5bGVTdGF0ZVwiXG4gICAgICA+XG4gICAgICA8L3NreS10ZXh0LWVkaXRvci10b29sYmFyPlxuICAgIDwvc2t5LXRvb2xiYXItc2VjdGlvbj5cbiAgPC9za3ktdG9vbGJhcj5cbiAgPGlmcmFtZVxuICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLXdyYXBwZXJcIlxuICAgIHNyYz1cImFib3V0OmJsYW5rXCJcbiAgICBbYXR0ci50aXRsZV09XCJcbiAgICAgIGxhYmVsVGV4dCB8fCAoJ3NreXV4X3RleHRfZWRpdG9yX2lmcmFtZV90aXRsZV9kZWZhdWx0JyB8IHNreUxpYlJlc291cmNlcylcbiAgICBcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktdGV4dC1lZGl0b3Itd3JhcHBlci1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgfVwiXG4gICAgKGxvYWQpPVwib25JZnJhbWVMb2FkKClcIlxuICAgICNpZnJhbWVcbiAgICBhbGxvdz1cImNsaXBib2FyZC1yZWFkICo7IGNsaXBib2FyZC13cml0ZSAqXCJcbiAgPlxuICA8L2lmcmFtZT5cbjwvZGl2PlxuPHNreS1mb3JtLWVycm9yc1xuICAqbmdJZj1cImxhYmVsVGV4dCAmJiBuZ0NvbnRyb2w/LmVycm9yc1wiXG4gIFtpZF09XCJlcnJvcklkXCJcbiAgW2Vycm9yc109XCJuZ0NvbnRyb2wuZXJyb3JzXCJcbiAgW2xhYmVsVGV4dF09XCJsYWJlbFRleHRcIlxuICBbc2hvd0Vycm9yc109XCJuZ0NvbnRyb2wudG91Y2hlZCB8fCBuZ0NvbnRyb2wuZGlydHlcIlxuPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktZm9ybS1lcnJvclwiIC8+XG48L3NreS1mb3JtLWVycm9ycz5cbiJdfQ==
|
|
501
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBR04sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixvQ0FBb0MsRUFDcEMsc0JBQXNCLEdBQ3ZCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFB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QURyQixLQUFLO2dCQW9CSyxjQUFjO3NCQUR4QixLQUFLO2dCQWdCSyxpQkFBaUI7c0JBRDNCLEtBQUs7Z0JBWUMsU0FBUztzQkFEZixTQUFTO3VCQUFDLFFBQVE7Z0JBc0RaLGdCQUFnQjtzQkFKdEIsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRTt3QkFDN0IsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2dCQU1NLGdCQUFnQjtzQkFEdEIsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBTTlCLE9BQU87c0JBRGIsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIFNreUNvcmVBZGFwdGVyU2VydmljZSxcbiAgU2t5Rm9ybXNVdGlsaXR5LFxuICBTa3lJZE1vZHVsZSxcbiAgU2t5SWRTZXJ2aWNlLFxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCxcbiAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgU2t5Rm9ybUZpZWxkTGFiZWxUZXh0UmVxdWlyZWRTZXJ2aWNlLFxuICBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlLFxufSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5VG9vbGJhck1vZHVsZSB9IGZyb20gJ0Bza3l1eC9sYXlvdXQnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVRleHRFZGl0b3JSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvc2t5LXRleHQtZWRpdG9yLXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBGT05UX0xJU1RfREVGQVVMVFMgfSBmcm9tICcuL2RlZmF1bHRzL2ZvbnQtbGlzdC1kZWZhdWx0cyc7XG5pbXBvcnQgeyBGT05UX1NJWkVfTElTVF9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvZm9udC1zaXplLWxpc3QtZGVmYXVsdHMnO1xuaW1wb3J0IHsgTElOS19XSU5ET1dfT1BUSU9OU19ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvbGluay13aW5kb3ctb3B0aW9ucy1kZWZhdWx0cyc7XG5pbXBvcnQgeyBNRU5VX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9tZW51LWRlZmF1bHRzJztcbmltcG9ydCB7IFNUWUxFX1NUQVRFX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9zdHlsZS1zdGF0ZS1kZWZhdWx0cyc7XG5pbXBvcnQgeyBUT09MQkFSX0FDVElPTl9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvdG9vbGJhci1hY3Rpb24tZGVmYXVsdHMnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lbnViYXJDb21wb25lbnQgfSBmcm9tICcuL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRTYW5pdGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LXNhbml0aXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyL3RleHQtZWRpdG9yLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JGb250IH0gZnJvbSAnLi90eXBlcy9mb250LXN0YXRlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGUgfSBmcm9tICcuL3R5cGVzL2xpbmstd2luZG93LW9wdGlvbnMtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVudVR5cGUgfSBmcm9tICcuL3R5cGVzL21lbnUtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB9IGZyb20gJy4vdHlwZXMvc3R5bGUtc3RhdGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lcmdlRmllbGQgfSBmcm9tICcuL3R5cGVzL3RleHQtZWRpdG9yLW1lcmdlLWZpZWxkJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZSB9IGZyb20gJy4vdHlwZXMvdG9vbGJhci1hY3Rpb24tdHlwZSc7XG5cbi8qKlxuICogVGhlIHRleHQgZWRpdG9yIGNvbXBvbmVudCBsZXRzIHVzZXJzIGZvcm1hdCBhbmQgbWFuaXB1bGF0ZSB0ZXh0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdza3ktdGV4dC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2t5VGV4dEVkaXRvclNlcnZpY2UsXG4gICAgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UsXG4gICAgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgU2t5SWRNb2R1bGUsXG4gICAgU2t5VGV4dEVkaXRvck1lbnViYXJDb21wb25lbnQsXG4gICAgU2t5VGV4dEVkaXRvclRvb2xiYXJDb21wb25lbnQsXG4gICAgU2t5VG9vbGJhck1vZHVsZSxcbiAgICBTa3lGb3JtRXJyb3JzTW9kdWxlLFxuICAgIFNreVRleHRFZGl0b3JSZXNvdXJjZXNNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHV0IGZvY3VzIG9uIHRoZSBlZGl0b3IgYWZ0ZXIgaXQgcmVuZGVycy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhdXRvZm9jdXM6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSB0ZXh0IGVkaXRvciBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZSB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZSB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy5cbiAgICogVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcywgdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29lcmNlZFZhbHVlID0gU2t5Rm9ybXNVdGlsaXR5LmNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKGNvZXJjZWRWYWx1ZSAhPT0gdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy4jX2Rpc2FibGVkID0gY29lcmNlZFZhbHVlO1xuXG4gICAgICAvLyBVcGRhdGUgZm9jdXNhYmxlQ2hpbGRyZW4gaW5zaWRlIHRoZSBpZnJhbWUuXG4gICAgICBsZXQgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W107XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMuaWZyYW1lUmVmKSB7XG4gICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuID0gdGhpcy4jY29yZUFkYXB0ZXJTZXJ2aWNlLmdldEZvY3VzYWJsZUNoaWxkcmVuKFxuICAgICAgICAgIHRoaXMuaWZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50LmJvZHksXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWdub3JlVmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZVRhYkluZGV4OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMuI19kaXNhYmxlZCkge1xuICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmRpc2FibGVFZGl0b3IoXG4gICAgICAgICAgICBmb2N1c2FibGVDaGlsZHJlbixcbiAgICAgICAgICAgIHRoaXMuaWZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5lbmFibGVFZGl0b3IoXG4gICAgICAgICAgICBmb2N1c2FibGVDaGlsZHJlbixcbiAgICAgICAgICAgIHRoaXMuaWZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbnRzIHRvIGluY2x1ZGUgaW4gdGhlIGZvbnQgcGlja2VyLlxuICAgKiBAZGVmYXVsdCBbe25hbWU6ICdCbGFja2JhdWQgU2FucycsIHZhbHVlOiAnXCJCbGFja2JhdWQgU2Fuc1wiLCBBcmlhbCwgc2Fucy1zZXJpZid9LCB7bmFtZTogJ0FyaWFsJywgdmFsdWU6ICdBcmlhbCd9LCB7bmFtZTogJ0FyaWFsIEJsYWNrJywgdmFsdWU6ICdcIkFyaWFsIEJsYWNrXCInfSwge25hbWU6ICdDb3VyaWVyIE5ldycsIHZhbHVlOiAnXCJDb3VyaWVyIE5ld1wiJ30sIHtuYW1lOiAnR2VvcmdpYScsIHZhbHVlOiAnR2VvcmdpYSwgc2VyaWYnfSwge25hbWU6ICdUYWhvbWEnLCB2YWx1ZTogJ1RhaG9tYSwgR2VuZXZhLCBzYW5zLXNlcmlmJ30sIHtuYW1lOiAnVGltZXMgTmV3IFJvbWFuJywgdmFsdWU6ICdcIlRpbWVzIE5ldyBSb21hblwiJ30sIHtuYW1lOiAnVHJlYnVjaGV0IE1TJywgdmFsdWU6ICdcIlRyZWJ1Y2hldCBNU1wiLCBzYW5zLXNlcmlmJ30sIHtuYW1lOiAnVmVyZGFuYScsIHZhbHVlOiAnVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmJ31dXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZvbnRMaXN0KHZhbHVlOiBTa3lUZXh0RWRpdG9yRm9udFtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2ZvbnRMaXN0ID0gdmFsdWUgfHwgRk9OVF9MSVNUX0RFRkFVTFRTO1xuICB9XG5cbiAgcHVibGljIGdldCBmb250TGlzdCgpOiBTa3lUZXh0RWRpdG9yRm9udFtdIHtcbiAgICByZXR1cm4gdGhpcy4jX2ZvbnRMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb250IHNpemVzIHRvIGluY2x1ZGUgaW4gdGhlIGZvbnQgc2l6ZSBwaWNrZXIuXG4gICAqIEBkZWZhdWx0IFs2LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzYsIDQ4XVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmb250U2l6ZUxpc3QodmFsdWU6IG51bWJlcltdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2ZvbnRTaXplTGlzdCA9IHZhbHVlIHx8IEZPTlRfU0laRV9MSVNUX0RFRkFVTFRTO1xuICB9XG5cbiAgcHVibGljIGdldCBmb250U2l6ZUxpc3QoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLiNfZm9udFNpemVMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFtQZXJzaXN0ZW50IGlubGluZSBoZWxwIHRleHRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvZGVzaWduL2d1aWRlbGluZXMvdXNlci1hc3Npc3RhbmNlI2lubGluZS1oZWxwKSB0aGF0IHByb3ZpZGVzXG4gICAqIGFkZGl0aW9uYWwgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICogQHByZXZpZXdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaW50VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIGF0dHJpYnV0ZSBmb3IgdGhlIHRleHQgZWRpdG9yLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgY29tcG9uZW50IGdlbmVyYXRlcyBhIHJhbmRvbSBJRC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI2lkID0gdmFsdWUgfHwgdGhpcy4jZGVmYXVsdElkO1xuICB9XG5cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBzdHlsZXMgZm9yIGFsbCBjb250ZW50LCBpbmNsdWRpbmcgYmFja2dyb3VuZCBjb2xvciwgZm9udCBzaXplLCBhbmQgbGluayBzdGF0ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW5pdGlhbFN0eWxlU3RhdGUoc3RhdGU6IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgLy8gRG8gbm90IHVwZGF0ZSB0aGUgc3RhdGUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gaGFzIHRha2VuIHBsYWNlXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIXRoaXMuI2luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLiNfaW5pdGlhbFN0eWxlU3RhdGUgPSB7XG4gICAgICAgIC4uLlNUWUxFX1NUQVRFX0RFRkFVTFRTLFxuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBpbml0aWFsU3R5bGVTdGF0ZSgpOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuI19pbml0aWFsU3R5bGVTdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byBkaXNwbGF5IGFzIHRoZSB0ZXh0IGVkaXRvcidzIGxhYmVsLlxuICAgKiBAcHJldmlld1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBsYWJlbFRleHQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19sYWJlbFRleHQgPSB2YWx1ZTtcbiAgICB0aGlzLiN1cGRhdGVBMTF5QXR0cmlidXRlcygpO1xuICB9XG5cbiAgcHVibGljIGdldCBsYWJlbFRleHQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2xhYmVsVGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWVudXMgdG8gaW5jbHVkZSBpbiB0aGUgbWVudSBiYXIuXG4gICAqIEBkZWZhdWx0IFsgJ2VkaXQnLCAnZm9ybWF0JyBdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1lbnVzKHZhbHVlOiBTa3lUZXh0RWRpdG9yTWVudVR5cGVbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tZW51cyA9IHZhbHVlIHx8IE1FTlVfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lbnVzKCk6IFNreVRleHRFZGl0b3JNZW51VHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jX21lbnVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtZXJnZSBmaWVsZHMgdG8gaW5jbHVkZSBpbiB0aGUgbWVyZ2UgZmllbGQgbWVudS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWVyZ2VGaWVsZHModmFsdWU6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWVyZ2VGaWVsZHMgPSB2YWx1ZSB8fCBbXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWVyZ2VGaWVsZHMoKTogU2t5VGV4dEVkaXRvck1lcmdlRmllbGRbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19tZXJnZUZpZWxkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IHRvIGRpc3BsYXkgd2hlbiB0aGUgdGV4dCBlbnRyeSBhcmVhIGlzIGVtcHR5LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodmFsdWUgIT09IHRoaXMuI19wbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy4jX3BsYWNlaG9sZGVyID0gdmFsdWUgfHwgJyc7XG4gICAgICBpZiAodGhpcy4jaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0UGxhY2Vob2xkZXIodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX3BsYWNlaG9sZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhY3Rpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHRvb2xiYXIgaW4gdGhlIHNwZWNpZmllZCBvcmRlci5cbiAgICogQGRlZmF1bHQgWyAnZm9udC1mYW1pbHknLCAnZm9udC1zaXplJywgJ2ZvbnQtc3R5bGUnLCAnY29sb3InLCAnbGlzdCcsICdsaW5rIF1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdG9vbGJhckFjdGlvbnMoXG4gICAgdmFsdWU6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICB0aGlzLiNfdG9vbGJhckFjdGlvbnMgPSB2YWx1ZSB8fCBUT09MQkFSX0FDVElPTl9ERUZBVUxUUztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG9vbGJhckFjdGlvbnMoKTogU2t5VGV4dEVkaXRvclRvb2xiYXJBY3Rpb25UeXBlW10ge1xuICAgIHJldHVybiB0aGlzLiNfdG9vbGJhckFjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRhcmdldCB3aW5kb3cgb3B0aW9ucyBmb3IgYWRkaW5nIGEgaHlwZXJsaW5rLlxuICAgKiBAZGVmYXVsdCBbICduZXcnLCAnZXhpc3RpbmcnIF1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGlua1dpbmRvd09wdGlvbnMoXG4gICAgdmFsdWU6IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGVbXSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy4jX2xpbmtXaW5kb3dPcHRpb25zID0gdmFsdWUgPz8gTElOS19XSU5ET1dfT1BUSU9OU19ERUZBVUxUUztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGlua1dpbmRvd09wdGlvbnMoKTogU2t5VGV4dEVkaXRvckxpbmtXaW5kb3dPcHRpb25zVHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jX2xpbmtXaW5kb3dPcHRpb25zO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnaWZyYW1lJylcbiAgcHVibGljIGlmcmFtZVJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGludGVybmFsIHZhbHVlIG9mIHRoZSBjb250cm9sLlxuICAgKi9cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgLy8gTm9ybWFsaXplIHZhbHVlIGFuZCBzZXQgYW55IGVtcHR5IHN0YXRlIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICBsZXQgbm9ybWFsaXplZFZhbHVlOiBzdHJpbmc7XG4gICAgY29uc3QgdmFsdWVUcmltbWVkID0gdmFsdWU/LnRyaW0oKTtcblxuICAgIGlmIChcbiAgICAgICF2YWx1ZSB8fFxuICAgICAgdmFsdWVUcmltbWVkID09PSAnPHA+PC9wPicgfHxcbiAgICAgIHZhbHVlVHJpbW1lZCA9PT0gJzxicj4nIHx8XG4gICAgICB2YWx1ZVRyaW1tZWQgPT09ICc8cD48YnI+PC9wPidcbiAgICApIHtcbiAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3JtYWxpemVkVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVkVmFsdWUgPSB0aGlzLiNzYW5pdGl6YXRpb25TZXJ2aWNlXG4gICAgICAuc2FuaXRpemUobm9ybWFsaXplZFZhbHVlKVxuICAgICAgLnRyaW0oKTtcblxuICAgIGlmICh0aGlzLiNfdmFsdWUgIT09IG5vcm1hbGl6ZWRWYWx1ZSkge1xuICAgICAgdGhpcy4jX3ZhbHVlID0gbm9ybWFsaXplZFZhbHVlO1xuXG4gICAgICAvLyBVcGRhdGUgYW5ndWxhciBmb3JtIGNvbnRyb2wgaWYgbW9kZWwgaGFzIGJlZW4gbm9ybWFsaXplZC5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubmdDb250cm9sPy5jb250cm9sICYmXG4gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSAhPT0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbC52YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplZFZhbHVlLCB7XG4gICAgICAgICAgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vICNpbml0SWZyYW1lKCkgd2lsbCBkbyBhbm90aGVyIGNoZWNrIGxhdGVyIHRvIHNlZSBpZiB0aGUgZWRpdG9yIHNob3VsZFxuICAgICAgLy8gcmVjZWl2ZSBmb2N1cyBpZiBub3QgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgaXMgY2FsbGVkLlxuICAgICAgdGhpcy4jY2hlY2tBdXRvZm9jdXNBbmRGb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRUZW1wbGF0ZVJlZicsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHB1YmxpYyBpbnB1dFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZWRpdG9yRm9jdXNTdHJlYW0gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2t5LWZvcm0tY29udHJvbCcpXG4gIHB1YmxpYyBmb3JtQ29udHJvbENsYXNzID0gISFpbmplY3QoU2t5SW5wdXRCb3hIb3N0U2VydmljZSwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKVxuICBwdWJsaWMgZGlzcGxheTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBlZGl0b3JGb2N1c2VkID0gZmFsc2U7XG5cbiAgI2RlZmF1bHRJZDogc3RyaW5nO1xuICAjaWQ6IHN0cmluZztcbiAgI2ZvY3VzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgI2luaXRpYWxpemVkID0gZmFsc2U7XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2ZvbnRMaXN0ID0gRk9OVF9MSVNUX0RFRkFVTFRTO1xuICAjX2ZvbnRTaXplTGlzdCA9IEZPTlRfU0laRV9MSVNUX0RFRkFVTFRTO1xuICAjX2xhYmVsVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjX21lcmdlRmllbGRzOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZFtdID0gW107XG4gICNfbWVudXMgPSBNRU5VX0RFRkFVTFRTO1xuICAjX3Rvb2xiYXJBY3Rpb25zOiBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGVbXSA9IFRPT0xCQVJfQUNUSU9OX0RFRkFVTFRTO1xuICAjX2xpbmtXaW5kb3dPcHRpb25zID0gTElOS19XSU5ET1dfT1BUSU9OU19ERUZBVUxUUztcbiAgI19kaXNhYmxlZCA9IGZhbHNlO1xuICAjX2luaXRpYWxTdHlsZVN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgU1RZTEVfU1RBVEVfREVGQVVMVFMpO1xuICAjX3BsYWNlaG9sZGVyID0gJyc7XG4gICNfdmFsdWUgPSAnPHA+PC9wPic7XG5cbiAgcmVhZG9ubHkgI2FkYXB0ZXJTZXJ2aWNlID0gaW5qZWN0KFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSk7XG4gIHJlYWRvbmx5ICNjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHJlYWRvbmx5ICNjb3JlQWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5Q29yZUFkYXB0ZXJTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2VkaXRvclNlcnZpY2UgPSBpbmplY3QoU2t5VGV4dEVkaXRvclNlcnZpY2UpO1xuICByZWFkb25seSAjaWRTdmMgPSBpbmplY3QoU2t5SWRTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI3Nhbml0aXphdGlvblNlcnZpY2UgPSBpbmplY3QoU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2UpO1xuICByZWFkb25seSAjem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIHJlYWRvbmx5ICNsYWJlbFRleHRSZXF1aXJlZCA9IGluamVjdChTa3lGb3JtRmllbGRMYWJlbFRleHRSZXF1aXJlZFNlcnZpY2UsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVycm9ySWQgPSB0aGlzLiNpZFN2Yy5nZW5lcmF0ZUlkKCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBuZ0NvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNpZCA9IHRoaXMuI2RlZmF1bHRJZCA9IHRoaXMuI2lkU3ZjLmdlbmVyYXRlSWQoKTtcbiAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jaW5pdElmcmFtZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNsYWJlbFRleHRSZXF1aXJlZCAmJiAhdGhpcy5sYWJlbFRleHQpIHtcbiAgICAgIHRoaXMuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gICAgdGhpcy4jbGFiZWxUZXh0UmVxdWlyZWQ/LnZhbGlkYXRlTGFiZWxUZXh0KHRoaXMubGFiZWxUZXh0KTtcbiAgfVxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UucmVtb3ZlT2JzZXJ2ZXJzKHRoaXMuI2VkaXRvclNlcnZpY2UuZWRpdG9yKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgb25JZnJhbWVMb2FkKCk6IHZvaWQge1xuICAgIC8vIFJlaW5pdGlhbGl6ZSB0aGUgZWRpdG9yIGlmIGl0IGFscmVhZHkgZXhpc3RzIHRvIGNvdmVyIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHRleHQgZWRpdG9yIG1pZ2h0IGhhdmUgYmVlbiBtb3ZlZCBpbiB0aGUgRE9NLlxuICAgIGlmICh0aGlzLiNlZGl0b3JTZXJ2aWNlLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuI2luaXRJZnJhbWUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICAvLyBVcGRhdGUgSFRNTCBpZiBuZWNlc3NhcnkuXG4gICAgaWYgKHRoaXMuI2luaXRpYWxpemVkKSB7XG4gICAgICBjb25zdCBlZGl0b3JWYWx1ZSA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldEVkaXRvcklubmVySHRtbCgpO1xuICAgICAgaWYgKGVkaXRvclZhbHVlICE9PSB0aGlzLiNfdmFsdWUpIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0RWRpdG9ySW5uZXJIdG1sKHRoaXMuI192YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNfb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAjY2hlY2tBdXRvZm9jdXNBbmRGb2N1cygpOiB2b2lkIHtcbiAgICAvLyBEb24ndCBzZXQgZm9jdXMgb24gdGhlIGVkaXRvciBpZiB0aGUgaWZyYW1lIGlzbid0IGluaXRpYWxpemVkLlxuICAgIC8vIEF1dG9mb2N1cyBpc24ndCB0ZXN0YWJsZSBpbiBGaXJlZm94IGFuZCBJRS5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cyAmJiB0aGlzLiNpbml0aWFsaXplZCAmJiAhdGhpcy4jZm9jdXNJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZm9jdXNFZGl0b3IoKTtcbiAgICAgIHRoaXMuI2ZvY3VzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVTdHlsZSgpOiB2b2lkIHtcbiAgICB0aGlzLiNfaW5pdGlhbFN0eWxlU3RhdGUgPSB7XG4gICAgICAuLi50aGlzLiNfaW5pdGlhbFN0eWxlU3RhdGUsXG4gICAgICAuLi50aGlzLiNhZGFwdGVyU2VydmljZS5nZXRTdHlsZVN0YXRlKCksXG4gICAgfTtcbiAgfVxuXG4gICNpbml0SWZyYW1lKCk6IHZvaWQge1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmluaXRFZGl0b3IoXG4gICAgICB0aGlzLmlkLFxuICAgICAgKHRoaXMuaWZyYW1lUmVmIGFzIEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLmluaXRpYWxTdHlsZVN0YXRlLFxuICAgICAgdGhpcy5wbGFjZWhvbGRlcixcbiAgICApO1xuXG4gICAgdGhpcy5uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiN1cGRhdGVBMTF5QXR0cmlidXRlcygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNlZGl0b3JTZXJ2aWNlXG4gICAgICAuaW5wdXRMaXN0ZW5lcigpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHJ1biBjaGFuZ2UgZGV0ZWN0aW9uIGZvciBjaGFuZ2VzIG9yaWdpbmF0aW5nIGluc2lkZSBhbiBpZnJhbWUsXG4gICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gY2FsbCB0aGUgb25DaGFuZ2UoKSBldmVudCBpbnNpZGUgTmdab25lIHRvIGZvcmNlIGNoYW5nZSBwcm9wYWdhdGlvbiB0byBjb25zdW1pbmcgY29tcG9uZW50cy5cbiAgICAgICAgdGhpcy4jem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI3ZpZXdUb01vZGVsVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNlZGl0b3JTZXJ2aWNlXG4gICAgICAuc2VsZWN0aW9uQ2hhbmdlTGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI3VwZGF0ZVN0eWxlKCk7XG4gICAgICAgIHRoaXMuZWRpdG9yRm9jdXNTdHJlYW0ubmV4dCgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNlZGl0b3JTZXJ2aWNlXG4gICAgICAuY2xpY2tMaXN0ZW5lcigpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5lZGl0b3JGb2N1c1N0cmVhbS5uZXh0KCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuI2VkaXRvclNlcnZpY2VcbiAgICAgIC5ibHVyTGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBydW4gY2hhbmdlIGRldGVjdGlvbiBmb3IgY2hhbmdlcyBvcmlnaW5hdGluZyBpbnNpZGUgYW4gaWZyYW1lLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHJ1biBtYXJrRm9yQ2hlY2soKSBpbnNpZGUgdGhlIE5nWm9uZSB0byBmb3JjZSBjaGFuZ2UgcHJvcGFnYXRpb24gdG8gY29uc3VtaW5nIGNvbXBvbmVudHMuXG4gICAgICAgIHRoaXMuI3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiNfb25Ub3VjaGVkKCk7XG4gICAgICAgICAgdGhpcy5lZGl0b3JGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNlZGl0b3JTZXJ2aWNlXG4gICAgICAuY29tbWFuZENoYW5nZUxpc3RlbmVyKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiN1cGRhdGVTdHlsZSgpO1xuICAgICAgICB0aGlzLiN2aWV3VG9Nb2RlbFVwZGF0ZSgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNlZGl0b3JTZXJ2aWNlXG4gICAgICAuZm9jdXNMaXN0ZW5lcigpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHJ1biBjaGFuZ2UgZGV0ZWN0aW9uIGZvciBjaGFuZ2VzIG9yaWdpbmF0aW5nIGluc2lkZSBhbiBpZnJhbWUsXG4gICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gcnVuIG1hcmtGb3JDaGVjaygpIGluc2lkZSB0aGUgTmdab25lIHRvIGZvcmNlIGNoYW5nZSBwcm9wYWdhdGlvbiB0byBjb25zdW1pbmcgY29tcG9uZW50cy5cbiAgICAgICAgdGhpcy4jem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZWRpdG9yRm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRFZGl0b3JJbm5lckh0bWwodGhpcy4jX3ZhbHVlKTtcbiAgICB0aGlzLiN1cGRhdGVBMTF5QXR0cmlidXRlcygpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmZvY3VzRWRpdG9yKCk7XG4gICAgfVxuXG4gICAgdGhpcy4jaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuI2ZvY3VzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuI2NoZWNrQXV0b2ZvY3VzQW5kRm9jdXMoKTtcbiAgfVxuXG4gICN1cGRhdGVBMTF5QXR0cmlidXRlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jZWRpdG9yU2VydmljZS5pc0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRMYWJlbEF0dHJpYnV0ZSh0aGlzLmxhYmVsVGV4dCk7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRFcnJvckF0dHJpYnV0ZXMoXG4gICAgICAgIHRoaXMubGFiZWxUZXh0ID8gdGhpcy5lcnJvcklkIDogJycsXG4gICAgICAgIHRoaXMubmdDb250cm9sLmVycm9ycyxcbiAgICAgICk7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRSZXF1aXJlZEF0dHJpYnV0ZShcbiAgICAgICAgU2t5Rm9ybXNVdGlsaXR5Lmhhc1JlcXVpcmVkVmFsaWRhdGlvbih0aGlzLm5nQ29udHJvbCksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICN2aWV3VG9Nb2RlbFVwZGF0ZShlbWl0Q2hhbmdlID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRFZGl0b3JJbm5lckh0bWwoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlbWl0Q2hhbmdlKSB7XG4gICAgICB0aGlzLiNfb25DaGFuZ2UodGhpcy4jX3ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAjX29uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIH07XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgI19vbkNoYW5nZTogKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdmFsdWU6IGFueSxcbiAgKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgfTtcbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3JcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3NreS10ZXh0LWVkaXRvci1kaXNhYmxlZCc6IGRpc2FibGVkLFxuICAgICdza3ktdGV4dC1lZGl0b3Itd3JhcHBlci1mb2N1c2VkJzogZWRpdG9yRm9jdXNlZCxcbiAgICAnc2t5LXRleHQtZWRpdG9yLWludmFsaWQnOiBuZ0NvbnRyb2wuZXJyb3JzLFxuICAgICdza3ktbWFyZ2luLXN0YWNrZWQteHMnOiAhIWhpbnRUZXh0XG4gIH1cIlxuPlxuICA8ZGl2IGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWxhYmVsLXdyYXBwZXJcIj5cbiAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFRleHRcIiBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsXCI+e3sgbGFiZWxUZXh0IH19PC9sYWJlbD5cbiAgPC9kaXY+XG4gIDxza3ktdG9vbGJhclxuICAgICpuZ0lmPVwiXG4gICAgICAobWVudXMgJiYgbWVudXMubGVuZ3RoKSA+IDAgfHxcbiAgICAgICh0b29sYmFyQWN0aW9ucyAmJiB0b29sYmFyQWN0aW9ucy5sZW5ndGggPiAwKVxuICAgIFwiXG4gICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItdG9vbGJhclwiXG4gID5cbiAgICA8c2t5LXRvb2xiYXItc2VjdGlvblxuICAgICAgKm5nSWY9XCJtZW51cyAmJiBtZW51cy5sZW5ndGggPiAwXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJUZXh0IGZvcm1hdHRpbmdcIlxuICAgICAgY2xhc3M9XCJtZW51YmFyXCJcbiAgICAgIHJvbGU9XCJ0b29sYmFyXCJcbiAgICA+XG4gICAgICA8c2t5LXRleHQtZWRpdG9yLW1lbnViYXJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2VkaXRvckZvY3VzU3RyZWFtXT1cImVkaXRvckZvY3VzU3RyZWFtXCJcbiAgICAgICAgW21lbnVzXT1cIm1lbnVzXCJcbiAgICAgICAgW21lcmdlRmllbGRzXT1cIm1lcmdlRmllbGRzXCJcbiAgICAgID5cbiAgICAgIDwvc2t5LXRleHQtZWRpdG9yLW1lbnViYXI+XG4gICAgPC9za3ktdG9vbGJhci1zZWN0aW9uPlxuICAgIDxza3ktdG9vbGJhci1zZWN0aW9uXG4gICAgICAqbmdJZj1cInRvb2xiYXJBY3Rpb25zICYmIHRvb2xiYXJBY3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgYXJpYS1sYWJlbD1cIlRleHQgZm9ybWF0dGluZ1wiXG4gICAgICBjbGFzcz1cInRvb2xiYXJcIlxuICAgICAgcm9sZT1cInRvb2xiYXJcIlxuICAgID5cbiAgICAgIDxza3ktdGV4dC1lZGl0b3ItdG9vbGJhclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbZWRpdG9yRm9jdXNTdHJlYW1dPVwiZWRpdG9yRm9jdXNTdHJlYW1cIlxuICAgICAgICBbZm9udExpc3RdPVwiZm9udExpc3RcIlxuICAgICAgICBbZm9udFNpemVMaXN0XT1cImZvbnRTaXplTGlzdFwiXG4gICAgICAgIFtsaW5rV2luZG93T3B0aW9uc109XCJsaW5rV2luZG93T3B0aW9uc1wiXG4gICAgICAgIFt0b29sYmFyQWN0aW9uc109XCJ0b29sYmFyQWN0aW9uc1wiXG4gICAgICAgIFtzdHlsZVN0YXRlXT1cImluaXRpYWxTdHlsZVN0YXRlXCJcbiAgICAgID5cbiAgICAgIDwvc2t5LXRleHQtZWRpdG9yLXRvb2xiYXI+XG4gICAgPC9za3ktdG9vbGJhci1zZWN0aW9uPlxuICA8L3NreS10b29sYmFyPlxuICA8aWZyYW1lXG4gICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3Itd3JhcHBlclwiXG4gICAgc3JjPVwiYWJvdXQ6YmxhbmtcIlxuICAgIFthdHRyLnRpdGxlXT1cIlxuICAgICAgbGFiZWxUZXh0IHx8ICgnc2t5dXhfdGV4dF9lZGl0b3JfaWZyYW1lX3RpdGxlX2RlZmF1bHQnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgIFwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJoaW50VGV4dCA/IGhpbnRUZXh0RWwuaWQgOiB1bmRlZmluZWRcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktdGV4dC1lZGl0b3Itd3JhcHBlci1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgfVwiXG4gICAgKGxvYWQpPVwib25JZnJhbWVMb2FkKClcIlxuICAgICNpZnJhbWVcbiAgICBhbGxvdz1cImNsaXBib2FyZC1yZWFkICo7IGNsaXBib2FyZC13cml0ZSAqXCJcbiAgPlxuICA8L2lmcmFtZT5cbjwvZGl2PlxuPGRpdlxuICBza3lJZFxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3NreS1mb250LWRlZW1waGFzaXplZCBza3ktdGV4dC1lZGl0b3ItaGludC10ZXh0JzogISFoaW50VGV4dFxuICB9XCJcbiAgI2hpbnRUZXh0RWw9XCJza3lJZFwiXG4+XG4gIHt7IGhpbnRUZXh0IH19XG48L2Rpdj5cbjxza3ktZm9ybS1lcnJvcnNcbiAgKm5nSWY9XCJsYWJlbFRleHQgJiYgbmdDb250cm9sPy5lcnJvcnNcIlxuICBbaWRdPVwiZXJyb3JJZFwiXG4gIFtlcnJvcnNdPVwibmdDb250cm9sLmVycm9yc1wiXG4gIFtsYWJlbFRleHRdPVwibGFiZWxUZXh0XCJcbiAgW3Nob3dFcnJvcnNdPVwibmdDb250cm9sLnRvdWNoZWQgfHwgbmdDb250cm9sLmRpcnR5XCJcbj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LWZvcm0tZXJyb3JcIiAvPlxuPC9za3ktZm9ybS1lcnJvcnM+XG4iXX0=
|