@skyux/forms 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 +4045 -2940
- package/esm2022/index.mjs +2 -1
- package/esm2022/lib/modules/checkbox/checkbox-group.component.mjs +20 -5
- package/esm2022/lib/modules/checkbox/checkbox-label-text-label.component.mjs +3 -3
- package/esm2022/lib/modules/checkbox/checkbox.component.mjs +27 -7
- package/esm2022/lib/modules/checkbox/checkbox.module.mjs +9 -2
- package/esm2022/lib/modules/field-group/field-group.component.mjs +14 -3
- package/esm2022/lib/modules/file-attachment/file-attachment.component.mjs +19 -5
- package/esm2022/lib/modules/file-attachment/file-drop.component.mjs +19 -5
- package/esm2022/lib/modules/input-box/input-box.component.mjs +14 -2
- package/esm2022/lib/modules/radio/radio-group.component.mjs +23 -6
- package/esm2022/lib/modules/radio/radio.component.mjs +21 -4
- package/esm2022/lib/modules/shared/form-field-label-text-required.service.mjs +19 -0
- package/esm2022/lib/modules/toggle-switch/toggle-switch.component.mjs +17 -3
- package/esm2022/testing/checkbox/checkbox-harness.mjs +52 -12
- package/fesm2022/skyux-forms-testing.mjs +51 -11
- package/fesm2022/skyux-forms-testing.mjs.map +1 -1
- package/fesm2022/skyux-forms.mjs +179 -41
- package/fesm2022/skyux-forms.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/modules/checkbox/checkbox-group.component.d.ts +21 -1
- package/lib/modules/checkbox/checkbox.component.d.ts +22 -2
- package/lib/modules/checkbox/checkbox.module.d.ts +4 -3
- package/lib/modules/field-group/field-group.component.d.ts +21 -1
- package/lib/modules/file-attachment/file-attachment.component.d.ts +9 -2
- package/lib/modules/file-attachment/file-drop.component.d.ts +4 -2
- package/lib/modules/input-box/input-box.component.d.ts +1 -0
- package/lib/modules/radio/radio-group.component.d.ts +11 -3
- package/lib/modules/radio/radio.component.d.ts +11 -3
- package/lib/modules/shared/form-field-label-text-required.service.d.ts +10 -0
- package/lib/modules/toggle-switch/toggle-switch.component.d.ts +4 -2
- package/package.json +8 -8
- package/testing/checkbox/checkbox-harness.d.ts +25 -2
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild, booleanAttribute, inject, } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, HostBinding, Input, Output, ViewChild, booleanAttribute, inject, } from '@angular/core';
|
|
2
2
|
import { SkyLiveAnnouncerService } from '@skyux/core';
|
|
3
3
|
import { SkyIdService } from '@skyux/core';
|
|
4
4
|
import { SkyLibResourcesService } from '@skyux/i18n';
|
|
5
5
|
import { take } from 'rxjs/operators';
|
|
6
6
|
import { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';
|
|
7
|
+
import { SkyFormFieldLabelTextRequiredService } from '../shared/form-field-label-text-required.service';
|
|
7
8
|
import { SkyFileAttachmentService } from './file-attachment.service';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@angular/common";
|
|
@@ -73,6 +74,9 @@ export class SkyFileDropComponent {
|
|
|
73
74
|
this.#liveAnnouncerSvc = inject(SkyLiveAnnouncerService);
|
|
74
75
|
this.#resourcesSvc = inject(SkyLibResourcesService);
|
|
75
76
|
this.#idSvc = inject(SkyIdService);
|
|
77
|
+
this.#labelTextRequired = inject(SkyFormFieldLabelTextRequiredService, {
|
|
78
|
+
optional: true,
|
|
79
|
+
});
|
|
76
80
|
this.errorId = this.#idSvc.generateId();
|
|
77
81
|
this.rejectedFiles = [];
|
|
78
82
|
}
|
|
@@ -103,6 +107,13 @@ export class SkyFileDropComponent {
|
|
|
103
107
|
#liveAnnouncerSvc;
|
|
104
108
|
#resourcesSvc;
|
|
105
109
|
#idSvc;
|
|
110
|
+
#labelTextRequired;
|
|
111
|
+
ngOnInit() {
|
|
112
|
+
if (this.#labelTextRequired && !this.labelText) {
|
|
113
|
+
this.display = 'none';
|
|
114
|
+
}
|
|
115
|
+
this.#labelTextRequired?.validateLabelText(this.labelText);
|
|
116
|
+
}
|
|
106
117
|
ngOnDestroy() {
|
|
107
118
|
this.filesChanged.complete();
|
|
108
119
|
this.linkChanged.complete();
|
|
@@ -243,17 +254,17 @@ export class SkyFileDropComponent {
|
|
|
243
254
|
}
|
|
244
255
|
}
|
|
245
256
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyFileDropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
246
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.3.4", type: SkyFileDropComponent, selector: "sky-file-drop", inputs: { fileUploadAriaLabel: "fileUploadAriaLabel", linkUploadAriaLabel: "linkUploadAriaLabel", minFileSize: "minFileSize", maxFileSize: "maxFileSize", multiple: "multiple", validateFn: "validateFn", acceptedTypes: "acceptedTypes", noClick: "noClick", allowLinks: "allowLinks", labelText: "labelText", labelHidden: ["labelHidden", "labelHidden", booleanAttribute], hintText: "hintText", required: ["required", "required", booleanAttribute] }, outputs: { filesChanged: "filesChanged", linkInputBlur: "linkInputBlur", linkChanged: "linkChanged" }, providers: [
|
|
257
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.3.4", type: SkyFileDropComponent, selector: "sky-file-drop", inputs: { fileUploadAriaLabel: "fileUploadAriaLabel", linkUploadAriaLabel: "linkUploadAriaLabel", minFileSize: "minFileSize", maxFileSize: "maxFileSize", multiple: "multiple", validateFn: "validateFn", acceptedTypes: "acceptedTypes", noClick: "noClick", allowLinks: "allowLinks", labelText: "labelText", labelHidden: ["labelHidden", "labelHidden", booleanAttribute], hintText: "hintText", required: ["required", "required", booleanAttribute] }, outputs: { filesChanged: "filesChanged", linkInputBlur: "linkInputBlur", linkChanged: "linkChanged" }, host: { properties: { "style.display": "this.display" } }, providers: [
|
|
247
258
|
SkyFileAttachmentService,
|
|
248
259
|
{ provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
|
|
249
|
-
], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<fieldset>\n <legend\n *ngIf=\"labelText\"\n class=\"sky-control-label sky-font-body-default sky-margin-stacked-xs\"\n [ngClass]=\"{\n 'sky-screen-reader-only': labelHidden,\n 'sky-control-label-required': required\n }\"\n >\n {{ labelText\n }}<span class=\"sky-screen-reader-only\" *ngIf=\"required\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n </legend>\n <div\n class=\"sky-file-drop-row\"\n [ngClass]=\"{ 'sky-file-drop-allow-links': allowLinks }\"\n >\n <div\n class=\"sky-file-drop-col\"\n [ngClass]=\"{\n 'sky-file-drop-accept': acceptedOver,\n 'sky-file-drop-reject': rejectedOver\n }\"\n >\n <button\n class=\"sky-file-drop sky-file-drop-target\"\n type=\"button\"\n (click)=\"dropClicked()\"\n (dragover)=\"fileDragOver($event)\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n [attr.aria-label]=\"\n fileUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_drag_or_click' | skyLibResources)\n \"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n ></button>\n\n <input\n tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"file\"\n class=\"sky-file-input-hidden\"\n [attr.multiple]=\"multiple ? multiple : null\"\n [attr.accept]=\"acceptedTypes ? acceptedTypes : null\"\n (change)=\"fileChangeEvent($event)\"\n #fileInput\n />\n\n <div\n class=\"sky-file-drop-contents sky-padding-even-default\"\n *ngIf=\"customEl.children.length === 0\"\n >\n <div class=\"sky-file-drop-contents-not-over\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_drag_file_here'\n | skyLibResources\n }}\n </div>\n <div class=\"sky-file-drop-text\">\n {{\n 'skyux_file_attachment_file_upload_or_click_to_browse'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"cloud-upload\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is valid -->\n <div class=\"sky-file-drop-contents-accept\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_drop_files_here'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"bullseye\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is invalid -->\n <div class=\"sky-file-drop-contents-reject\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_invalid_file' | skyLibResources\n }}\n </div>\n <sky-icon icon=\"times-circle\" class=\"sky-file-upload-icon\" />\n </div>\n </div>\n\n <div class=\"sky-file-drop-contents-custom\" #customEl>\n <ng-content />\n </div>\n </div>\n <div class=\"sky-file-drop-col\" *ngIf=\"allowLinks\">\n <div class=\"sky-file-drop-contents sky-padding-even-default\">\n <div class=\"sky-file-drop-link\">\n <div class=\"sky-file-drop-link-header\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_link_label' | skyLibResources\n }}\n </div>\n </div>\n <div class=\"sky-margin-stacked-xs\">\n <input\n type=\"text\"\n class=\"sky-form-control\"\n [attr.aria-label]=\"\n linkUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_link_label'\n | skyLibResources)\n \"\n [attr.aria-describedby]=\"uploadHintText.id\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n [(ngModel)]=\"linkUrl\"\n (blur)=\"onLinkBlur()\"\n (keyup)=\"addLinkEnter($event)\"\n />\n </div>\n <div\n skyId\n #uploadHintText=\"skyId\"\n class=\"sky-font-deemphasized sky-file-drop-hint-text sky-margin-stacked-sm\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_placeholder'\n | skyLibResources\n }}\n </div>\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!linkUrl\"\n (click)=\"addLink($event)\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_done' | skyLibResources\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div skyId #hintTextEl=\"skyId\">\n <div *ngIf=\"hintText\" class=\"sky-font-deemphasized sky-file-drop-hint-text\">\n {{ hintText }}\n </div>\n </div>\n</fieldset>\n<sky-form-errors\n class=\"sky-file-drop-errors\"\n [id]=\"errorId\"\n [labelText]=\"labelText\"\n [showErrors]=\"rejectedFiles.length\"\n>\n <div *ngFor=\"let rejectedFile of rejectedFiles\">\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'fileType'\"\n errorName=\"fileType\"\n [errorText]=\"\n 'skyux_file_attachment_file_type_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'maxFileSize'\"\n errorName=\"maxFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'minFileSize'\"\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'validate' && rejectedFile.errorParam\"\n errorName=\"validate\"\n [errorText]=\"rejectedFile.file.name + ': ' + rejectedFile.errorParam\"\n />\n </div>\n</sky-form-errors>\n", styles: [".sky-file-drop-col{padding-left:5px;padding-right:5px;position:relative}:host .sky-file-drop-row{display:block}:host .sky-file-drop-col{flex-basis:auto}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-row,:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:block}:host-context(.sky-responsive-container-xs) .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}@media (min-width: 768px){:host .sky-file-drop-row{display:flex}:host .sky-file-drop-col{flex-basis:100%}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}}:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:flex}:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:100%}:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}button.sky-file-drop{height:100%;position:absolute;inset:0;z-index:1}button.sky-file-drop:hover{cursor:pointer}.sky-file-drop-contents{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;background-color:#eeeeef;color:#212327;cursor:pointer;width:100%;text-align:center;height:100%}.sky-file-drop-contents .sky-file-drop-link-header{margin-bottom:5px}.sky-file-drop-no-click .sky-file-drop-contents{cursor:default}.sky-file-drop-hint-text{text-align:left;margin-top:var(--sky-margin-stacked-xs)}.sky-file-drop-accept .sky-file-drop-contents,.sky-file-drop-reject .sky-file-drop-contents{border-style:dashed;border-width:1px}.sky-file-drop-accept .sky-file-drop-contents-not-over,.sky-file-drop-reject .sky-file-drop-contents-not-over{display:none}.sky-file-drop-accept .sky-file-drop-contents{border-color:#72bf44;color:#212327}.sky-file-drop-accept .sky-file-drop-contents-accept{display:block}.sky-file-drop-reject .sky-file-drop-contents{border-color:#ef4044;color:#212327}.sky-file-drop-reject .sky-file-drop-contents-reject{display:block}.sky-file-drop-contents-accept,.sky-file-drop-contents-reject{display:none}.sky-file-upload-icon{display:block;font-size:40px;max-height:40px;margin-top:10px}.sky-file-drop-link{cursor:default}.sky-file-drop-text-header{margin:0}.sky-file-drop-text{font-size:15px;margin-top:5px;margin-bottom:20px}.sky-file-drop-text,.sky-file-drop-text-header{line-height:1.1;display:block}.sky-file-upload-icon{color:#686c73}.sky-file-drop{background-color:transparent;border:none;display:block;-webkit-appearance:none;width:100%;padding:0}.sky-file-input-hidden{display:none}.sky-file-drop-errors{margin-bottom:var(--sky-margin-stacked-lg)}:host-context(.sky-theme-modern) .sky-control-label{color:var(--sky-text-color-deemphasized);font-size:13px}.sky-theme-modern .sky-control-label{color:var(--sky-text-color-deemphasized);font-size:13px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SkyFormErrorComponent, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "component", type: i4.SkyFormErrorsComponent, selector: "sky-form-errors", inputs: ["errors", "labelText", "showErrors"] }, { kind: "component", type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "directive", type: i6.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "pipe", type: i7.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
|
|
260
|
+
], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<fieldset>\n <legend\n *ngIf=\"labelText\"\n class=\"sky-control-label sky-font-body-default sky-margin-stacked-xs\"\n [ngClass]=\"{\n 'sky-screen-reader-only': labelHidden,\n 'sky-control-label-required': required\n }\"\n >\n {{ labelText\n }}<span class=\"sky-screen-reader-only\" *ngIf=\"required\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n </legend>\n <div\n class=\"sky-file-drop-row\"\n [ngClass]=\"{ 'sky-file-drop-allow-links': allowLinks }\"\n >\n <div\n class=\"sky-file-drop-col\"\n [ngClass]=\"{\n 'sky-file-drop-accept': acceptedOver,\n 'sky-file-drop-reject': rejectedOver\n }\"\n >\n <button\n class=\"sky-file-drop sky-file-drop-target\"\n type=\"button\"\n (click)=\"dropClicked()\"\n (dragover)=\"fileDragOver($event)\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n [attr.aria-label]=\"\n fileUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_drag_or_click' | skyLibResources)\n \"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n ></button>\n\n <input\n tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"file\"\n class=\"sky-file-input-hidden\"\n [attr.multiple]=\"multiple ? multiple : null\"\n [attr.accept]=\"acceptedTypes ? acceptedTypes : null\"\n (change)=\"fileChangeEvent($event)\"\n #fileInput\n />\n\n <div\n class=\"sky-file-drop-contents sky-padding-even-default\"\n *ngIf=\"customEl.children.length === 0\"\n >\n <div class=\"sky-file-drop-contents-not-over\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_drag_file_here'\n | skyLibResources\n }}\n </div>\n <div class=\"sky-file-drop-text\">\n {{\n 'skyux_file_attachment_file_upload_or_click_to_browse'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"cloud-upload\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is valid -->\n <div class=\"sky-file-drop-contents-accept\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_drop_files_here'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"bullseye\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is invalid -->\n <div class=\"sky-file-drop-contents-reject\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_invalid_file' | skyLibResources\n }}\n </div>\n <sky-icon icon=\"times-circle\" class=\"sky-file-upload-icon\" />\n </div>\n </div>\n\n <div class=\"sky-file-drop-contents-custom\" #customEl>\n <ng-content />\n </div>\n </div>\n <div class=\"sky-file-drop-col\" *ngIf=\"allowLinks\">\n <div class=\"sky-file-drop-contents sky-padding-even-default\">\n <div class=\"sky-file-drop-link\">\n <div class=\"sky-file-drop-link-header\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_link_label' | skyLibResources\n }}\n </div>\n </div>\n <div class=\"sky-margin-stacked-xs\">\n <input\n type=\"text\"\n class=\"sky-form-control\"\n [attr.aria-label]=\"\n linkUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_link_label'\n | skyLibResources)\n \"\n [attr.aria-describedby]=\"uploadHintText.id\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n [(ngModel)]=\"linkUrl\"\n (blur)=\"onLinkBlur()\"\n (keyup)=\"addLinkEnter($event)\"\n />\n </div>\n <div\n skyId\n #uploadHintText=\"skyId\"\n class=\"sky-font-deemphasized sky-file-drop-hint-text sky-margin-stacked-sm\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_placeholder'\n | skyLibResources\n }}\n </div>\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!linkUrl\"\n (click)=\"addLink($event)\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_done' | skyLibResources\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div skyId #hintTextEl=\"skyId\">\n <div *ngIf=\"hintText\" class=\"sky-font-deemphasized sky-file-drop-hint-text\">\n {{ hintText }}\n </div>\n </div>\n</fieldset>\n<sky-form-errors\n class=\"sky-file-drop-errors\"\n [id]=\"errorId\"\n [labelText]=\"labelText\"\n [showErrors]=\"rejectedFiles.length\"\n>\n <div *ngFor=\"let rejectedFile of rejectedFiles\">\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'fileType'\"\n errorName=\"fileType\"\n [errorText]=\"\n 'skyux_file_attachment_file_type_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'maxFileSize'\"\n errorName=\"maxFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'minFileSize'\"\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'validate' && rejectedFile.errorParam\"\n errorName=\"validate\"\n [errorText]=\"rejectedFile.file.name + ': ' + rejectedFile.errorParam\"\n />\n </div>\n</sky-form-errors>\n", styles: [".sky-file-drop-col{padding-left:5px;padding-right:5px;position:relative}:host .sky-file-drop-row{display:block}:host .sky-file-drop-col{flex-basis:auto}:host .sky-file-drop-col:not(:last-of-type){margin-bottom:10px}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-row,:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:block}:host-context(.sky-responsive-container-xs) .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-bottom:10px}:host-context(.sky-responsive-container-xs) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}@media (min-width: 768px){:host .sky-file-drop-row{display:flex}:host .sky-file-drop-col{flex-basis:100%}:host .sky-file-drop-col:not(:last-of-type){margin-bottom:0}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}}:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:flex}:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:100%}:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-bottom:0}:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}button.sky-file-drop{height:100%;position:absolute;inset:0;z-index:1}button.sky-file-drop:hover{cursor:pointer}.sky-file-drop-contents{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;background-color:#eeeeef;color:#212327;cursor:pointer;width:100%;text-align:center;height:100%}.sky-file-drop-contents .sky-file-drop-link-header{margin-bottom:5px}.sky-file-drop-no-click .sky-file-drop-contents{cursor:default}.sky-file-drop-hint-text{text-align:left;margin-top:var(--sky-margin-stacked-xs)}.sky-file-drop-accept .sky-file-drop-contents,.sky-file-drop-reject .sky-file-drop-contents{border-style:dashed;border-width:1px}.sky-file-drop-accept .sky-file-drop-contents-not-over,.sky-file-drop-reject .sky-file-drop-contents-not-over{display:none}.sky-file-drop-accept .sky-file-drop-contents{border-color:#72bf44;color:#212327}.sky-file-drop-accept .sky-file-drop-contents-accept{display:block}.sky-file-drop-reject .sky-file-drop-contents{border-color:#ef4044;color:#212327}.sky-file-drop-reject .sky-file-drop-contents-reject{display:block}.sky-file-drop-contents-accept,.sky-file-drop-contents-reject{display:none}.sky-file-upload-icon{display:block;font-size:40px;max-height:40px;margin-top:10px}.sky-file-drop-link{cursor:default}.sky-file-drop-text-header{margin:0}.sky-file-drop-text{font-size:15px;margin-top:5px;margin-bottom:20px}.sky-file-drop-text,.sky-file-drop-text-header{line-height:1.1;display:block}.sky-file-upload-icon{color:#686c73}.sky-file-drop{background-color:transparent;border:none;display:block;-webkit-appearance:none;width:100%;padding:0}.sky-file-input-hidden{display:none}.sky-file-drop-errors{margin-bottom:10px}:host-context(.sky-theme-modern) .sky-control-label{color:var(--sky-text-color-deemphasized);font-size:13px}.sky-theme-modern .sky-control-label{color:var(--sky-text-color-deemphasized);font-size:13px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SkyFormErrorComponent, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "component", type: i4.SkyFormErrorsComponent, selector: "sky-form-errors", inputs: ["errors", "labelText", "showErrors"] }, { kind: "component", type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "directive", type: i6.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "pipe", type: i7.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
|
|
250
261
|
}
|
|
251
262
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyFileDropComponent, decorators: [{
|
|
252
263
|
type: Component,
|
|
253
264
|
args: [{ selector: 'sky-file-drop', providers: [
|
|
254
265
|
SkyFileAttachmentService,
|
|
255
266
|
{ provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
|
|
256
|
-
], template: "<fieldset>\n <legend\n *ngIf=\"labelText\"\n class=\"sky-control-label sky-font-body-default sky-margin-stacked-xs\"\n [ngClass]=\"{\n 'sky-screen-reader-only': labelHidden,\n 'sky-control-label-required': required\n }\"\n >\n {{ labelText\n }}<span class=\"sky-screen-reader-only\" *ngIf=\"required\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n </legend>\n <div\n class=\"sky-file-drop-row\"\n [ngClass]=\"{ 'sky-file-drop-allow-links': allowLinks }\"\n >\n <div\n class=\"sky-file-drop-col\"\n [ngClass]=\"{\n 'sky-file-drop-accept': acceptedOver,\n 'sky-file-drop-reject': rejectedOver\n }\"\n >\n <button\n class=\"sky-file-drop sky-file-drop-target\"\n type=\"button\"\n (click)=\"dropClicked()\"\n (dragover)=\"fileDragOver($event)\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n [attr.aria-label]=\"\n fileUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_drag_or_click' | skyLibResources)\n \"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n ></button>\n\n <input\n tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"file\"\n class=\"sky-file-input-hidden\"\n [attr.multiple]=\"multiple ? multiple : null\"\n [attr.accept]=\"acceptedTypes ? acceptedTypes : null\"\n (change)=\"fileChangeEvent($event)\"\n #fileInput\n />\n\n <div\n class=\"sky-file-drop-contents sky-padding-even-default\"\n *ngIf=\"customEl.children.length === 0\"\n >\n <div class=\"sky-file-drop-contents-not-over\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_drag_file_here'\n | skyLibResources\n }}\n </div>\n <div class=\"sky-file-drop-text\">\n {{\n 'skyux_file_attachment_file_upload_or_click_to_browse'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"cloud-upload\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is valid -->\n <div class=\"sky-file-drop-contents-accept\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_drop_files_here'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"bullseye\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is invalid -->\n <div class=\"sky-file-drop-contents-reject\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_invalid_file' | skyLibResources\n }}\n </div>\n <sky-icon icon=\"times-circle\" class=\"sky-file-upload-icon\" />\n </div>\n </div>\n\n <div class=\"sky-file-drop-contents-custom\" #customEl>\n <ng-content />\n </div>\n </div>\n <div class=\"sky-file-drop-col\" *ngIf=\"allowLinks\">\n <div class=\"sky-file-drop-contents sky-padding-even-default\">\n <div class=\"sky-file-drop-link\">\n <div class=\"sky-file-drop-link-header\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_link_label' | skyLibResources\n }}\n </div>\n </div>\n <div class=\"sky-margin-stacked-xs\">\n <input\n type=\"text\"\n class=\"sky-form-control\"\n [attr.aria-label]=\"\n linkUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_link_label'\n | skyLibResources)\n \"\n [attr.aria-describedby]=\"uploadHintText.id\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n [(ngModel)]=\"linkUrl\"\n (blur)=\"onLinkBlur()\"\n (keyup)=\"addLinkEnter($event)\"\n />\n </div>\n <div\n skyId\n #uploadHintText=\"skyId\"\n class=\"sky-font-deemphasized sky-file-drop-hint-text sky-margin-stacked-sm\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_placeholder'\n | skyLibResources\n }}\n </div>\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!linkUrl\"\n (click)=\"addLink($event)\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_done' | skyLibResources\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div skyId #hintTextEl=\"skyId\">\n <div *ngIf=\"hintText\" class=\"sky-font-deemphasized sky-file-drop-hint-text\">\n {{ hintText }}\n </div>\n </div>\n</fieldset>\n<sky-form-errors\n class=\"sky-file-drop-errors\"\n [id]=\"errorId\"\n [labelText]=\"labelText\"\n [showErrors]=\"rejectedFiles.length\"\n>\n <div *ngFor=\"let rejectedFile of rejectedFiles\">\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'fileType'\"\n errorName=\"fileType\"\n [errorText]=\"\n 'skyux_file_attachment_file_type_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'maxFileSize'\"\n errorName=\"maxFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'minFileSize'\"\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'validate' && rejectedFile.errorParam\"\n errorName=\"validate\"\n [errorText]=\"rejectedFile.file.name + ': ' + rejectedFile.errorParam\"\n />\n </div>\n</sky-form-errors>\n", styles: [".sky-file-drop-col{padding-left:5px;padding-right:5px;position:relative}:host .sky-file-drop-row{display:block}:host .sky-file-drop-col{flex-basis:auto}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-row,:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:block}:host-context(.sky-responsive-container-xs) .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}@media (min-width: 768px){:host .sky-file-drop-row{display:flex}:host .sky-file-drop-col{flex-basis:100%}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}}:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:flex}:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:100%}:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}button.sky-file-drop{height:100%;position:absolute;inset:0;z-index:1}button.sky-file-drop:hover{cursor:pointer}.sky-file-drop-contents{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;background-color:#eeeeef;color:#212327;cursor:pointer;width:100%;text-align:center;height:100%}.sky-file-drop-contents .sky-file-drop-link-header{margin-bottom:5px}.sky-file-drop-no-click .sky-file-drop-contents{cursor:default}.sky-file-drop-hint-text{text-align:left;margin-top:var(--sky-margin-stacked-xs)}.sky-file-drop-accept .sky-file-drop-contents,.sky-file-drop-reject .sky-file-drop-contents{border-style:dashed;border-width:1px}.sky-file-drop-accept .sky-file-drop-contents-not-over,.sky-file-drop-reject .sky-file-drop-contents-not-over{display:none}.sky-file-drop-accept .sky-file-drop-contents{border-color:#72bf44;color:#212327}.sky-file-drop-accept .sky-file-drop-contents-accept{display:block}.sky-file-drop-reject .sky-file-drop-contents{border-color:#ef4044;color:#212327}.sky-file-drop-reject .sky-file-drop-contents-reject{display:block}.sky-file-drop-contents-accept,.sky-file-drop-contents-reject{display:none}.sky-file-upload-icon{display:block;font-size:40px;max-height:40px;margin-top:10px}.sky-file-drop-link{cursor:default}.sky-file-drop-text-header{margin:0}.sky-file-drop-text{font-size:15px;margin-top:5px;margin-bottom:20px}.sky-file-drop-text,.sky-file-drop-text-header{line-height:1.1;display:block}.sky-file-upload-icon{color:#686c73}.sky-file-drop{background-color:transparent;border:none;display:block;-webkit-appearance:none;width:100%;padding:0}.sky-file-input-hidden{display:none}.sky-file-drop-errors{margin-bottom:var(--sky-margin-stacked-lg)}:host-context(.sky-theme-modern) .sky-control-label{color:var(--sky-text-color-deemphasized);font-size:13px}.sky-theme-modern .sky-control-label{color:var(--sky-text-color-deemphasized);font-size:13px}\n"] }]
|
|
267
|
+
], template: "<fieldset>\n <legend\n *ngIf=\"labelText\"\n class=\"sky-control-label sky-font-body-default sky-margin-stacked-xs\"\n [ngClass]=\"{\n 'sky-screen-reader-only': labelHidden,\n 'sky-control-label-required': required\n }\"\n >\n {{ labelText\n }}<span class=\"sky-screen-reader-only\" *ngIf=\"required\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n </legend>\n <div\n class=\"sky-file-drop-row\"\n [ngClass]=\"{ 'sky-file-drop-allow-links': allowLinks }\"\n >\n <div\n class=\"sky-file-drop-col\"\n [ngClass]=\"{\n 'sky-file-drop-accept': acceptedOver,\n 'sky-file-drop-reject': rejectedOver\n }\"\n >\n <button\n class=\"sky-file-drop sky-file-drop-target\"\n type=\"button\"\n (click)=\"dropClicked()\"\n (dragover)=\"fileDragOver($event)\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n [attr.aria-label]=\"\n fileUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_drag_or_click' | skyLibResources)\n \"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n ></button>\n\n <input\n tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"file\"\n class=\"sky-file-input-hidden\"\n [attr.multiple]=\"multiple ? multiple : null\"\n [attr.accept]=\"acceptedTypes ? acceptedTypes : null\"\n (change)=\"fileChangeEvent($event)\"\n #fileInput\n />\n\n <div\n class=\"sky-file-drop-contents sky-padding-even-default\"\n *ngIf=\"customEl.children.length === 0\"\n >\n <div class=\"sky-file-drop-contents-not-over\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_drag_file_here'\n | skyLibResources\n }}\n </div>\n <div class=\"sky-file-drop-text\">\n {{\n 'skyux_file_attachment_file_upload_or_click_to_browse'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"cloud-upload\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is valid -->\n <div class=\"sky-file-drop-contents-accept\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_drop_files_here'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"bullseye\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is invalid -->\n <div class=\"sky-file-drop-contents-reject\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_invalid_file' | skyLibResources\n }}\n </div>\n <sky-icon icon=\"times-circle\" class=\"sky-file-upload-icon\" />\n </div>\n </div>\n\n <div class=\"sky-file-drop-contents-custom\" #customEl>\n <ng-content />\n </div>\n </div>\n <div class=\"sky-file-drop-col\" *ngIf=\"allowLinks\">\n <div class=\"sky-file-drop-contents sky-padding-even-default\">\n <div class=\"sky-file-drop-link\">\n <div class=\"sky-file-drop-link-header\">\n <div class=\"sky-file-drop-text-header sky-font-display-3\">\n {{\n 'skyux_file_attachment_file_upload_link_label' | skyLibResources\n }}\n </div>\n </div>\n <div class=\"sky-margin-stacked-xs\">\n <input\n type=\"text\"\n class=\"sky-form-control\"\n [attr.aria-label]=\"\n linkUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_link_label'\n | skyLibResources)\n \"\n [attr.aria-describedby]=\"uploadHintText.id\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n [(ngModel)]=\"linkUrl\"\n (blur)=\"onLinkBlur()\"\n (keyup)=\"addLinkEnter($event)\"\n />\n </div>\n <div\n skyId\n #uploadHintText=\"skyId\"\n class=\"sky-font-deemphasized sky-file-drop-hint-text sky-margin-stacked-sm\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_placeholder'\n | skyLibResources\n }}\n </div>\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!linkUrl\"\n (click)=\"addLink($event)\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_done' | skyLibResources\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div skyId #hintTextEl=\"skyId\">\n <div *ngIf=\"hintText\" class=\"sky-font-deemphasized sky-file-drop-hint-text\">\n {{ hintText }}\n </div>\n </div>\n</fieldset>\n<sky-form-errors\n class=\"sky-file-drop-errors\"\n [id]=\"errorId\"\n [labelText]=\"labelText\"\n [showErrors]=\"rejectedFiles.length\"\n>\n <div *ngFor=\"let rejectedFile of rejectedFiles\">\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'fileType'\"\n errorName=\"fileType\"\n [errorText]=\"\n 'skyux_file_attachment_file_type_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'maxFileSize'\"\n errorName=\"maxFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'minFileSize'\"\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text_with_name'\n | skyLibResources: rejectedFile.file.name : rejectedFile.errorParam\n \"\n />\n <sky-form-error\n *ngIf=\"rejectedFile.errorType === 'validate' && rejectedFile.errorParam\"\n errorName=\"validate\"\n [errorText]=\"rejectedFile.file.name + ': ' + rejectedFile.errorParam\"\n />\n </div>\n</sky-form-errors>\n", styles: [".sky-file-drop-col{padding-left:5px;padding-right:5px;position:relative}:host .sky-file-drop-row{display:block}:host .sky-file-drop-col{flex-basis:auto}:host .sky-file-drop-col:not(:last-of-type){margin-bottom:10px}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-row,:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:block}:host-context(.sky-responsive-container-xs) .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-bottom:10px}:host-context(.sky-responsive-container-xs) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}@media (min-width: 768px){:host .sky-file-drop-row{display:flex}:host .sky-file-drop-col{flex-basis:100%}:host .sky-file-drop-col:not(:last-of-type){margin-bottom:0}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}}:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:flex}:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:100%}:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-bottom:0}:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}button.sky-file-drop{height:100%;position:absolute;inset:0;z-index:1}button.sky-file-drop:hover{cursor:pointer}.sky-file-drop-contents{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;background-color:#eeeeef;color:#212327;cursor:pointer;width:100%;text-align:center;height:100%}.sky-file-drop-contents .sky-file-drop-link-header{margin-bottom:5px}.sky-file-drop-no-click .sky-file-drop-contents{cursor:default}.sky-file-drop-hint-text{text-align:left;margin-top:var(--sky-margin-stacked-xs)}.sky-file-drop-accept .sky-file-drop-contents,.sky-file-drop-reject .sky-file-drop-contents{border-style:dashed;border-width:1px}.sky-file-drop-accept .sky-file-drop-contents-not-over,.sky-file-drop-reject .sky-file-drop-contents-not-over{display:none}.sky-file-drop-accept .sky-file-drop-contents{border-color:#72bf44;color:#212327}.sky-file-drop-accept .sky-file-drop-contents-accept{display:block}.sky-file-drop-reject .sky-file-drop-contents{border-color:#ef4044;color:#212327}.sky-file-drop-reject .sky-file-drop-contents-reject{display:block}.sky-file-drop-contents-accept,.sky-file-drop-contents-reject{display:none}.sky-file-upload-icon{display:block;font-size:40px;max-height:40px;margin-top:10px}.sky-file-drop-link{cursor:default}.sky-file-drop-text-header{margin:0}.sky-file-drop-text{font-size:15px;margin-top:5px;margin-bottom:20px}.sky-file-drop-text,.sky-file-drop-text-header{line-height:1.1;display:block}.sky-file-upload-icon{color:#686c73}.sky-file-drop{background-color:transparent;border:none;display:block;-webkit-appearance:none;width:100%;padding:0}.sky-file-input-hidden{display:none}.sky-file-drop-errors{margin-bottom:10px}:host-context(.sky-theme-modern) .sky-control-label{color:var(--sky-text-color-deemphasized);font-size:13px}.sky-theme-modern .sky-control-label{color:var(--sky-text-color-deemphasized);font-size:13px}\n"] }]
|
|
257
268
|
}], propDecorators: { filesChanged: [{
|
|
258
269
|
type: Output
|
|
259
270
|
}], linkInputBlur: [{
|
|
@@ -291,5 +302,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
291
302
|
}], inputEl: [{
|
|
292
303
|
type: ViewChild,
|
|
293
304
|
args: ['fileInput']
|
|
305
|
+
}], display: [{
|
|
306
|
+
type: HostBinding,
|
|
307
|
+
args: ['style.display']
|
|
294
308
|
}] } });
|
|
295
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1kcm9wLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy9zcmMvbGliL21vZHVsZXMvZmlsZS1hdHRhY2htZW50L2ZpbGUtZHJvcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9maWxlLWRyb3AuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRWxGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7QUFNckUsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUM7QUFDckMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFFaEM7Ozs7Ozs7OztHQVNHO0FBVUgsTUFBTSxPQUFPLG9CQUFvQjtJQVRqQztRQVVFOztXQUVHO1FBRUksaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUU1RDs7V0FFRztRQUVJLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVoRDs7V0FFRztRQUVJ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LFVBQVU7c0JBRGhCLEtBQUs7Z0JBU0MsYUFBYTtzQkFEbkIsS0FBSztnQkFPQyxPQUFPO3NCQURiLEtBQUs7Z0JBT0MsVUFBVTtzQkFEaEIsS0FBSztnQkFRQyxTQUFTO3NCQURmLEtBQUs7Z0JBUUMsV0FBVztzQkFEakIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFTL0IsUUFBUTtzQkFEZCxLQUFLO2dCQVlDLFFBQVE7c0JBRGQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJL0IsT0FBTztzQkFEYixTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lMaXZlQW5ub3VuY2VyU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUlkU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNLWV9GT1JNX0VSUk9SU19FTkFCTEVEIH0gZnJvbSAnLi4vZm9ybS1lcnJvci9mb3JtLWVycm9ycy1lbmFibGVkLXRva2VuJztcblxuaW1wb3J0IHsgU2t5RmlsZUF0dGFjaG1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9maWxlLWF0dGFjaG1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lGaWxlSXRlbSB9IGZyb20gJy4vZmlsZS1pdGVtJztcbmltcG9ydCB7IFNreUZpbGVMaW5rIH0gZnJvbSAnLi9maWxlLWxpbmsnO1xuaW1wb3J0IHsgU2t5RmlsZVZhbGlkYXRlRm4gfSBmcm9tICcuL2ZpbGUtdmFsaWRhdGUtZnVuY3Rpb24nO1xuaW1wb3J0IHsgU2t5RmlsZURyb3BDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2ZpbGUtZHJvcC1jaGFuZ2UnO1xuXG5jb25zdCBNQVhfRklMRV9TSVpFX0RFRkFVTFQgPSA1MDAwMDA7XG5jb25zdCBNSU5fRklMRV9TSVpFX0RFRkFVTFQgPSAwO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFuIGVsZW1lbnQgdG8gYXR0YWNoIG11bHRpcGxlIGZpbGVzIHdoZXJlIHVzZXJzIGNhbiBicm93c2Ugb3IgZHJhZyBhbmQgZHJvcCBsb2NhbCBmaWxlc1xuICogb3IgcHJvdmlkZSBoeXBlcmxpbmtzIHRvIGV4dGVybmFsIGZpbGVzLiBZb3UgY2FuIGxlYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgY29tcG9uZW50XG4gKiBibGFuayB0byBkaXNwbGF5IHRoZSBkcm9wIHpvbmUncyBkZWZhdWx0IFVJLCBvciB5b3UgY2FuIHNwZWNpZnkgY3VzdG9tIGNvbnRlbnQgdG9cbiAqIGRpc3BsYXkgaW5zdGVhZC4gV2hlbiB0aGUgbW9kdWxlIGluaXRpYWxpemVzLCBpdCBkaXNhYmxlcyB0aGUgYWJpbGl0eSB0byBkcmFnIGFuZFxuICogZHJvcCBmaWxlcyBmb3IgdGhlIGVudGlyZSB3aW5kb3cgdG8gcHJldmVudCB0aGUgYnJvd3NlciBmcm9tIG9wZW5pbmcgZmlsZXMgdGhhdCBhcmVcbiAqIGFjY2lkZW50YWxseSBkcm9wcGVkIG91dHNpZGUgdGhlIHRhcmdldCB6b25lLiBJZiB5b3UgaW1wbGVtZW50IHlvdXIgb3duIGZpbGUgZHJvcCBmdW5jdGlvbmFsaXR5XG4gKiBvdXRzaWRlIG9mIHRoZSBmaWxlIGRyb3AgY29tcG9uZW50LCB5b3UgY2FuIHBsYWNlIHRoZSBgc2t5LWZpbGUtZHJvcC10YXJnZXRgIENTUyBjbGFzc1xuICogb24gdGhlIGVsZW1lbnQgdGhhdCByZWNlaXZlcyBkcm9wIGV2ZW50cyB0byBleGVtcHQgaXQgZnJvbSB0aGUgZHJvcCBleGNsdXNpb24gcnVsZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWZpbGUtZHJvcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLWRyb3AuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlLWRyb3AuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2t5RmlsZUF0dGFjaG1lbnRTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreUZpbGVEcm9wQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgYWRkIG9yIHJlbW92ZSBmaWxlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZmlsZXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lGaWxlRHJvcENoYW5nZT4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgbGluayBpbnB1dCBib3ggdHJpZ2dlcnMgYSBibHVyIGV2ZW50LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBsaW5rSW5wdXRCbHVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGFkZCBvciByZW1vdmUgbGlua3MuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGxpbmtDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lGaWxlTGluaz4oKTtcblxuICAvKipcbiAgICogVGhlIEFSSUEgbGFiZWwgZm9yIHRoZSBmaWxlIHVwbG9hZCBidXR0b24uIFRoaXMgcHJvdmlkZXMgYSB0ZXh0IGVxdWl2YWxlbnQgZm9yXG4gICAqIHNjcmVlbiByZWFkZXJzIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtbGFiZWwpLlxuICAgKiBAZGVmYXVsdCBcIkRyYWcgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdG8gYnJvd3NlXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaWxlVXBsb2FkQXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBBUklBIGxhYmVsIGZvciB0aGUgbGluayB1cGxvYWQgaW5wdXQuIFRoaXMgc2V0cyB0aGUgYnV0dG9uJ3MgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSB0byBwcm92aWRlIGEgdGV4dCBlcXVpdmFsZW50IGZvclxuICAgKiBzY3JlZW4gcmVhZGVycyBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsKS5cbiAgICogQGRlZmF1bHQgXCJMaW5rIHRvIGEgZmlsZVwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbGlua1VwbG9hZEFyaWFMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBzaXplIGluIGJ5dGVzIGZvciB2YWxpZCBmaWxlcy5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5GaWxlU2l6ZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21pbkZpbGVTaXplID0gdmFsdWUgPz8gTUlOX0ZJTEVfU0laRV9ERUZBVUxUO1xuICB9XG5cbiAgcHVibGljIGdldCBtaW5GaWxlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfbWluRmlsZVNpemU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1heGltdW0gc2l6ZSBpbiBieXRlcyBmb3IgdmFsaWQgZmlsZXMuXG4gICAqIEBkZWZhdWx0IDUwMDAwMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhGaWxlU2l6ZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21heEZpbGVTaXplID0gdmFsdWUgPz8gTUFYX0ZJTEVfU0laRV9ERUZBVUxUO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXhGaWxlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfbWF4RmlsZVNpemU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB1c2VycyBjYW4gZHJhZyBhbmQgZHJvcCBtdWx0aXBsZSBmaWxlcyBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG11bHRpcGxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBUaGlzIHZhbGlkYXRpb24gcnVucyBhbG9uZ3NpZGUgdGhlIGludGVybmFsXG4gICAqIGZpbGUgdmFsaWRhdGlvbi4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGBTa3lGaWxlSXRlbWAgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLlxuICAgKiBUaGUgc3RyaW5nIHJldHVybmVkIGlzIHVzZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2UgaW4gbXVsdGktZmlsZSBhdHRhY2htZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHZhbGlkYXRlRm46IFNreUZpbGVWYWxpZGF0ZUZuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbWEtZGVsaW1pdGVkIHN0cmluZyBsaXRlcmFsIG9mIE1JTUUgdHlwZXMgdGhhdCB1c2VycyBjYW4gYXR0YWNoLlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgZmlsZSB0eXBlcyBhcmUgYWxsb3dlZC5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWNjZXB0ZWRUeXBlczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIG9wdGlvbiB0byBicm93c2UgZm9yIGZpbGVzIHRvIGF0dGFjaC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub0NsaWNrOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgb3B0aW9uIHRvIGF0dGFjaCBmaWxlcyBmcm9tIFVSTHMgcmF0aGVyIHRoYW4gZnJvbSBsb2NhbCBkZXZpY2VzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFsbG93TGlua3M6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgZmlsZSBhdHRhY2htZW50J3MgbGFiZWwuXG4gICAqIEBwcmV2aWV3XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbGFiZWxUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaGlkZSBgbGFiZWxUZXh0YCBmcm9tIHZpZXcuXG4gICAqIEBwcmV2aWV3XG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIGxhYmVsSGlkZGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFtQZXJzaXN0ZW50IGlubGluZSBoZWxwIHRleHRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvZGVzaWduL2d1aWRlbGluZXMvdXNlci1hc3Npc3RhbmNlI2lubGluZS1oZWxwKSB0aGF0IHByb3ZpZGVzXG4gICAqIGFkZGl0aW9uYWwgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICogQHByZXZpZXdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaW50VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHVwbG9hZGluZyBhIGZpbGUgb3IgbGluayBpcyByZXF1aXJlZC5cbiAgICogV2hlbiB5b3Ugc2V0IHRoaXMgcHJvcGVydHkgdG8gYHRydWVgLCB0aGUgY29tcG9uZW50IGFkZHMgYGFyaWEtcmVxdWlyZWRgIGFuZCBgcmVxdWlyZWRgXG4gICAqIGF0dHJpYnV0ZXMgdG8gdGhlIGlucHV0IGVsZW1lbnRzIHNvIHRoYXQgc2NyZWVuIHJlYWRlcnMgYW5ub3VuY2UgYW4gaW52YWxpZCBzdGF0ZSB1bnRpbCB0aGUgaW5wdXQgZWxlbWVudFxuICAgKiBpcyBjb21wbGV0ZS5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLXJlcXVpcmVkYCBhdHRyaWJ1dGUsIHNlZSB0aGUgW1dBSS1BUklBIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1yZXF1aXJlZCkuXG4gICAqIEBwcmV2aWV3XG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JylcbiAgcHVibGljIGlucHV0RWw6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHJlamVjdGVkT3ZlciA9IGZhbHNlO1xuICBwdWJsaWMgYWNjZXB0ZWRPdmVyID0gZmFsc2U7XG4gIHB1YmxpYyBsaW5rVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI2VudGVyRXZlbnRUYXJnZXQ6IGFueTtcblxuICAjX21heEZpbGVTaXplID0gTUFYX0ZJTEVfU0laRV9ERUZBVUxUO1xuXG4gICNfbWluRmlsZVNpemUgPSBNSU5fRklMRV9TSVpFX0RFRkFVTFQ7XG5cbiAgcmVhZG9ubHkgI2ZpbGVBdHRhY2htZW50U2VydmljZSA9IGluamVjdChTa3lGaWxlQXR0YWNobWVudFNlcnZpY2UpO1xuICByZWFkb25seSAjbGl2ZUFubm91bmNlclN2YyA9IGluamVjdChTa3lMaXZlQW5ub3VuY2VyU2VydmljZSk7XG4gIHJlYWRvbmx5ICNyZXNvdXJjZXNTdmMgPSBpbmplY3QoU2t5TGliUmVzb3VyY2VzU2VydmljZSk7XG4gIHJlYWRvbmx5ICNpZFN2YyA9IGluamVjdChTa3lJZFNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCBlcnJvcklkID0gdGhpcy4jaWRTdmMuZ2VuZXJhdGVJZCgpO1xuICBwcm90ZWN0ZWQgcmVqZWN0ZWRGaWxlczogU2t5RmlsZUl0ZW1bXSA9IFtdO1xuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVzQ2hhbmdlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubGlua0NoYW5nZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmxpbmtJbnB1dEJsdXIuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBkcm9wQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubm9DbGljayAmJiB0aGlzLmlucHV0RWwpIHtcbiAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbGVDaGFuZ2VFdmVudChmaWxlQ2hhbmdlRXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy4jaGFuZGxlRmlsZXMoXG4gICAgICAoZmlsZUNoYW5nZUV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50IHwgdW5kZWZpbmVkKT8uZmlsZXMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlRHJhZ0VudGVyKGRyYWdFbnRlckV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBTYXZlIHRoaXMgdGFyZ2V0IHRvIGtub3cgd2hlbiB0aGUgZHJhZyBldmVudCBsZWF2ZXNcbiAgICB0aGlzLiNlbnRlckV2ZW50VGFyZ2V0ID0gZHJhZ0VudGVyRXZlbnQudGFyZ2V0O1xuICAgIGRyYWdFbnRlckV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGRyYWdFbnRlckV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgZmlsZURyYWdPdmVyKGRyYWdPdmVyRXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRyYW5zZmVyID0gZHJhZ092ZXJFdmVudC5kYXRhVHJhbnNmZXI7XG5cbiAgICBkcmFnT3ZlckV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGRyYWdPdmVyRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0cmFuc2Zlcikge1xuICAgICAgaWYgKHRyYW5zZmVyLml0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbSh0cmFuc2Zlci5pdGVtcyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmlsZS50eXBlICYmXG4gICAgICAgICAgICB0aGlzLiNmaWxlQXR0YWNobWVudFNlcnZpY2UuZmlsZVR5cGVSZWplY3RlZChcbiAgICAgICAgICAgICAgZmlsZS50eXBlLFxuICAgICAgICAgICAgICB0aGlzLmFjY2VwdGVkVHlwZXMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlamVjdGVkT3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFjY2VwdGVkT3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwICYmICF0aGlzLmFjY2VwdGVkT3Zlcikge1xuICAgICAgICAgIHRoaXMucmVqZWN0ZWRPdmVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5hY2NlcHRlZE92ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiB1bnRlc3RhYmxlICovIGVsc2UgaWYgKHRyYW5zZmVyLmZpbGVzKSB7XG4gICAgICAgIC8vIElmIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgRGF0YVRyYW5zZmVyLml0ZW1zLFxuICAgICAgICAvLyBkZWZlciBmaWxlLXR5cGUgY2hlY2tpbmcgdG8gZHJvcCBoYW5kbGVyLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVyL2l0ZW1zI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuICAgICAgICB0aGlzLnJlamVjdGVkT3ZlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjY2VwdGVkT3ZlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbGVEcm9wKGRyb3BFdmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZHJvcEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGRyb3BFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy4jZW50ZXJFdmVudFRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlamVjdGVkT3ZlciA9IGZhbHNlO1xuICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gZmFsc2U7XG5cbiAgICBpZiAoZHJvcEV2ZW50LmRhdGFUcmFuc2ZlciAmJiBkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSB7XG4gICAgICBjb25zdCBoYXNEaXJlY3RvcnkgPSB0aGlzLiNmaWxlQXR0YWNobWVudFNlcnZpY2UuaGFzRGlyZWN0b3J5KFxuICAgICAgICBkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGludmFsaWROdW1iZXJPZkZpbGVzID1cbiAgICAgICAgIXRoaXMubXVsdGlwbGUgJiYgZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPiAxO1xuXG4gICAgICBpZiAoaGFzRGlyZWN0b3J5IHx8IGludmFsaWROdW1iZXJPZkZpbGVzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jaGFuZGxlRmlsZXMoZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbGVEcmFnTGVhdmUoZHJhZ0xlYXZlRXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNlbnRlckV2ZW50VGFyZ2V0ID09PSBkcmFnTGVhdmVFdmVudC50YXJnZXQpIHtcbiAgICAgIHRoaXMucmVqZWN0ZWRPdmVyID0gZmFsc2U7XG4gICAgICB0aGlzLmFjY2VwdGVkT3ZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRMaW5rRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQud2hpY2ggPT09IDEzKSB7XG4gICAgICB0aGlzLmFkZExpbmsoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRMaW5rKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5saW5rQ2hhbmdlZC5lbWl0KHsgdXJsOiB0aGlzLmxpbmtVcmwgfSBhcyBTa3lGaWxlTGluayk7XG4gICAgdGhpcy4jYW5ub3VuY2VTdGF0ZShcbiAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfbGlua19hZGRlZCcsXG4gICAgICB0aGlzLmxpbmtVcmwsXG4gICAgKTtcbiAgICB0aGlzLmxpbmtVcmwgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgb25MaW5rQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtJbnB1dEJsdXIuZW1pdCgpO1xuICB9XG5cbiAgI2Fubm91bmNlU3RhdGUocmVzb3VyY2VTdHJpbmc6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLiNyZXNvdXJjZXNTdmNcbiAgICAgIC5nZXRTdHJpbmcocmVzb3VyY2VTdHJpbmcsIC4uLmFyZ3MpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoaW50ZXJuYXRpb25hbGl6ZWRTdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy4jbGl2ZUFubm91bmNlclN2Yy5hbm5vdW5jZShpbnRlcm5hdGlvbmFsaXplZFN0cmluZyk7XG4gICAgICB9KTtcbiAgfVxuXG4gICNlbWl0RmlsZUNoYW5nZUV2ZW50KFxuICAgIHRvdGFsRmlsZXM6IG51bWJlcixcbiAgICByZWplY3RlZEZpbGVBcnJheTogU2t5RmlsZUl0ZW1bXSxcbiAgICB2YWxpZEZpbGVBcnJheTogU2t5RmlsZUl0ZW1bXSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRvdGFsRmlsZXMgPT09IHJlamVjdGVkRmlsZUFycmF5Lmxlbmd0aCArIHZhbGlkRmlsZUFycmF5Lmxlbmd0aCkge1xuICAgICAgdGhpcy5maWxlc0NoYW5nZWQuZW1pdCh7XG4gICAgICAgIGZpbGVzOiB2YWxpZEZpbGVBcnJheSxcbiAgICAgICAgcmVqZWN0ZWRGaWxlczogcmVqZWN0ZWRGaWxlQXJyYXksXG4gICAgICB9IGFzIFNreUZpbGVEcm9wQ2hhbmdlKTtcblxuICAgICAgaWYgKHRoaXMuaW5wdXRFbCkge1xuICAgICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNmaWxlc1JlamVjdGVkKFxuICAgIGZpbGU6IFNreUZpbGVJdGVtLFxuICAgIHZhbGlkRmlsZUFycmF5OiBTa3lGaWxlSXRlbVtdLFxuICAgIHJlamVjdGVkRmlsZUFycmF5OiBTa3lGaWxlSXRlbVtdLFxuICAgIHRvdGFsRmlsZXM6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgcmVqZWN0ZWRGaWxlQXJyYXkucHVzaChmaWxlKTtcbiAgICB0aGlzLiNlbWl0RmlsZUNoYW5nZUV2ZW50KHRvdGFsRmlsZXMsIHJlamVjdGVkRmlsZUFycmF5LCB2YWxpZEZpbGVBcnJheSk7XG4gIH1cblxuICAjbG9hZEZpbGUoXG4gICAgZmlsZURyb3A6IFNreUZpbGVEcm9wQ29tcG9uZW50LFxuICAgIGZpbGU6IFNreUZpbGVJdGVtLFxuICAgIHZhbGlkRmlsZUFycmF5OiBTa3lGaWxlSXRlbVtdLFxuICAgIHJlamVjdGVkRmlsZUFycmF5OiBTa3lGaWxlSXRlbVtdLFxuICAgIHRvdGFsRmlsZXM6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGZpbGUudXJsID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgIHZhbGlkRmlsZUFycmF5LnB1c2goZmlsZSk7XG4gICAgICBmaWxlRHJvcC4jZW1pdEZpbGVDaGFuZ2VFdmVudChcbiAgICAgICAgdG90YWxGaWxlcyxcbiAgICAgICAgcmVqZWN0ZWRGaWxlQXJyYXksXG4gICAgICAgIHZhbGlkRmlsZUFycmF5LFxuICAgICAgKTtcbiAgICAgIHRoaXMuI2Fubm91bmNlU3RhdGUoXG4gICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfZmlsZV9hZGRlZCcsXG4gICAgICAgIGZpbGUuZmlsZS5uYW1lLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpID0+IHtcbiAgICAgIGZpbGVEcm9wLiNmaWxlc1JlamVjdGVkKFxuICAgICAgICBmaWxlLFxuICAgICAgICB2YWxpZEZpbGVBcnJheSxcbiAgICAgICAgcmVqZWN0ZWRGaWxlQXJyYXksXG4gICAgICAgIHRvdGFsRmlsZXMsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgZmlsZURyb3AuI2ZpbGVzUmVqZWN0ZWQoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHZhbGlkRmlsZUFycmF5LFxuICAgICAgICByZWplY3RlZEZpbGVBcnJheSxcbiAgICAgICAgdG90YWxGaWxlcyxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlLmZpbGUpO1xuICB9XG5cbiAgI2hhbmRsZUZpbGVzKGZpbGVzPzogRmlsZUxpc3QgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBjb25zdCB2YWxpZEZpbGVBcnJheTogU2t5RmlsZUl0ZW1bXSA9IFtdO1xuICAgICAgY29uc3QgcmVqZWN0ZWRGaWxlQXJyYXk6IFNreUZpbGVJdGVtW10gPSBbXTtcbiAgICAgIGNvbnN0IHRvdGFsRmlsZXMgPSBmaWxlcy5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IHByb2Nlc3NlZEZpbGVzID0gdGhpcy4jZmlsZUF0dGFjaG1lbnRTZXJ2aWNlLmNoZWNrRmlsZXMoXG4gICAgICAgIGZpbGVzLFxuICAgICAgICB0aGlzLm1pbkZpbGVTaXplLFxuICAgICAgICB0aGlzLm1heEZpbGVTaXplLFxuICAgICAgICB0aGlzLmFjY2VwdGVkVHlwZXMsXG4gICAgICAgIHRoaXMudmFsaWRhdGVGbixcbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBwcm9jZXNzZWRGaWxlcykge1xuICAgICAgICBpZiAoZmlsZS5lcnJvclR5cGUpIHtcbiAgICAgICAgICB0aGlzLiNmaWxlc1JlamVjdGVkKFxuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgIHZhbGlkRmlsZUFycmF5LFxuICAgICAgICAgICAgcmVqZWN0ZWRGaWxlQXJyYXksXG4gICAgICAgICAgICB0b3RhbEZpbGVzLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4jbG9hZEZpbGUoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgIHZhbGlkRmlsZUFycmF5LFxuICAgICAgICAgICAgcmVqZWN0ZWRGaWxlQXJyYXksXG4gICAgICAgICAgICB0b3RhbEZpbGVzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWplY3RlZEZpbGVzID0gcmVqZWN0ZWRGaWxlQXJyYXk7XG4gICAgfVxuICB9XG59XG4iLCI8ZmllbGRzZXQ+XG4gIDxsZWdlbmRcbiAgICAqbmdJZj1cImxhYmVsVGV4dFwiXG4gICAgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbCBza3ktZm9udC1ib2R5LWRlZmF1bHQgc2t5LW1hcmdpbi1zdGFja2VkLXhzXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LXNjcmVlbi1yZWFkZXItb25seSc6IGxhYmVsSGlkZGVuLFxuICAgICAgJ3NreS1jb250cm9sLWxhYmVsLXJlcXVpcmVkJzogcmVxdWlyZWRcbiAgICB9XCJcbiAgPlxuICAgIHt7IGxhYmVsVGV4dFxuICAgIH19PHNwYW4gY2xhc3M9XCJza3ktc2NyZWVuLXJlYWRlci1vbmx5XCIgKm5nSWY9XCJyZXF1aXJlZFwiPnt7XG4gICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X3JlcXVpcmVkJyB8IHNreUxpYlJlc291cmNlc1xuICAgIH19PC9zcGFuPlxuICA8L2xlZ2VuZD5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWZpbGUtZHJvcC1yb3dcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3NreS1maWxlLWRyb3AtYWxsb3ctbGlua3MnOiBhbGxvd0xpbmtzIH1cIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJza3ktZmlsZS1kcm9wLWNvbFwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdza3ktZmlsZS1kcm9wLWFjY2VwdCc6IGFjY2VwdGVkT3ZlcixcbiAgICAgICAgJ3NreS1maWxlLWRyb3AtcmVqZWN0JzogcmVqZWN0ZWRPdmVyXG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic2t5LWZpbGUtZHJvcCBza3ktZmlsZS1kcm9wLXRhcmdldFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZHJvcENsaWNrZWQoKVwiXG4gICAgICAgIChkcmFnb3Zlcik9XCJmaWxlRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgICAgIChkcmFnZW50ZXIpPVwiZmlsZURyYWdFbnRlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdsZWF2ZSk9XCJmaWxlRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAoZHJvcCk9XCJmaWxlRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICBmaWxlVXBsb2FkQXJpYUxhYmVsIHx8XG4gICAgICAgICAgKCdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfZHJhZ19vcl9jbGljaycgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGludFRleHQgPyBoaW50VGV4dEVsLmlkIDogdW5kZWZpbmVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cIiEhcmVqZWN0ZWRGaWxlcy5sZW5ndGhcIlxuICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJcbiAgICAgICAgICBsYWJlbFRleHQgJiYgcmVqZWN0ZWRGaWxlcy5sZW5ndGggPyBlcnJvcklkIDogdW5kZWZpbmVkXG4gICAgICAgIFwiXG4gICAgICA+PC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz1cInNreS1maWxlLWlucHV0LWhpZGRlblwiXG4gICAgICAgIFthdHRyLm11bHRpcGxlXT1cIm11bHRpcGxlID8gbXVsdGlwbGUgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYWNjZXB0XT1cImFjY2VwdGVkVHlwZXMgPyBhY2NlcHRlZFR5cGVzIDogbnVsbFwiXG4gICAgICAgIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KCRldmVudClcIlxuICAgICAgICAjZmlsZUlucHV0XG4gICAgICAvPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic2t5LWZpbGUtZHJvcC1jb250ZW50cyBza3ktcGFkZGluZy1ldmVuLWRlZmF1bHRcIlxuICAgICAgICAqbmdJZj1cImN1c3RvbUVsLmNoaWxkcmVuLmxlbmd0aCA9PT0gMFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktZmlsZS1kcm9wLWNvbnRlbnRzLW5vdC1vdmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWRyb3AtdGV4dC1oZWFkZXIgc2t5LWZvbnQtZGlzcGxheS0zXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2RyYWdfZmlsZV9oZXJlJ1xuICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJza3ktZmlsZS1kcm9wLXRleHRcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfb3JfY2xpY2tfdG9fYnJvd3NlJ1xuICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxza3ktaWNvbiBpY29uPVwiY2xvdWQtdXBsb2FkXCIgY2xhc3M9XCJza3ktZmlsZS11cGxvYWQtaWNvblwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGhpcyB3aWxsIGFwcGVhciB3aGVuIGZpbGUgaXMgZHJhZ2dlZCBvdmVyIGFuZCBpcyB2YWxpZCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWRyb3AtY29udGVudHMtYWNjZXB0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWRyb3AtdGV4dC1oZWFkZXIgc2t5LWZvbnQtZGlzcGxheS0zXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2Ryb3BfZmlsZXNfaGVyZSdcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2t5LWljb24gaWNvbj1cImJ1bGxzZXllXCIgY2xhc3M9XCJza3ktZmlsZS11cGxvYWQtaWNvblwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGhpcyB3aWxsIGFwcGVhciB3aGVuIGZpbGUgaXMgZHJhZ2dlZCBvdmVyIGFuZCBpcyBpbnZhbGlkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtZHJvcC1jb250ZW50cy1yZWplY3RcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtZHJvcC10ZXh0LWhlYWRlciBza3ktZm9udC1kaXNwbGF5LTNcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlJyB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2t5LWljb24gaWNvbj1cInRpbWVzLWNpcmNsZVwiIGNsYXNzPVwic2t5LWZpbGUtdXBsb2FkLWljb25cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtZHJvcC1jb250ZW50cy1jdXN0b21cIiAjY3VzdG9tRWw+XG4gICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtZHJvcC1jb2xcIiAqbmdJZj1cImFsbG93TGlua3NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJza3ktZmlsZS1kcm9wLWNvbnRlbnRzIHNreS1wYWRkaW5nLWV2ZW4tZGVmYXVsdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtZHJvcC1saW5rXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWRyb3AtbGluay1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJza3ktZmlsZS1kcm9wLXRleHQtaGVhZGVyIHNreS1mb250LWRpc3BsYXktM1wiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfbGlua19sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJza3ktbWFyZ2luLXN0YWNrZWQteHNcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2t5LWZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgbGlua1VwbG9hZEFyaWFMYWJlbCB8fFxuICAgICAgICAgICAgICAgICgnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2xpbmtfbGFiZWwnXG4gICAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJ1cGxvYWRIaW50VGV4dC5pZFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCIhIXJlamVjdGVkRmlsZXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwiXG4gICAgICAgICAgICAgICAgbGFiZWxUZXh0ICYmIHJlamVjdGVkRmlsZXMubGVuZ3RoID8gZXJyb3JJZCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxpbmtVcmxcIlxuICAgICAgICAgICAgICAoYmx1cik9XCJvbkxpbmtCbHVyKClcIlxuICAgICAgICAgICAgICAoa2V5dXApPVwiYWRkTGlua0VudGVyKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBza3lJZFxuICAgICAgICAgICAgI3VwbG9hZEhpbnRUZXh0PVwic2t5SWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktZm9udC1kZWVtcGhhc2l6ZWQgc2t5LWZpbGUtZHJvcC1oaW50LXRleHQgc2t5LW1hcmdpbi1zdGFja2VkLXNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2xpbmtfcGxhY2Vob2xkZXInXG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbGlua1VybFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkTGluaygkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2xpbmtfZG9uZScgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IHNreUlkICNoaW50VGV4dEVsPVwic2t5SWRcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaGludFRleHRcIiBjbGFzcz1cInNreS1mb250LWRlZW1waGFzaXplZCBza3ktZmlsZS1kcm9wLWhpbnQtdGV4dFwiPlxuICAgICAge3sgaGludFRleHQgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2ZpZWxkc2V0PlxuPHNreS1mb3JtLWVycm9yc1xuICBjbGFzcz1cInNreS1maWxlLWRyb3AtZXJyb3JzXCJcbiAgW2lkXT1cImVycm9ySWRcIlxuICBbbGFiZWxUZXh0XT1cImxhYmVsVGV4dFwiXG4gIFtzaG93RXJyb3JzXT1cInJlamVjdGVkRmlsZXMubGVuZ3RoXCJcbj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgcmVqZWN0ZWRGaWxlIG9mIHJlamVjdGVkRmlsZXNcIj5cbiAgICA8c2t5LWZvcm0tZXJyb3JcbiAgICAgICpuZ0lmPVwicmVqZWN0ZWRGaWxlLmVycm9yVHlwZSA9PT0gJ2ZpbGVUeXBlJ1wiXG4gICAgICBlcnJvck5hbWU9XCJmaWxlVHlwZVwiXG4gICAgICBbZXJyb3JUZXh0XT1cIlxuICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdHlwZV9lcnJvcl9sYWJlbF90ZXh0X3dpdGhfbmFtZSdcbiAgICAgICAgICB8IHNreUxpYlJlc291cmNlczogcmVqZWN0ZWRGaWxlLmZpbGUubmFtZSA6IHJlamVjdGVkRmlsZS5lcnJvclBhcmFtXG4gICAgICBcIlxuICAgIC8+XG4gICAgPHNreS1mb3JtLWVycm9yXG4gICAgICAqbmdJZj1cInJlamVjdGVkRmlsZS5lcnJvclR5cGUgPT09ICdtYXhGaWxlU2l6ZSdcIlxuICAgICAgZXJyb3JOYW1lPVwibWF4RmlsZVNpemVcIlxuICAgICAgW2Vycm9yVGV4dF09XCJcbiAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9tYXhfZmlsZV9zaXplX2Vycm9yX2xhYmVsX3RleHRfd2l0aF9uYW1lJ1xuICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiByZWplY3RlZEZpbGUuZmlsZS5uYW1lIDogcmVqZWN0ZWRGaWxlLmVycm9yUGFyYW1cbiAgICAgIFwiXG4gICAgLz5cbiAgICA8c2t5LWZvcm0tZXJyb3JcbiAgICAgICpuZ0lmPVwicmVqZWN0ZWRGaWxlLmVycm9yVHlwZSA9PT0gJ21pbkZpbGVTaXplJ1wiXG4gICAgICBlcnJvck5hbWU9XCJtaW5GaWxlU2l6ZVwiXG4gICAgICBbZXJyb3JUZXh0XT1cIlxuICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X21pbl9maWxlX3NpemVfZXJyb3JfbGFiZWxfdGV4dF93aXRoX25hbWUnXG4gICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXM6IHJlamVjdGVkRmlsZS5maWxlLm5hbWUgOiByZWplY3RlZEZpbGUuZXJyb3JQYXJhbVxuICAgICAgXCJcbiAgICAvPlxuICAgIDxza3ktZm9ybS1lcnJvclxuICAgICAgKm5nSWY9XCJyZWplY3RlZEZpbGUuZXJyb3JUeXBlID09PSAndmFsaWRhdGUnICYmIHJlamVjdGVkRmlsZS5lcnJvclBhcmFtXCJcbiAgICAgIGVycm9yTmFtZT1cInZhbGlkYXRlXCJcbiAgICAgIFtlcnJvclRleHRdPVwicmVqZWN0ZWRGaWxlLmZpbGUubmFtZSArICc6ICcgKyByZWplY3RlZEZpbGUuZXJyb3JQYXJhbVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3NreS1mb3JtLWVycm9ycz5cbiJdfQ==
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1kcm9wLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy9zcmMvbGliL21vZHVsZXMvZmlsZS1hdHRhY2htZW50L2ZpbGUtZHJvcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9maWxlLWRyb3AuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNoQixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV4RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7O0FBTXJFLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBRWhDOzs7Ozs7Ozs7R0FTRztBQVVILE1BQU0sT0FBTyxvQkFBb0I7SUFUakM7UUFVRTs7V0FFRztRQUVJLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFFNUQ7O1dB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RSxJQUFJLEVBQUU7U0FDckQsZ0lDaERILG14TkFzTUE7OzJGRHBKYSxvQkFBb0I7a0JBVGhDLFNBQVM7K0JBQ0UsZUFBZSxhQUdkO3dCQUNULHdCQUF3Qjt3QkFDeEIsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtxQkFDckQ7OEJBT00sWUFBWTtzQkFEbEIsTUFBTTtnQkFPQSxhQUFhO3NCQURuQixNQUFNO2dCQU9BLFdBQVc7c0JBRGpCLE1BQU07Z0JBVUEsbUJBQW1CO3NCQUR6QixLQUFLO2dCQVVDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFRSyxXQUFXO3NCQURyQixLQUFLO2dCQWNLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBYUMsUUFBUTtzQkFEZCxLQUFLO2dCQVNDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBU0MsYUFBYTtzQkFEbkIsS0FBSztnQkFPQyxPQUFPO3NCQURiLEtBQUs7Z0JBT0MsVUFBVTtzQkFEaEIsS0FBSztnQkFRQyxTQUFTO3NCQURmLEtBQUs7Z0JBUUMsV0FBVztzQkFEakIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFTL0IsUUFBUTtzQkFEZCxLQUFLO2dCQVlDLFFBQVE7c0JBRGQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJL0IsT0FBTztzQkFEYixTQUFTO3VCQUFDLFdBQVc7Z0JBSWYsT0FBTztzQkFEYixXQUFXO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lMaXZlQW5ub3VuY2VyU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUlkU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNLWV9GT1JNX0VSUk9SU19FTkFCTEVEIH0gZnJvbSAnLi4vZm9ybS1lcnJvci9mb3JtLWVycm9ycy1lbmFibGVkLXRva2VuJztcbmltcG9ydCB7IFNreUZvcm1GaWVsZExhYmVsVGV4dFJlcXVpcmVkU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9mb3JtLWZpZWxkLWxhYmVsLXRleHQtcmVxdWlyZWQuc2VydmljZSc7XG5cbmltcG9ydCB7IFNreUZpbGVBdHRhY2htZW50U2VydmljZSB9IGZyb20gJy4vZmlsZS1hdHRhY2htZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RmlsZUl0ZW0gfSBmcm9tICcuL2ZpbGUtaXRlbSc7XG5pbXBvcnQgeyBTa3lGaWxlTGluayB9IGZyb20gJy4vZmlsZS1saW5rJztcbmltcG9ydCB7IFNreUZpbGVWYWxpZGF0ZUZuIH0gZnJvbSAnLi9maWxlLXZhbGlkYXRlLWZ1bmN0aW9uJztcbmltcG9ydCB7IFNreUZpbGVEcm9wQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9maWxlLWRyb3AtY2hhbmdlJztcblxuY29uc3QgTUFYX0ZJTEVfU0laRV9ERUZBVUxUID0gNTAwMDAwO1xuY29uc3QgTUlOX0ZJTEVfU0laRV9ERUZBVUxUID0gMDtcblxuLyoqXG4gKiBQcm92aWRlcyBhbiBlbGVtZW50IHRvIGF0dGFjaCBtdWx0aXBsZSBmaWxlcyB3aGVyZSB1c2VycyBjYW4gYnJvd3NlIG9yIGRyYWcgYW5kIGRyb3AgbG9jYWwgZmlsZXNcbiAqIG9yIHByb3ZpZGUgaHlwZXJsaW5rcyB0byBleHRlcm5hbCBmaWxlcy4gWW91IGNhbiBsZWF2ZSB0aGUgY29udGVudHMgb2YgdGhlIGNvbXBvbmVudFxuICogYmxhbmsgdG8gZGlzcGxheSB0aGUgZHJvcCB6b25lJ3MgZGVmYXVsdCBVSSwgb3IgeW91IGNhbiBzcGVjaWZ5IGN1c3RvbSBjb250ZW50IHRvXG4gKiBkaXNwbGF5IGluc3RlYWQuIFdoZW4gdGhlIG1vZHVsZSBpbml0aWFsaXplcywgaXQgZGlzYWJsZXMgdGhlIGFiaWxpdHkgdG8gZHJhZyBhbmRcbiAqIGRyb3AgZmlsZXMgZm9yIHRoZSBlbnRpcmUgd2luZG93IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIgZnJvbSBvcGVuaW5nIGZpbGVzIHRoYXQgYXJlXG4gKiBhY2NpZGVudGFsbHkgZHJvcHBlZCBvdXRzaWRlIHRoZSB0YXJnZXQgem9uZS4gSWYgeW91IGltcGxlbWVudCB5b3VyIG93biBmaWxlIGRyb3AgZnVuY3Rpb25hbGl0eVxuICogb3V0c2lkZSBvZiB0aGUgZmlsZSBkcm9wIGNvbXBvbmVudCwgeW91IGNhbiBwbGFjZSB0aGUgYHNreS1maWxlLWRyb3AtdGFyZ2V0YCBDU1MgY2xhc3NcbiAqIG9uIHRoZSBlbGVtZW50IHRoYXQgcmVjZWl2ZXMgZHJvcCBldmVudHMgdG8gZXhlbXB0IGl0IGZyb20gdGhlIGRyb3AgZXhjbHVzaW9uIHJ1bGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1maWxlLWRyb3AnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1kcm9wLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1kcm9wLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIFNreUZpbGVBdHRhY2htZW50U2VydmljZSxcbiAgICB7IHByb3ZpZGU6IFNLWV9GT1JNX0VSUk9SU19FTkFCTEVELCB1c2VWYWx1ZTogdHJ1ZSB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGaWxlRHJvcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgYWRkIG9yIHJlbW92ZSBmaWxlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZmlsZXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lGaWxlRHJvcENoYW5nZT4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgbGluayBpbnB1dCBib3ggdHJpZ2dlcnMgYSBibHVyIGV2ZW50LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBsaW5rSW5wdXRCbHVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGFkZCBvciByZW1vdmUgbGlua3MuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGxpbmtDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lGaWxlTGluaz4oKTtcblxuICAvKipcbiAgICogVGhlIEFSSUEgbGFiZWwgZm9yIHRoZSBmaWxlIHVwbG9hZCBidXR0b24uIFRoaXMgcHJvdmlkZXMgYSB0ZXh0IGVxdWl2YWxlbnQgZm9yXG4gICAqIHNjcmVlbiByZWFkZXJzIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtbGFiZWwpLlxuICAgKiBAZGVmYXVsdCBcIkRyYWcgYSBmaWxlIGhlcmUgb3IgY2xpY2sgdG8gYnJvd3NlXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaWxlVXBsb2FkQXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBBUklBIGxhYmVsIGZvciB0aGUgbGluayB1cGxvYWQgaW5wdXQuIFRoaXMgc2V0cyB0aGUgYnV0dG9uJ3MgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSB0byBwcm92aWRlIGEgdGV4dCBlcXVpdmFsZW50IGZvclxuICAgKiBzY3JlZW4gcmVhZGVycyBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsKS5cbiAgICogQGRlZmF1bHQgXCJMaW5rIHRvIGEgZmlsZVwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbGlua1VwbG9hZEFyaWFMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBzaXplIGluIGJ5dGVzIGZvciB2YWxpZCBmaWxlcy5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5GaWxlU2l6ZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21pbkZpbGVTaXplID0gdmFsdWUgPz8gTUlOX0ZJTEVfU0laRV9ERUZBVUxUO1xuICB9XG5cbiAgcHVibGljIGdldCBtaW5GaWxlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfbWluRmlsZVNpemU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1heGltdW0gc2l6ZSBpbiBieXRlcyBmb3IgdmFsaWQgZmlsZXMuXG4gICAqIEBkZWZhdWx0IDUwMDAwMFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhGaWxlU2l6ZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21heEZpbGVTaXplID0gdmFsdWUgPz8gTUFYX0ZJTEVfU0laRV9ERUZBVUxUO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXhGaWxlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfbWF4RmlsZVNpemU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB1c2VycyBjYW4gZHJhZyBhbmQgZHJvcCBtdWx0aXBsZSBmaWxlcyBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG11bHRpcGxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBUaGlzIHZhbGlkYXRpb24gcnVucyBhbG9uZ3NpZGUgdGhlIGludGVybmFsXG4gICAqIGZpbGUgdmFsaWRhdGlvbi4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGBTa3lGaWxlSXRlbWAgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLlxuICAgKiBUaGUgc3RyaW5nIHJldHVybmVkIGlzIHVzZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2UgaW4gbXVsdGktZmlsZSBhdHRhY2htZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHZhbGlkYXRlRm46IFNreUZpbGVWYWxpZGF0ZUZuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbWEtZGVsaW1pdGVkIHN0cmluZyBsaXRlcmFsIG9mIE1JTUUgdHlwZXMgdGhhdCB1c2VycyBjYW4gYXR0YWNoLlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgZmlsZSB0eXBlcyBhcmUgYWxsb3dlZC5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWNjZXB0ZWRUeXBlczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIG9wdGlvbiB0byBicm93c2UgZm9yIGZpbGVzIHRvIGF0dGFjaC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub0NsaWNrOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgb3B0aW9uIHRvIGF0dGFjaCBmaWxlcyBmcm9tIFVSTHMgcmF0aGVyIHRoYW4gZnJvbSBsb2NhbCBkZXZpY2VzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFsbG93TGlua3M6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgZmlsZSBhdHRhY2htZW50J3MgbGFiZWwuXG4gICAqIEBwcmV2aWV3XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbGFiZWxUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaGlkZSBgbGFiZWxUZXh0YCBmcm9tIHZpZXcuXG4gICAqIEBwcmV2aWV3XG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIGxhYmVsSGlkZGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFtQZXJzaXN0ZW50IGlubGluZSBoZWxwIHRleHRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvZGVzaWduL2d1aWRlbGluZXMvdXNlci1hc3Npc3RhbmNlI2lubGluZS1oZWxwKSB0aGF0IHByb3ZpZGVzXG4gICAqIGFkZGl0aW9uYWwgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICogQHByZXZpZXdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaW50VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHVwbG9hZGluZyBhIGZpbGUgb3IgbGluayBpcyByZXF1aXJlZC5cbiAgICogV2hlbiB5b3Ugc2V0IHRoaXMgcHJvcGVydHkgdG8gYHRydWVgLCB0aGUgY29tcG9uZW50IGFkZHMgYGFyaWEtcmVxdWlyZWRgIGFuZCBgcmVxdWlyZWRgXG4gICAqIGF0dHJpYnV0ZXMgdG8gdGhlIGlucHV0IGVsZW1lbnRzIHNvIHRoYXQgc2NyZWVuIHJlYWRlcnMgYW5ub3VuY2UgYW4gaW52YWxpZCBzdGF0ZSB1bnRpbCB0aGUgaW5wdXQgZWxlbWVudFxuICAgKiBpcyBjb21wbGV0ZS5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLXJlcXVpcmVkYCBhdHRyaWJ1dGUsIHNlZSB0aGUgW1dBSS1BUklBIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1yZXF1aXJlZCkuXG4gICAqIEBwcmV2aWV3XG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JylcbiAgcHVibGljIGlucHV0RWw6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcbiAgcHVibGljIGRpc3BsYXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgcmVqZWN0ZWRPdmVyID0gZmFsc2U7XG4gIHB1YmxpYyBhY2NlcHRlZE92ZXIgPSBmYWxzZTtcbiAgcHVibGljIGxpbmtVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjZW50ZXJFdmVudFRhcmdldDogYW55O1xuXG4gICNfbWF4RmlsZVNpemUgPSBNQVhfRklMRV9TSVpFX0RFRkFVTFQ7XG5cbiAgI19taW5GaWxlU2l6ZSA9IE1JTl9GSUxFX1NJWkVfREVGQVVMVDtcblxuICByZWFkb25seSAjZmlsZUF0dGFjaG1lbnRTZXJ2aWNlID0gaW5qZWN0KFNreUZpbGVBdHRhY2htZW50U2VydmljZSk7XG4gIHJlYWRvbmx5ICNsaXZlQW5ub3VuY2VyU3ZjID0gaW5qZWN0KFNreUxpdmVBbm5vdW5jZXJTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI3Jlc291cmNlc1N2YyA9IGluamVjdChTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2lkU3ZjID0gaW5qZWN0KFNreUlkU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgI2xhYmVsVGV4dFJlcXVpcmVkID0gaW5qZWN0KFNreUZvcm1GaWVsZExhYmVsVGV4dFJlcXVpcmVkU2VydmljZSwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcblxuICBwcm90ZWN0ZWQgZXJyb3JJZCA9IHRoaXMuI2lkU3ZjLmdlbmVyYXRlSWQoKTtcbiAgcHJvdGVjdGVkIHJlamVjdGVkRmlsZXM6IFNreUZpbGVJdGVtW10gPSBbXTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2xhYmVsVGV4dFJlcXVpcmVkICYmICF0aGlzLmxhYmVsVGV4dCkge1xuICAgICAgdGhpcy5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICB0aGlzLiNsYWJlbFRleHRSZXF1aXJlZD8udmFsaWRhdGVMYWJlbFRleHQodGhpcy5sYWJlbFRleHQpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZXNDaGFuZ2VkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5saW5rQ2hhbmdlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubGlua0lucHV0Qmx1ci5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGRyb3BDbGlja2VkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5ub0NsaWNrICYmIHRoaXMuaW5wdXRFbCkge1xuICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsZUNoYW5nZUV2ZW50KGZpbGVDaGFuZ2VFdmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLiNoYW5kbGVGaWxlcyhcbiAgICAgIChmaWxlQ2hhbmdlRXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQpPy5maWxlcyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGZpbGVEcmFnRW50ZXIoZHJhZ0VudGVyRXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIC8vIFNhdmUgdGhpcyB0YXJnZXQgdG8ga25vdyB3aGVuIHRoZSBkcmFnIGV2ZW50IGxlYXZlc1xuICAgIHRoaXMuI2VudGVyRXZlbnRUYXJnZXQgPSBkcmFnRW50ZXJFdmVudC50YXJnZXQ7XG4gICAgZHJhZ0VudGVyRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZHJhZ0VudGVyRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlRHJhZ092ZXIoZHJhZ092ZXJFdmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdHJhbnNmZXIgPSBkcmFnT3ZlckV2ZW50LmRhdGFUcmFuc2ZlcjtcblxuICAgIGRyYWdPdmVyRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZHJhZ092ZXJFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKHRyYW5zZmVyKSB7XG4gICAgICBpZiAodHJhbnNmZXIuaXRlbXMpIHtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBBcnJheS5mcm9tKHRyYW5zZmVyLml0ZW1zKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWxlLnR5cGUgJiZcbiAgICAgICAgICAgIHRoaXMuI2ZpbGVBdHRhY2htZW50U2VydmljZS5maWxlVHlwZVJlamVjdGVkKFxuICAgICAgICAgICAgICBmaWxlLnR5cGUsXG4gICAgICAgICAgICAgIHRoaXMuYWNjZXB0ZWRUeXBlcyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ZWRPdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDAgJiYgIXRoaXMuYWNjZXB0ZWRPdmVyKSB7XG4gICAgICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmFjY2VwdGVkT3ZlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHVudGVzdGFibGUgKi8gZWxzZSBpZiAodHJhbnNmZXIuZmlsZXMpIHtcbiAgICAgICAgLy8gSWYgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBEYXRhVHJhbnNmZXIuaXRlbXMsXG4gICAgICAgIC8vIGRlZmVyIGZpbGUtdHlwZSBjaGVja2luZyB0byBkcm9wIGhhbmRsZXIuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9EYXRhVHJhbnNmZXIvaXRlbXMjQnJvd3Nlcl9jb21wYXRpYmlsaXR5XG4gICAgICAgIHRoaXMucmVqZWN0ZWRPdmVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsZURyb3AoZHJvcEV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBkcm9wRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZHJvcEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLiNlbnRlckV2ZW50VGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVqZWN0ZWRPdmVyID0gZmFsc2U7XG4gICAgdGhpcy5hY2NlcHRlZE92ZXIgPSBmYWxzZTtcblxuICAgIGlmIChkcm9wRXZlbnQuZGF0YVRyYW5zZmVyICYmIGRyb3BFdmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpIHtcbiAgICAgIGNvbnN0IGhhc0RpcmVjdG9yeSA9IHRoaXMuI2ZpbGVBdHRhY2htZW50U2VydmljZS5oYXNEaXJlY3RvcnkoXG4gICAgICAgIGRyb3BFdmVudC5kYXRhVHJhbnNmZXIuZmlsZXMsXG4gICAgICApO1xuICAgICAgY29uc3QgaW52YWxpZE51bWJlck9mRmlsZXMgPVxuICAgICAgICAhdGhpcy5tdWx0aXBsZSAmJiBkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA+IDE7XG5cbiAgICAgIGlmIChoYXNEaXJlY3RvcnkgfHwgaW52YWxpZE51bWJlck9mRmlsZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNoYW5kbGVGaWxlcyhkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsZURyYWdMZWF2ZShkcmFnTGVhdmVFdmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2VudGVyRXZlbnRUYXJnZXQgPT09IGRyYWdMZWF2ZUV2ZW50LnRhcmdldCkge1xuICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZExpbmtFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC53aGljaCA9PT0gMTMpIHtcbiAgICAgIHRoaXMuYWRkTGluayhldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZExpbmsoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmxpbmtDaGFuZ2VkLmVtaXQoeyB1cmw6IHRoaXMubGlua1VybCB9IGFzIFNreUZpbGVMaW5rKTtcbiAgICB0aGlzLiNhbm5vdW5jZVN0YXRlKFxuICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9saW5rX2FkZGVkJyxcbiAgICAgIHRoaXMubGlua1VybCxcbiAgICApO1xuICAgIHRoaXMubGlua1VybCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBvbkxpbmtCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMubGlua0lucHV0Qmx1ci5lbWl0KCk7XG4gIH1cblxuICAjYW5ub3VuY2VTdGF0ZShyZXNvdXJjZVN0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuI3Jlc291cmNlc1N2Y1xuICAgICAgLmdldFN0cmluZyhyZXNvdXJjZVN0cmluZywgLi4uYXJncylcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChpbnRlcm5hdGlvbmFsaXplZFN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLiNsaXZlQW5ub3VuY2VyU3ZjLmFubm91bmNlKGludGVybmF0aW9uYWxpemVkU3RyaW5nKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgI2VtaXRGaWxlQ2hhbmdlRXZlbnQoXG4gICAgdG90YWxGaWxlczogbnVtYmVyLFxuICAgIHJlamVjdGVkRmlsZUFycmF5OiBTa3lGaWxlSXRlbVtdLFxuICAgIHZhbGlkRmlsZUFycmF5OiBTa3lGaWxlSXRlbVtdLFxuICApOiB2b2lkIHtcbiAgICBpZiAodG90YWxGaWxlcyA9PT0gcmVqZWN0ZWRGaWxlQXJyYXkubGVuZ3RoICsgdmFsaWRGaWxlQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbGVzQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgZmlsZXM6IHZhbGlkRmlsZUFycmF5LFxuICAgICAgICByZWplY3RlZEZpbGVzOiByZWplY3RlZEZpbGVBcnJheSxcbiAgICAgIH0gYXMgU2t5RmlsZURyb3BDaGFuZ2UpO1xuXG4gICAgICBpZiAodGhpcy5pbnB1dEVsKSB7XG4gICAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI2ZpbGVzUmVqZWN0ZWQoXG4gICAgZmlsZTogU2t5RmlsZUl0ZW0sXG4gICAgdmFsaWRGaWxlQXJyYXk6IFNreUZpbGVJdGVtW10sXG4gICAgcmVqZWN0ZWRGaWxlQXJyYXk6IFNreUZpbGVJdGVtW10sXG4gICAgdG90YWxGaWxlczogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICByZWplY3RlZEZpbGVBcnJheS5wdXNoKGZpbGUpO1xuICAgIHRoaXMuI2VtaXRGaWxlQ2hhbmdlRXZlbnQodG90YWxGaWxlcywgcmVqZWN0ZWRGaWxlQXJyYXksIHZhbGlkRmlsZUFycmF5KTtcbiAgfVxuXG4gICNsb2FkRmlsZShcbiAgICBmaWxlRHJvcDogU2t5RmlsZURyb3BDb21wb25lbnQsXG4gICAgZmlsZTogU2t5RmlsZUl0ZW0sXG4gICAgdmFsaWRGaWxlQXJyYXk6IFNreUZpbGVJdGVtW10sXG4gICAgcmVqZWN0ZWRGaWxlQXJyYXk6IFNreUZpbGVJdGVtW10sXG4gICAgdG90YWxGaWxlczogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgZmlsZS51cmwgPSBldmVudC50YXJnZXQucmVzdWx0O1xuICAgICAgdmFsaWRGaWxlQXJyYXkucHVzaChmaWxlKTtcbiAgICAgIGZpbGVEcm9wLiNlbWl0RmlsZUNoYW5nZUV2ZW50KFxuICAgICAgICB0b3RhbEZpbGVzLFxuICAgICAgICByZWplY3RlZEZpbGVBcnJheSxcbiAgICAgICAgdmFsaWRGaWxlQXJyYXksXG4gICAgICApO1xuICAgICAgdGhpcy4jYW5ub3VuY2VTdGF0ZShcbiAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9maWxlX2FkZGVkJyxcbiAgICAgICAgZmlsZS5maWxlLm5hbWUsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgZmlsZURyb3AuI2ZpbGVzUmVqZWN0ZWQoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHZhbGlkRmlsZUFycmF5LFxuICAgICAgICByZWplY3RlZEZpbGVBcnJheSxcbiAgICAgICAgdG90YWxGaWxlcyxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICBmaWxlRHJvcC4jZmlsZXNSZWplY3RlZChcbiAgICAgICAgZmlsZSxcbiAgICAgICAgdmFsaWRGaWxlQXJyYXksXG4gICAgICAgIHJlamVjdGVkRmlsZUFycmF5LFxuICAgICAgICB0b3RhbEZpbGVzLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUuZmlsZSk7XG4gIH1cblxuICAjaGFuZGxlRmlsZXMoZmlsZXM/OiBGaWxlTGlzdCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGNvbnN0IHZhbGlkRmlsZUFycmF5OiBTa3lGaWxlSXRlbVtdID0gW107XG4gICAgICBjb25zdCByZWplY3RlZEZpbGVBcnJheTogU2t5RmlsZUl0ZW1bXSA9IFtdO1xuICAgICAgY29uc3QgdG90YWxGaWxlcyA9IGZpbGVzLmxlbmd0aDtcblxuICAgICAgY29uc3QgcHJvY2Vzc2VkRmlsZXMgPSB0aGlzLiNmaWxlQXR0YWNobWVudFNlcnZpY2UuY2hlY2tGaWxlcyhcbiAgICAgICAgZmlsZXMsXG4gICAgICAgIHRoaXMubWluRmlsZVNpemUsXG4gICAgICAgIHRoaXMubWF4RmlsZVNpemUsXG4gICAgICAgIHRoaXMuYWNjZXB0ZWRUeXBlcyxcbiAgICAgICAgdGhpcy52YWxpZGF0ZUZuLFxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHByb2Nlc3NlZEZpbGVzKSB7XG4gICAgICAgIGlmIChmaWxlLmVycm9yVHlwZSkge1xuICAgICAgICAgIHRoaXMuI2ZpbGVzUmVqZWN0ZWQoXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgdmFsaWRGaWxlQXJyYXksXG4gICAgICAgICAgICByZWplY3RlZEZpbGVBcnJheSxcbiAgICAgICAgICAgIHRvdGFsRmlsZXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiNsb2FkRmlsZShcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgdmFsaWRGaWxlQXJyYXksXG4gICAgICAgICAgICByZWplY3RlZEZpbGVBcnJheSxcbiAgICAgICAgICAgIHRvdGFsRmlsZXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJlamVjdGVkRmlsZXMgPSByZWplY3RlZEZpbGVBcnJheTtcbiAgICB9XG4gIH1cbn1cbiIsIjxmaWVsZHNldD5cbiAgPGxlZ2VuZFxuICAgICpuZ0lmPVwibGFiZWxUZXh0XCJcbiAgICBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsIHNreS1mb250LWJvZHktZGVmYXVsdCBza3ktbWFyZ2luLXN0YWNrZWQteHNcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktc2NyZWVuLXJlYWRlci1vbmx5JzogbGFiZWxIaWRkZW4sXG4gICAgICAnc2t5LWNvbnRyb2wtbGFiZWwtcmVxdWlyZWQnOiByZXF1aXJlZFxuICAgIH1cIlxuICA+XG4gICAge3sgbGFiZWxUZXh0XG4gICAgfX08c3BhbiBjbGFzcz1cInNreS1zY3JlZW4tcmVhZGVyLW9ubHlcIiAqbmdJZj1cInJlcXVpcmVkXCI+e3tcbiAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfcmVxdWlyZWQnIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgfX08L3NwYW4+XG4gIDwvbGVnZW5kPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZmlsZS1kcm9wLXJvd1wiXG4gICAgW25nQ2xhc3NdPVwieyAnc2t5LWZpbGUtZHJvcC1hbGxvdy1saW5rcyc6IGFsbG93TGlua3MgfVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1maWxlLWRyb3AtY29sXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3NreS1maWxlLWRyb3AtYWNjZXB0JzogYWNjZXB0ZWRPdmVyLFxuICAgICAgICAnc2t5LWZpbGUtZHJvcC1yZWplY3QnOiByZWplY3RlZE92ZXJcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJza3ktZmlsZS1kcm9wIHNreS1maWxlLWRyb3AtdGFyZ2V0XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJkcm9wQ2xpY2tlZCgpXCJcbiAgICAgICAgKGRyYWdvdmVyKT1cImZpbGVEcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdlbnRlcik9XCJmaWxlRHJhZ0VudGVyKCRldmVudClcIlxuICAgICAgICAoZHJhZ2xlYXZlKT1cImZpbGVEcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgIChkcm9wKT1cImZpbGVEcm9wKCRldmVudClcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgIGZpbGVVcGxvYWRBcmlhTGFiZWwgfHxcbiAgICAgICAgICAoJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9kcmFnX29yX2NsaWNrJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJoaW50VGV4dCA/IGhpbnRUZXh0RWwuaWQgOiB1bmRlZmluZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiISFyZWplY3RlZEZpbGVzLmxlbmd0aFwiXG4gICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cIlxuICAgICAgICAgIGxhYmVsVGV4dCAmJiByZWplY3RlZEZpbGVzLmxlbmd0aCA/IGVycm9ySWQgOiB1bmRlZmluZWRcbiAgICAgICAgXCJcbiAgICAgID48L2J1dHRvbj5cblxuICAgICAgPGlucHV0XG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGNsYXNzPVwic2t5LWZpbGUtaW5wdXQtaGlkZGVuXCJcbiAgICAgICAgW2F0dHIubXVsdGlwbGVdPVwibXVsdGlwbGUgPyBtdWx0aXBsZSA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hY2NlcHRdPVwiYWNjZXB0ZWRUeXBlcyA/IGFjY2VwdGVkVHlwZXMgOiBudWxsXCJcbiAgICAgICAgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICNmaWxlSW5wdXRcbiAgICAgIC8+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJza3ktZmlsZS1kcm9wLWNvbnRlbnRzIHNreS1wYWRkaW5nLWV2ZW4tZGVmYXVsdFwiXG4gICAgICAgICpuZ0lmPVwiY3VzdG9tRWwuY2hpbGRyZW4ubGVuZ3RoID09PSAwXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWRyb3AtY29udGVudHMtbm90LW92ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtZHJvcC10ZXh0LWhlYWRlciBza3ktZm9udC1kaXNwbGF5LTNcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfZHJhZ19maWxlX2hlcmUnXG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWRyb3AtdGV4dFwiPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9vcl9jbGlja190b19icm93c2UnXG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNreS1pY29uIGljb249XCJjbG91ZC11cGxvYWRcIiBjbGFzcz1cInNreS1maWxlLXVwbG9hZC1pY29uXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBUaGlzIHdpbGwgYXBwZWFyIHdoZW4gZmlsZSBpcyBkcmFnZ2VkIG92ZXIgYW5kIGlzIHZhbGlkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtZHJvcC1jb250ZW50cy1hY2NlcHRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtZHJvcC10ZXh0LWhlYWRlciBza3ktZm9udC1kaXNwbGF5LTNcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfZHJvcF9maWxlc19oZXJlJ1xuICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxza3ktaWNvbiBpY29uPVwiYnVsbHNleWVcIiBjbGFzcz1cInNreS1maWxlLXVwbG9hZC1pY29uXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBUaGlzIHdpbGwgYXBwZWFyIHdoZW4gZmlsZSBpcyBkcmFnZ2VkIG92ZXIgYW5kIGlzIGludmFsaWQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktZmlsZS1kcm9wLWNvbnRlbnRzLXJlamVjdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJza3ktZmlsZS1kcm9wLXRleHQtaGVhZGVyIHNreS1mb250LWRpc3BsYXktM1wiPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGUnIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxza3ktaWNvbiBpY29uPVwidGltZXMtY2lyY2xlXCIgY2xhc3M9XCJza3ktZmlsZS11cGxvYWQtaWNvblwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJza3ktZmlsZS1kcm9wLWNvbnRlbnRzLWN1c3RvbVwiICNjdXN0b21FbD5cbiAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJza3ktZmlsZS1kcm9wLWNvbFwiICpuZ0lmPVwiYWxsb3dMaW5rc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWRyb3AtY29udGVudHMgc2t5LXBhZGRpbmctZXZlbi1kZWZhdWx0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktZmlsZS1kcm9wLWxpbmtcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtZHJvcC1saW5rLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWRyb3AtdGV4dC1oZWFkZXIgc2t5LWZvbnQtZGlzcGxheS0zXCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9saW5rX2xhYmVsJyB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNreS1tYXJnaW4tc3RhY2tlZC14c1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICBsaW5rVXBsb2FkQXJpYUxhYmVsIHx8XG4gICAgICAgICAgICAgICAgKCdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfbGlua19sYWJlbCdcbiAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cInVwbG9hZEhpbnRUZXh0LmlkXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cIiEhcmVqZWN0ZWRGaWxlcy5sZW5ndGhcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJcbiAgICAgICAgICAgICAgICBsYWJlbFRleHQgJiYgcmVqZWN0ZWRGaWxlcy5sZW5ndGggPyBlcnJvcklkIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibGlua1VybFwiXG4gICAgICAgICAgICAgIChibHVyKT1cIm9uTGlua0JsdXIoKVwiXG4gICAgICAgICAgICAgIChrZXl1cCk9XCJhZGRMaW5rRW50ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHNreUlkXG4gICAgICAgICAgICAjdXBsb2FkSGludFRleHQ9XCJza3lJZFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1mb250LWRlZW1waGFzaXplZCBza3ktZmlsZS1kcm9wLWhpbnQtdGV4dCBza3ktbWFyZ2luLXN0YWNrZWQtc21cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfbGlua19wbGFjZWhvbGRlcidcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLXByaW1hcnlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFsaW5rVXJsXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRMaW5rKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfbGlua19kb25lJyB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgc2t5SWQgI2hpbnRUZXh0RWw9XCJza3lJZFwiPlxuICAgIDxkaXYgKm5nSWY9XCJoaW50VGV4dFwiIGNsYXNzPVwic2t5LWZvbnQtZGVlbXBoYXNpemVkIHNreS1maWxlLWRyb3AtaGludC10ZXh0XCI+XG4gICAgICB7eyBoaW50VGV4dCB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZmllbGRzZXQ+XG48c2t5LWZvcm0tZXJyb3JzXG4gIGNsYXNzPVwic2t5LWZpbGUtZHJvcC1lcnJvcnNcIlxuICBbaWRdPVwiZXJyb3JJZFwiXG4gIFtsYWJlbFRleHRdPVwibGFiZWxUZXh0XCJcbiAgW3Nob3dFcnJvcnNdPVwicmVqZWN0ZWRGaWxlcy5sZW5ndGhcIlxuPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCByZWplY3RlZEZpbGUgb2YgcmVqZWN0ZWRGaWxlc1wiPlxuICAgIDxza3ktZm9ybS1lcnJvclxuICAgICAgKm5nSWY9XCJyZWplY3RlZEZpbGUuZXJyb3JUeXBlID09PSAnZmlsZVR5cGUnXCJcbiAgICAgIGVycm9yTmFtZT1cImZpbGVUeXBlXCJcbiAgICAgIFtlcnJvclRleHRdPVwiXG4gICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV90eXBlX2Vycm9yX2xhYmVsX3RleHRfd2l0aF9uYW1lJ1xuICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiByZWplY3RlZEZpbGUuZmlsZS5uYW1lIDogcmVqZWN0ZWRGaWxlLmVycm9yUGFyYW1cbiAgICAgIFwiXG4gICAgLz5cbiAgICA8c2t5LWZvcm0tZXJyb3JcbiAgICAgICpuZ0lmPVwicmVqZWN0ZWRGaWxlLmVycm9yVHlwZSA9PT0gJ21heEZpbGVTaXplJ1wiXG4gICAgICBlcnJvck5hbWU9XCJtYXhGaWxlU2l6ZVwiXG4gICAgICBbZXJyb3JUZXh0XT1cIlxuICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X21heF9maWxlX3NpemVfZXJyb3JfbGFiZWxfdGV4dF93aXRoX25hbWUnXG4gICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXM6IHJlamVjdGVkRmlsZS5maWxlLm5hbWUgOiByZWplY3RlZEZpbGUuZXJyb3JQYXJhbVxuICAgICAgXCJcbiAgICAvPlxuICAgIDxza3ktZm9ybS1lcnJvclxuICAgICAgKm5nSWY9XCJyZWplY3RlZEZpbGUuZXJyb3JUeXBlID09PSAnbWluRmlsZVNpemUnXCJcbiAgICAgIGVycm9yTmFtZT1cIm1pbkZpbGVTaXplXCJcbiAgICAgIFtlcnJvclRleHRdPVwiXG4gICAgICAgICdza3l1eF9maWxlX2F0dGFjaG1lbnRfbWluX2ZpbGVfc2l6ZV9lcnJvcl9sYWJlbF90ZXh0X3dpdGhfbmFtZSdcbiAgICAgICAgICB8IHNreUxpYlJlc291cmNlczogcmVqZWN0ZWRGaWxlLmZpbGUubmFtZSA6IHJlamVjdGVkRmlsZS5lcnJvclBhcmFtXG4gICAgICBcIlxuICAgIC8+XG4gICAgPHNreS1mb3JtLWVycm9yXG4gICAgICAqbmdJZj1cInJlamVjdGVkRmlsZS5lcnJvclR5cGUgPT09ICd2YWxpZGF0ZScgJiYgcmVqZWN0ZWRGaWxlLmVycm9yUGFyYW1cIlxuICAgICAgZXJyb3JOYW1lPVwidmFsaWRhdGVcIlxuICAgICAgW2Vycm9yVGV4dF09XCJyZWplY3RlZEZpbGUuZmlsZS5uYW1lICsgJzogJyArIHJlamVjdGVkRmlsZS5lcnJvclBhcmFtXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvc2t5LWZvcm0tZXJyb3JzPlxuIl19
|
|
@@ -4,6 +4,7 @@ import { FormControlDirective, FormControlName, NgModel, Validators, } from '@an
|
|
|
4
4
|
import { SkyContentInfoProvider, SkyIdService } from '@skyux/core';
|
|
5
5
|
import { ReplaySubject } from 'rxjs';
|
|
6
6
|
import { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';
|
|
7
|
+
import { SkyFormFieldLabelTextRequiredService } from '../shared/form-field-label-text-required.service';
|
|
7
8
|
import { SkyInputBoxAdapterService } from './input-box-adapter.service';
|
|
8
9
|
import { SkyInputBoxControlDirective } from './input-box-control.directive';
|
|
9
10
|
import { SkyInputBoxHostService } from './input-box-host.service';
|
|
@@ -26,6 +27,9 @@ export class SkyInputBoxComponent {
|
|
|
26
27
|
this.#idSvc = inject(SkyIdService);
|
|
27
28
|
this.#elementRef = inject(ElementRef);
|
|
28
29
|
this.#renderer = inject(Renderer2);
|
|
30
|
+
this.#labelTextRequired = inject(SkyFormFieldLabelTextRequiredService, {
|
|
31
|
+
optional: true,
|
|
32
|
+
});
|
|
29
33
|
this.formControlHasFocus = false;
|
|
30
34
|
this.hintTextHidden = false;
|
|
31
35
|
this.hintTextScreenReaderOnly = false;
|
|
@@ -43,6 +47,7 @@ export class SkyInputBoxComponent {
|
|
|
43
47
|
#idSvc;
|
|
44
48
|
#elementRef;
|
|
45
49
|
#renderer;
|
|
50
|
+
#labelTextRequired;
|
|
46
51
|
/**
|
|
47
52
|
* The maximum number of characters allowed in the input. A [SKY UX character count](https://developer.blackbaud.com/skyux/components/character-count)
|
|
48
53
|
* will be placed on the input element with the appropriate validator.
|
|
@@ -95,6 +100,10 @@ export class SkyInputBoxComponent {
|
|
|
95
100
|
#previousMaxLengthValidator;
|
|
96
101
|
ngOnInit() {
|
|
97
102
|
this.#inputBoxHostSvc.init(this);
|
|
103
|
+
if (this.#labelTextRequired && !this.labelText) {
|
|
104
|
+
this.display = 'none';
|
|
105
|
+
}
|
|
106
|
+
this.#labelTextRequired?.validateLabelText(this.labelText);
|
|
98
107
|
}
|
|
99
108
|
ngAfterContentChecked() {
|
|
100
109
|
this.controlDir =
|
|
@@ -202,7 +211,7 @@ export class SkyInputBoxComponent {
|
|
|
202
211
|
}
|
|
203
212
|
}
|
|
204
213
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyInputBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
205
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyInputBoxComponent, selector: "sky-input-box", inputs: { hasErrors: "hasErrors", disabled: "disabled", labelText: "labelText", characterLimit: "characterLimit", stacked: "stacked", helpPopoverTitle: "helpPopoverTitle", helpPopoverContent: "helpPopoverContent", hintText: "hintText" }, host: { properties: { "class": "this.cssClass" } }, providers: [
|
|
214
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyInputBoxComponent, selector: "sky-input-box", inputs: { hasErrors: "hasErrors", disabled: "disabled", labelText: "labelText", characterLimit: "characterLimit", stacked: "stacked", helpPopoverTitle: "helpPopoverTitle", helpPopoverContent: "helpPopoverContent", hintText: "hintText" }, host: { properties: { "class": "this.cssClass", "style.display": "this.display" } }, providers: [
|
|
206
215
|
SkyContentInfoProvider,
|
|
207
216
|
SkyInputBoxAdapterService,
|
|
208
217
|
SkyInputBoxHostService,
|
|
@@ -242,6 +251,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
242
251
|
}], cssClass: [{
|
|
243
252
|
type: HostBinding,
|
|
244
253
|
args: ['class']
|
|
254
|
+
}], display: [{
|
|
255
|
+
type: HostBinding,
|
|
256
|
+
args: ['style.display']
|
|
245
257
|
}], formControl: [{
|
|
246
258
|
type: ContentChild,
|
|
247
259
|
args: [FormControlDirective]
|
|
@@ -257,4 +269,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
257
269
|
read: ElementRef,
|
|
258
270
|
}]
|
|
259
271
|
}] } });
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy9zcmMvbGliL21vZHVsZXMvaW5wdXQtYm94L2lucHV0LWJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2lucHV0LWJveC9pbnB1dC1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHFCQUFxQixFQUNyQixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBR0wsU0FBUyxFQUVULGlCQUFpQixFQUNqQixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsT0FBTyxFQUVQLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7O0FBR2xFOztHQUVHO0FBa0JILE1BQU0sT0FBTyxvQkFBb0I7SUFqQmpDO1FBb0JFLGVBQVUsR0FBRyxNQUFNLENB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QUFDLGVBQWU7Z0JBSXRCLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPO2dCQU1kLFFBQVE7c0JBSGQsWUFBWTt1QkFBQywyQkFBMkIsRUFBRTt3QkFDekMsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQm9vbGVhbklucHV0LFxuICBOdW1iZXJJbnB1dCxcbiAgY29lcmNlQm9vbGVhblByb3BlcnR5LFxuICBjb2VyY2VOdW1iZXJQcm9wZXJ0eSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2xEaXJlY3RpdmUsXG4gIEZvcm1Db250cm9sRGlyZWN0aXZlLFxuICBGb3JtQ29udHJvbE5hbWUsXG4gIE5nTW9kZWwsXG4gIFZhbGlkYXRvckZuLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lDb250ZW50SW5mb1Byb3ZpZGVyLCBTa3lJZFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQgfSBmcm9tICcuLi9mb3JtLWVycm9yL2Zvcm0tZXJyb3JzLWVuYWJsZWQtdG9rZW4nO1xuXG5pbXBvcnQgeyBTa3lJbnB1dEJveEFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9pbnB1dC1ib3gtYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreUlucHV0Qm94Q29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4vaW5wdXQtYm94LWNvbnRyb2wuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNreUlucHV0Qm94SG9zdFNlcnZpY2UgfSBmcm9tICcuL2lucHV0LWJveC1ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hQb3B1bGF0ZUFyZ3MgfSBmcm9tICcuL2lucHV0LWJveC1wb3B1bGF0ZS1hcmdzJztcblxuLyoqXG4gKiBBIHdyYXBwZXIgY29tcG9uZW50IHRoYXQgcHJvdmlkZXMgc3R5bGluZyBhbmQgYWNjZXNzaWJpbGl0eSB0byBmb3JtIGVsZW1lbnRzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktaW5wdXQtYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWJveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LWJveC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBTa3lDb250ZW50SW5mb1Byb3ZpZGVyLFxuICAgIFNreUlucHV0Qm94QWRhcHRlclNlcnZpY2UsXG4gICAgU2t5SW5wdXRCb3hIb3N0U2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCxcbiAgICAgIHVzZVZhbHVlOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIC8vIE5vdGUgdGhhdCBjaGFuZ2UgZGV0ZWN0aW9uIGlzIG5vdCBzZXQgdG8gT25QdXNoOyBkZWZhdWx0IGNoYW5nZSBkZXRlY3Rpb24gYWxsb3dzIHRoZVxuICAvLyBpbnZhbGlkIENTUyBjbGFzcyB0byBiZSBhZGRlZCB3aGVuIHRoZSBjb250ZW50IGNvbnRyb2wncyBpbnZhbGlkL2RpcnR5IHN0YXRlIGNoYW5nZXMuXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFNreUlucHV0Qm94Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkRlc3Ryb3lcbntcbiAgI2NoYW5nZVJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICNpbnB1dEJveEhvc3RTdmMgPSBpbmplY3QoU2t5SW5wdXRCb3hIb3N0U2VydmljZSk7XG4gICNhZGFwdGVyU2VydmljZSA9IGluamVjdChTa3lJbnB1dEJveEFkYXB0ZXJTZXJ2aWNlKTtcbiAgI2lkU3ZjID0gaW5qZWN0KFNreUlkU2VydmljZSk7XG4gICNlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAjcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICAvKipcbiAgICogV2hldGhlciB0byB2aXN1YWxseSBoaWdobGlnaHQgdGhlIGlucHV0IGJveCBpbiBhbiBlcnJvciBzdGF0ZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGlucHV0IGJveFxuICAgKiBkaXNwbGF5cyBpbiBhbiBlcnJvciBzdGF0ZSB3aGVuIGVpdGhlciB0aGUgYG5nTW9kZWxgIG9yIHRoZSBBbmd1bGFyIGBGb3JtQ29udHJvbGAgY29udGFpbnMgYW4gZXJyb3IuXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhhc0Vycm9yczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byB2aXN1YWxseSBoaWdobGlnaHQgdGhlIGlucHV0IGJveCBhcyBkaXNhYmxlZC4gVG8gZGlzYWJsZSB0aGUgaW5wdXQgYm94J3NcbiAgICogaW5wdXQgZWxlbWVudCwgdXNlIHRoZSBIVE1MIGBkaXNhYmxlZGAgYXR0cmlidXRlIG9yIHRoZSBBbmd1bGFyIGBGb3JtQ29udHJvbC5kaXNhYmxlZGBcbiAgICogcHJvcGVydHkuIElmIHRoZSBpbnB1dCBlbGVtZW50IGlzIG1hcHBlZCB0byBhbiBBbmd1bGFyIGZvcm0gY29udHJvbFxuICAgKiAoZS5nLiBgZm9ybUNvbnRyb2xOYW1lYCwgYG5nTW9kZWxgLCBldGMuKSwgXCJkaXNhYmxlZFwiIHN0eWxlcyBhcmUgYXBwbGllZCBhdXRvbWF0aWNhbGx5O1xuICAgKiBpZiB0aGUgaW5wdXQgZWxlbWVudCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFuIEFuZ3VsYXIgZm9ybSBjb250cm9sLCB0aGUgYGRpc2FibGVkYFxuICAgKiBwcm9wZXJ0eSBvbiB0aGUgaW5wdXQgYm94IG11c3QgYmUgc2V0IHRvIGB0cnVlYCB0byB2aXN1YWxseSBpbmRpY2F0ZVxuICAgKiB0aGUgZGlzYWJsZWQgc3RhdGUgb24gdGhlIGlucHV0IGJveC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgaW5wdXQncyBsYWJlbCBhbmQgaW4ga25vd24gdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcy4gVGhlIGxhYmVsXG4gICAqIHdpbGwgYXV0b21hdGljYWxseSBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGBpbnB1dGAsIGBzZWxlY3RgLCBgdGV4dGFyZWFgLCBvciBjb21wYXRpYmxlIFNLWSBVWFxuICAgKiBjb21wb25lbnQgaW5jbHVkZWQgaW4gdGhlIGlucHV0IGJveC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsYWJlbFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgaW5wdXQuIEEgW1NLWSBVWCBjaGFyYWN0ZXIgY291bnRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9jaGFyYWN0ZXItY291bnQpXG4gICAqIHdpbGwgYmUgcGxhY2VkIG9uIHRoZSBpbnB1dCBlbGVtZW50IHdpdGggdGhlIGFwcHJvcHJpYXRlIHZhbGlkYXRvci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY2hhcmFjdGVyTGltaXQodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy4jX2NoYXJhY3RlckxpbWl0ID1cbiAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdW5kZWZpbmVkKTtcblxuICAgIHRoaXMuI3VwZGF0ZU1heExlbmd0aFZhbGlkYXRvcigpO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGFyYWN0ZXJMaW1pdCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfY2hhcmFjdGVyTGltaXQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaW5wdXQgYm94IGlzIHN0YWNrZWQgb24gYW5vdGhlciBpbnB1dCBib3guIFdoZW4gc3BlY2lmaWVkLCB0aGUgYXBwcm9wcmlhdGVcbiAgICogdmVydGljYWwgc3BhY2luZyBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBpbnB1dCBib3guXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0YWNrZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuI19zdGFja2VkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLmNzc0NsYXNzID0gdGhpcy4jX3N0YWNrZWQgPyAnc2t5LW1hcmdpbi1zdGFja2VkLWxnJyA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgaGVscCBwb3BvdmVyLiBUaGlzIHByb3BlcnR5IG9ubHkgYXBwbGllcyB3aGVuIGBoZWxwUG9wb3ZlckNvbnRlbnRgIGlzXG4gICAqIGFsc28gc3BlY2lmaWVkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlbHBQb3BvdmVyVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGhlbHAgcG9wb3Zlci4gV2hlbiBzcGVjaWZpZWQsIGEgW2hlbHAgaW5saW5lXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaGVscC1pbmxpbmUpXG4gICAqIGJ1dHRvbiBpcyBhZGRlZCB0byB0aGUgaW5wdXQgYm94IGxhYmVsLiBUaGUgaGVscCBpbmxpbmUgYnV0dG9uIGRpc3BsYXlzIGEgW3BvcG92ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9wb3BvdmVyKVxuICAgKiB3aGVuIGNsaWNrZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBjb250ZW50IGFuZCBvcHRpb25hbCB0aXRsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwUG9wb3ZlckNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBbUGVyc2lzdGVudCBpbmxpbmUgaGVscCB0ZXh0XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2Rlc2lnbi9ndWlkZWxpbmVzL3VzZXItYXNzaXN0YW5jZSNpbmxpbmUtaGVscCkgdGhhdCBwcm92aWRlc1xuICAgKiBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhpbnRUZXh0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfaGludFRleHQgPSB2YWx1ZTtcblxuICAgIHRoaXMuYXJpYURlc2NyaWJlZEJ5Lm5leHQodmFsdWUgPyB0aGlzLmhpbnRUZXh0SWQgOiB1bmRlZmluZWQpO1xuICB9XG5cbiAgcHVibGljIGdldCBoaW50VGV4dCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaGludFRleHQ7XG4gIH1cblxuICBwdWJsaWMgaG9zdElucHV0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBob3N0QnV0dG9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgaG9zdEJ1dHRvbnNJbnNldFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgaG9zdEJ1dHRvbnNMZWZ0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBmb3JtQ29udHJvbEhhc0ZvY3VzID0gZmFsc2U7XG5cbiAgcHVibGljIGhvc3RJY29uc0luc2V0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBob3N0SWNvbnNJbnNldExlZnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIGhpbnRUZXh0SGlkZGVuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGhpbnRUZXh0U2NyZWVuUmVhZGVyT25seSA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBob3N0SGludFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgcmVhZG9ubHkgY29udHJvbElkID0gdGhpcy4jaWRTdmMuZ2VuZXJhdGVJZCgpO1xuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JJZCA9IHRoaXMuI2lkU3ZjLmdlbmVyYXRlSWQoKTtcbiAgcHVibGljIHJlYWRvbmx5IGhpbnRUZXh0SWQgPSB0aGlzLiNpZFN2Yy5nZW5lcmF0ZUlkKCk7XG4gIHB1YmxpYyByZWFkb25seSBhcmlhRGVzY3JpYmVkQnkgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KDEpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBwdWJsaWMgY3NzQ2xhc3MgPSAnJztcblxuICBAQ29udGVudENoaWxkKEZvcm1Db250cm9sRGlyZWN0aXZlKVxuICBwdWJsaWMgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG4gIEBDb250ZW50Q2hpbGQoRm9ybUNvbnRyb2xOYW1lKVxuICBwdWJsaWMgZm9ybUNvbnRyb2xCeU5hbWU6IEZvcm1Db250cm9sTmFtZSB8IHVuZGVmaW5lZDtcblxuICBAQ29udGVudENoaWxkKE5nTW9kZWwpXG4gIHB1YmxpYyBuZ01vZGVsOiBOZ01vZGVsIHwgdW5kZWZpbmVkO1xuXG4gIEBDb250ZW50Q2hpbGQoU2t5SW5wdXRCb3hDb250cm9sRGlyZWN0aXZlLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgfSlcbiAgcHVibGljIGlucHV0UmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBjb250cm9sRGlyOiBBYnN0cmFjdENvbnRyb2xEaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBoZWxwUG9wb3Zlck9wZW46IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMuY29udHJvbERpcj8uY29udHJvbD8uZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmRpc2FibGVkXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaGFzRXJyb3JzQ29tcHV0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3JzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLiNjb250cm9sSGFzRXJyb3JzKHRoaXMuY29udHJvbERpcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFzRXJyb3JzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy4jaGFzUmVxdWlyZWRWYWxpZGF0b3IoKSB8fCB0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50LnJlcXVpcmVkXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGFyYWN0ZXJDb3VudFNjcmVlblJlYWRlciA9IDA7XG5cbiAgI19zdGFja2VkID0gZmFsc2U7XG4gICNfY2hhcmFjdGVyTGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgI19oaW50VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNwcmV2aW91c0lucHV0UmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuICAjcHJldmlvdXNNYXhMZW5ndGhWYWxpZGF0b3I6IFZhbGlkYXRvckZuIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNpbnB1dEJveEhvc3RTdmMuaW5pdCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sRGlyID1cbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgfHwgdGhpcy5mb3JtQ29udHJvbEJ5TmFtZSB8fCB0aGlzLm5nTW9kZWw7XG5cbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2xIYXNGb2N1cykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXJDb3VudFNjcmVlblJlYWRlciA9IHRoaXMuY29udHJvbERpcj8udmFsdWU/Lmxlbmd0aCB8fCAwO1xuICAgIH1cblxuICAgIHRoaXMuI3VwZGF0ZUlucHV0UmVmKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hcmlhRGVzY3JpYmVkQnkuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtQ29udHJvbEZvY3VzSW4oKTogdm9pZCB7XG4gICAgY29uc3QgaW5saW5lSGVscEVsID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0SW5saW5lSGVscEVsZW1lbnQoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLFxuICAgICk7XG4gICAgaWYgKCF0aGlzLiNhZGFwdGVyU2VydmljZS5pc0ZvY3VzSW5FbGVtZW50KGlubGluZUhlbHBFbCkpIHtcbiAgICAgIHRoaXMuI3VwZGF0ZUhhc0ZvY3VzKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtQ29udHJvbEZvY3VzT3V0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhcmFjdGVyQ291bnRTY3JlZW5SZWFkZXIgPSB0aGlzLmNvbnRyb2xEaXI/LnZhbHVlPy5sZW5ndGggfHwgMDtcbiAgICB0aGlzLiN1cGRhdGVIYXNGb2N1cyhmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25JbnNldEljb25DbGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZm9jdXNDb250cm9sKHRoaXMuI2VsZW1lbnRSZWYpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwb3B1bGF0ZShhcmdzOiBTa3lJbnB1dEJveFBvcHVsYXRlQXJncyk6IHZvaWQge1xuICAgIHRoaXMuaG9zdElucHV0VGVtcGxhdGUgPSBhcmdzLmlucHV0VGVtcGxhdGU7XG4gICAgdGhpcy5ob3N0QnV0dG9uc1RlbXBsYXRlID0gYXJncy5idXR0b25zVGVtcGxhdGU7XG4gICAgdGhpcy5ob3N0QnV0dG9uc0xlZnRUZW1wbGF0ZSA9IGFyZ3MuYnV0dG9uc0xlZnRUZW1wbGF0ZTtcbiAgICB0aGlzLmhvc3RCdXR0b25zSW5zZXRUZW1wbGF0ZSA9IGFyZ3MuYnV0dG9uc0luc2V0VGVtcGxhdGU7XG4gICAgdGhpcy5ob3N0SWNvbnNJbnNldFRlbXBsYXRlID0gYXJncy5pY29uc0luc2V0VGVtcGxhdGU7XG4gICAgdGhpcy5ob3N0SWNvbnNJbnNldExlZnRUZW1wbGF0ZSA9IGFyZ3MuaWNvbnNJbnNldExlZnRUZW1wbGF0ZTtcbiAgICB0aGlzLiNjaGFuZ2VSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SGludFRleHRIaWRkZW4oaGlkZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaGludFRleHRIaWRkZW4gPSBoaWRlO1xuICAgIHRoaXMuI2NoYW5nZVJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIb3N0SGludFRleHQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuaG9zdEhpbnRUZXh0ID0gdmFsdWU7XG4gICAgdGhpcy4jY2hhbmdlUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIHNldEhpbnRUZXh0U2NyZWVuUmVhZGVyT25seShoaWRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5oaW50VGV4dFNjcmVlblJlYWRlck9ubHkgPSBoaWRlO1xuICAgIHRoaXMuI2NoYW5nZVJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNoYXNSZXF1aXJlZFZhbGlkYXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbnRyb2xEaXI/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuXG4gICN1cGRhdGVIYXNGb2N1cyhoYXNGb2N1czogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFNvbWUgY29tcG9uZW50cyBtYW5pcHVsYXRlIHRoZSBmb2N1cyBvZiBlbGVtZW50cyBpbnNpZGUgYW4gaW5wdXQgYm94IHByb2dyYW1tYXRpY2FsbHksXG4gICAgLy8gd2hpY2ggY2FuIGNhdXNlIGFuIGBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yYCBpZiBmb2N1cyB3YXMgc2V0IGFmdGVyXG4gICAgLy8gaW5pdGlhbCBjaGFuZ2UgZGV0ZWN0aW9uLiBVc2luZyBgc2V0VGltZW91dCgpYCBoZXJlIGZpeGVzIGl0LlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbEhhc0ZvY3VzID0gaGFzRm9jdXM7XG4gICAgICB0aGlzLiNjaGFuZ2VSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICAjY29udHJvbEhhc0Vycm9ycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2xEaXJlY3RpdmUgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoY29udHJvbCAmJiBjb250cm9sLmludmFsaWQgJiYgKGNvbnRyb2wuZGlydHkgfHwgY29udHJvbC50b3VjaGVkKSk7XG4gIH1cblxuICAjdXBkYXRlSW5wdXRSZWYoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlucHV0UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIC8vIENoZWNrIGZvciB0aGUgQW5ndWxhciByZXF1aXJlZCB2YWxpZGF0b3IgYW5kIGFkZCBhbiBhcmlhLXJlcXVpcmVkIGF0dHJpYnV0ZVxuICAgIC8vIHRvIG1hdGNoLiBGb3IgdGVtcGxhdGUtZHJpdmVuIGZvcm1zLCB0aGUgaW5wdXQgd2lsbCBoYXZlIGEgYHJlcXVpcmVkYCBhdHRyaWJ1dGVcbiAgICAvLyBzbyB0aGUgYXJpYS1yZXF1aXJlZCBhdHRyaWJ1dGUgaXMgdW5uZWNlc3NhcnkuXG4gICAgY29uc3QgaGFzUmVxdWlyZWRWYWxpZGF0b3IgPSB0aGlzLiNoYXNSZXF1aXJlZFZhbGlkYXRvcigpO1xuICAgIGNvbnN0IGFyaWFSZXF1aXJlZCA9IGlucHV0RWwuYXJpYVJlcXVpcmVkO1xuXG4gICAgaWYgKGhhc1JlcXVpcmVkVmFsaWRhdG9yICYmIGFyaWFSZXF1aXJlZCAhPT0gJ3RydWUnKSB7XG4gICAgICBpbnB1dEVsLmFyaWFSZXF1aXJlZCA9ICd0cnVlJztcbiAgICB9IGVsc2UgaWYgKCFoYXNSZXF1aXJlZFZhbGlkYXRvciAmJiBhcmlhUmVxdWlyZWQgPT09ICd0cnVlJykge1xuICAgICAgaW5wdXRFbC5hcmlhUmVxdWlyZWQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0Vycm9yc0NvbXB1dGVkKSB7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoaW5wdXRFbCwgJ2FyaWEtaW52YWxpZCcsICd0cnVlJyk7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoaW5wdXRFbCwgJ2FyaWEtZXJyb3JtZXNzYWdlJywgdGhpcy5lcnJvcklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGlucHV0RWwsICdhcmlhLWludmFsaWQnKTtcbiAgICAgIHRoaXMuI3JlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShpbnB1dEVsLCAnYXJpYS1lcnJvcm1lc3NhZ2UnKTtcbiAgICB9XG5cbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS51cGRhdGVEZXNjcmliZWRCeShcbiAgICAgIHRoaXMuaW5wdXRSZWYsXG4gICAgICB0aGlzLmhpbnRUZXh0SWQsXG4gICAgICB0aGlzLmhpbnRUZXh0ID8/IHRoaXMuaG9zdEhpbnRUZXh0LFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5pbnB1dFJlZiAhPT0gdGhpcy4jcHJldmlvdXNJbnB1dFJlZikge1xuICAgICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoaW5wdXRFbCwgJ3NreS1mb3JtLWNvbnRyb2wnKTtcbiAgICAgIHRoaXMuI3JlbmRlcmVyLnNldEF0dHJpYnV0ZShpbnB1dEVsLCAnaWQnLCB0aGlzLmNvbnRyb2xJZCk7XG5cbiAgICAgIHRoaXMuI3VwZGF0ZU1heExlbmd0aFZhbGlkYXRvcigpO1xuXG4gICAgICB0aGlzLiNwcmV2aW91c0lucHV0UmVmID0gdGhpcy5pbnB1dFJlZjtcbiAgICB9XG4gIH1cblxuICAjdXBkYXRlTWF4TGVuZ3RoVmFsaWRhdG9yKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2xEaXI/LmNvbnRyb2w7XG5cbiAgICBpZiAodGhpcy4jcHJldmlvdXNNYXhMZW5ndGhWYWxpZGF0b3IpIHtcbiAgICAgIGNvbnRyb2w/LnJlbW92ZVZhbGlkYXRvcnModGhpcy4jcHJldmlvdXNNYXhMZW5ndGhWYWxpZGF0b3IpO1xuICAgICAgdGhpcy4jcHJldmlvdXNNYXhMZW5ndGhWYWxpZGF0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wgJiYgdGhpcy5jaGFyYWN0ZXJMaW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLiNwcmV2aW91c01heExlbmd0aFZhbGlkYXRvciA9IFZhbGlkYXRvcnMubWF4TGVuZ3RoKFxuICAgICAgICB0aGlzLmNoYXJhY3RlckxpbWl0LFxuICAgICAgKTtcblxuICAgICAgY29udHJvbC5hZGRWYWxpZGF0b3JzKFt0aGlzLiNwcmV2aW91c01heExlbmd0aFZhbGlkYXRvcl0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAqc2t5VGhlbWVJZj1cIidkZWZhdWx0J1wiXG4gIGNsYXNzPVwic2t5LWlucHV0LWJveFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnc2t5LWlucHV0LWJveC1kaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJza3ktZm9ybS1ncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJza3ktaW5wdXQtYm94LWxhYmVsLXdyYXBwZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbFRlbXBsYXRlXCIgLz48bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5saW5lSGVscFRlbXBsYXRlXCJcbiAgICAgIC8+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hhcmFjdGVyQ291bnRUZW1wbGF0ZVwiIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNreS1pbnB1dC1ncm91cFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNMZWZ0VGVtcGxhdGVcIiAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNreS1pbnB1dC1ib3gtaW5wdXQtZ3JvdXAtaW5uZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3NreS1maWVsZC1zdGF0dXMtYWN0aXZlJzogZm9ybUNvbnRyb2xIYXNGb2N1cyxcbiAgICAgICAgICAnc2t5LWZpZWxkLXN0YXR1cy1pbnZhbGlkJzogaGFzRXJyb3JzQ29tcHV0ZWRcbiAgICAgICAgfVwiXG4gICAgICAgIChmb2N1c2luKT1cImZvcm1Db250cm9sRm9jdXNJbigpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cImZvcm1Db250cm9sRm9jdXNPdXQoKVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uc0luc2V0TGVmdFRlbXBsYXRlXCIgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VGVtcGxhdGVcIiAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc0luc2V0VGVtcGxhdGVcIiAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvbnNJbnNldFRlbXBsYXRlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNUZW1wbGF0ZVwiIC8+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhpbnRUZXh0VGVtcGxhdGVcIiAvPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlcnJvckxhYmVsVGVtcGxhdGVcIiAvPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2XG4gICpza3lUaGVtZUlmPVwiJ21vZGVybidcIlxuICBjbGFzcz1cInNreS1pbnB1dC1ib3hcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3NreS1pbnB1dC1ib3gtZGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH1cIlxuPlxuICA8ZGl2IGNsYXNzPVwic2t5LWlucHV0LWJveC1ncm91cFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zTGVmdFRlbXBsYXRlXCIgLz5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1pbnB1dC1ib3gtZ3JvdXAtZm9ybS1jb250cm9sXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3NreS1pbnB1dC1ib3gtZ3JvdXAtZm9ybS1jb250cm9sLWZvY3VzJzogZm9ybUNvbnRyb2xIYXNGb2N1cyxcbiAgICAgICAgJ3NreS1pbnB1dC1ib3gtZ3JvdXAtZm9ybS1jb250cm9sLWludmFsaWQnOiBoYXNFcnJvcnNDb21wdXRlZFxuICAgICAgfVwiXG4gICAgICAoZm9jdXNpbik9XCJmb3JtQ29udHJvbEZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwiZm9ybUNvbnRyb2xGb2N1c091dCgpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic2t5LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25zSW5zZXRMZWZ0VGVtcGxhdGVcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWlucHV0LWJveC1mb3JtLWdyb3VwLWlubmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNreS1pbnB1dC1ib3gtbGFiZWwtd3JhcHBlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsVGVtcGxhdGVcIiAvPjxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVIZWxwVGVtcGxhdGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGFyYWN0ZXJDb3VudFRlbXBsYXRlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRUZW1wbGF0ZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc0luc2V0VGVtcGxhdGVcIiAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvbnNJbnNldFRlbXBsYXRlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zVGVtcGxhdGVcIiAvPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhpbnRUZXh0VGVtcGxhdGVcIiAvPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXJyb3JMYWJlbFRlbXBsYXRlXCIgLz5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5za3ktY29udHJvbC1sYWJlbFwiIC8+XG4gIDxsYWJlbFxuICAgICpuZ0lmPVwibGFiZWxUZXh0XCJcbiAgICBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgY2hhcmFjdGVyTGltaXQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGxhYmVsVGV4dCArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICAoJ3NreXV4X2NoYXJhY3Rlcl9jb3VudF9tZXNzYWdlJ1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXM6IGNoYXJhY3RlckNvdW50U2NyZWVuUmVhZGVyIDogY2hhcmFjdGVyTGltaXQpXG4gICAgICAgIDogbnVsbFxuICAgIFwiXG4gICAgW2Zvcl09XCJjb250cm9sSWRcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktY29udHJvbC1sYWJlbC1yZXF1aXJlZCc6IHJlcXVpcmVkXG4gICAgfVwiXG4gICAgPnt7IGxhYmVsVGV4dCB9fTwvbGFiZWxcbiAgPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmxpbmVIZWxwVGVtcGxhdGU+XG4gIDxza3ktaW5wdXQtYm94LWhlbHAtaW5saW5lXG4gICAgKm5nSWY9XCJoZWxwUG9wb3ZlckNvbnRlbnRcIlxuICAgIGNsYXNzPVwic2t5LWNvbnRyb2wtaGVscFwiXG4gICAgW2xhYmVsVGV4dF09XCJsYWJlbFRleHRcIlxuICAgIFtwb3BvdmVyQ29udGVudF09XCJoZWxwUG9wb3ZlckNvbnRlbnRcIlxuICAgIFtwb3BvdmVyVGl0bGVdPVwiaGVscFBvcG92ZXJUaXRsZVwiXG4gIC8+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnNreS1jb250cm9sLWhlbHBcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaGFyYWN0ZXJDb3VudFRlbXBsYXRlPlxuICA8c2t5LWNoYXJhY3Rlci1jb3VudGVyLWluZGljYXRvclxuICAgICpuZ0lmPVwiY2hhcmFjdGVyTGltaXQgIT09IHVuZGVmaW5lZFwiXG4gICAgW2NoYXJhY3RlckNvdW50XT1cImNvbnRyb2xEaXI/LnZhbHVlPy5sZW5ndGggfHwgMFwiXG4gICAgW2NoYXJhY3RlckNvdW50TGltaXRdPVwiY2hhcmFjdGVyTGltaXRcIlxuICAvPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktY2hhcmFjdGVyLWNvdW50ZXItaW5kaWNhdG9yXCIgLz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnRcbiAgICBzZWxlY3Q9XCJpbnB1dCxzZWxlY3QsLnNreS1mb3JtLWNvbnRyb2w6bm90KHRleHRhcmVhKSxza3ktdGV4dC1lZGl0b3JcIlxuICAvPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJob3N0SW5wdXRUZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaG9zdElucHV0VGVtcGxhdGVcIlxuICAvPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJ0ZXh0YXJlYVwiIC8+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnNMZWZ0VGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5za3ktaW5wdXQtZ3JvdXAtYnRuLnNreS1pbnB1dC1ib3gtYnRuLWxlZnRcIiAvPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJob3N0QnV0dG9uc0xlZnRUZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaG9zdEJ1dHRvbnNMZWZ0VGVtcGxhdGVcIlxuICAvPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50XG4gICAgc2VsZWN0PVwiLnNreS1pbnB1dC1ncm91cC1idG46bm90KC5za3ktaW5wdXQtYm94LWJ0bi1sZWZ0KTpub3QoLnNreS1pbnB1dC1ib3gtYnRuLWluc2V0KVwiXG4gIC8+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cImhvc3RCdXR0b25zVGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhvc3RCdXR0b25zVGVtcGxhdGVcIlxuICAvPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zSW5zZXRUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnNreS1pbnB1dC1ncm91cC1idG4uc2t5LWlucHV0LWJveC1idG4taW5zZXRcIiAvPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJob3N0QnV0dG9uc0luc2V0VGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhvc3RCdXR0b25zSW5zZXRUZW1wbGF0ZVwiXG4gIC8+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ljb25zSW5zZXRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInNreS1pbnB1dC1ib3gtaWNvbi1pbnNldC13cmFwcGVyXCIgKGNsaWNrKT1cIm9uSW5zZXRJY29uQ2xpY2soKVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5za3ktaW5wdXQtZ3JvdXAtaWNvbi5za3ktaW5wdXQtYm94LWljb24taW5zZXRcIiAvPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiaG9zdEljb25zSW5zZXRUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJob3N0SWNvbnNJbnNldFRlbXBsYXRlXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaWNvbnNJbnNldExlZnRUZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWlucHV0LWJveC1pY29uLWluc2V0LWxlZnQtd3JhcHBlclwiXG4gICAgKGNsaWNrKT1cIm9uSW5zZXRJY29uQ2xpY2soKVwiXG4gID5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuc2t5LWlucHV0LWdyb3VwLWljb24uc2t5LWlucHV0LWJveC1pY29uLWluc2V0LWxlZnRcIiAvPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiaG9zdEljb25zSW5zZXRMZWZ0VGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaG9zdEljb25zSW5zZXRMZWZ0VGVtcGxhdGVcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlcnJvckxhYmVsVGVtcGxhdGU+XG4gIDxza3ktZm9ybS1lcnJvcnNcbiAgICBbaWRdPVwiZXJyb3JJZFwiXG4gICAgW2Vycm9yc109XCJjb250cm9sRGlyPy5lcnJvcnNcIlxuICAgIFtsYWJlbFRleHRdPVwibGFiZWxUZXh0XCJcbiAgICBbc2hvd0Vycm9yc109XCJjb250cm9sRGlyPy50b3VjaGVkIHx8IGNvbnRyb2xEaXI/LmRpcnR5XCJcbiAgPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1mb3JtLWVycm9yXCIgLz5cbiAgPC9za3ktZm9ybS1lcnJvcnM+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5za3ktZXJyb3ItbGFiZWwsLnNreS1lcnJvci1pbmRpY2F0b3JcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoaW50VGV4dFRlbXBsYXRlPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJoaW50VGV4dCB8fCBob3N0SGludFRleHRcIlxuICAgIGNsYXNzPVwic2t5LWZvbnQtZGVlbXBoYXNpemVkIHNreS1pbnB1dC1ib3gtaGludC10ZXh0XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LWlucHV0LWJveC1oaW50LXRleHQtaGlkZGVuJzogaGludFRleHRIaWRkZW4sXG4gICAgICAnc2t5LXNjcmVlbi1yZWFkZXItb25seSc6IGhpbnRUZXh0U2NyZWVuUmVhZGVyT25seVxuICAgIH1cIlxuICAgIFtpZF09XCJoaW50VGV4dElkXCJcbiAgPlxuICAgIHt7IGhpbnRUZXh0IHwgc2t5SW5wdXRCb3hIaW50VGV4dDogaG9zdEhpbnRUZXh0IH19XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy9zcmMvbGliL21vZHVsZXMvaW5wdXQtYm94L2lucHV0LWJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2lucHV0LWJveC9pbnB1dC1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHFCQUFxQixFQUNyQixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBR0wsU0FBUyxFQUVULGlCQUFpQixFQUNqQixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsT0FBTyxFQUVQLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV4RyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7O0FBR2xFOztHQUVHO0FBa0JILE1B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Q0YsaUJBR2MsaUJBQWlCLENBQUMsSUFBSTs4QkFzQjlCLFNBQVM7c0JBRGYsS0FBSztnQkFjQyxRQUFRO3NCQURkLEtBQUs7Z0JBU0MsU0FBUztzQkFEZixLQUFLO2dCQVFLLGNBQWM7c0JBRHhCLEtBQUs7Z0JBaUJLLE9BQU87c0JBRGpCLEtBQUs7Z0JBV0MsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQVNDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFRSyxRQUFRO3NCQURsQixLQUFLO2dCQXFDQyxRQUFRO3NCQURkLFdBQVc7dUJBQUMsT0FBTztnQkFJYixPQUFPO3NCQURiLFdBQVc7dUJBQUMsZUFBZTtnQkFJckIsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBSTNCLGlCQUFpQjtzQkFEdkIsWUFBWTt1QkFBQyxlQUFlO2dCQUl0QixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTztnQkFNZCxRQUFRO3NCQUhkLFlBQVk7dUJBQUMsMkJBQTJCLEVBQUU7d0JBQ3pDLElBQUksRUFBRSxVQUFVO3FCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJvb2xlYW5JbnB1dCxcbiAgTnVtYmVySW5wdXQsXG4gIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSxcbiAgY29lcmNlTnVtYmVyUHJvcGVydHksXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sRGlyZWN0aXZlLFxuICBGb3JtQ29udHJvbERpcmVjdGl2ZSxcbiAgRm9ybUNvbnRyb2xOYW1lLFxuICBOZ01vZGVsLFxuICBWYWxpZGF0b3JGbixcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5Q29udGVudEluZm9Qcm92aWRlciwgU2t5SWRTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNLWV9GT1JNX0VSUk9SU19FTkFCTEVEIH0gZnJvbSAnLi4vZm9ybS1lcnJvci9mb3JtLWVycm9ycy1lbmFibGVkLXRva2VuJztcbmltcG9ydCB7IFNreUZvcm1GaWVsZExhYmVsVGV4dFJlcXVpcmVkU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9mb3JtLWZpZWxkLWxhYmVsLXRleHQtcmVxdWlyZWQuc2VydmljZSc7XG5cbmltcG9ydCB7IFNreUlucHV0Qm94QWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL2lucHV0LWJveC1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi9pbnB1dC1ib3gtY29udHJvbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hIb3N0U2VydmljZSB9IGZyb20gJy4vaW5wdXQtYm94LWhvc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTa3lJbnB1dEJveFBvcHVsYXRlQXJncyB9IGZyb20gJy4vaW5wdXQtYm94LXBvcHVsYXRlLWFyZ3MnO1xuXG4vKipcbiAqIEEgd3JhcHBlciBjb21wb25lbnQgdGhhdCBwcm92aWRlcyBzdHlsaW5nIGFuZCBhY2Nlc3NpYmlsaXR5IHRvIGZvcm0gZWxlbWVudHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1pbnB1dC1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIFNreUNvbnRlbnRJbmZvUHJvdmlkZXIsXG4gICAgU2t5SW5wdXRCb3hBZGFwdGVyU2VydmljZSxcbiAgICBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNLWV9GT1JNX0VSUk9SU19FTkFCTEVELFxuICAgICAgdXNlVmFsdWU6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgLy8gTm90ZSB0aGF0IGNoYW5nZSBkZXRlY3Rpb24gaXMgbm90IHNldCB0byBPblB1c2g7IGRlZmF1bHQgY2hhbmdlIGRldGVjdGlvbiBhbGxvd3MgdGhlXG4gIC8vIGludmFsaWQgQ1NTIGNsYXNzIHRvIGJlIGFkZGVkIHdoZW4gdGhlIGNvbnRlbnQgY29udHJvbCdzIGludmFsaWQvZGlydHkgc3RhdGUgY2hhbmdlcy5cbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5SW5wdXRCb3hDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIE9uRGVzdHJveVxue1xuICAjY2hhbmdlUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgI2lucHV0Qm94SG9zdFN2YyA9IGluamVjdChTa3lJbnB1dEJveEhvc3RTZXJ2aWNlKTtcbiAgI2FkYXB0ZXJTZXJ2aWNlID0gaW5qZWN0KFNreUlucHV0Qm94QWRhcHRlclNlcnZpY2UpO1xuICAjaWRTdmMgPSBpbmplY3QoU2t5SWRTZXJ2aWNlKTtcbiAgI2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICNyZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIHJlYWRvbmx5ICNsYWJlbFRleHRSZXF1aXJlZCA9IGluamVjdChTa3lGb3JtRmllbGRMYWJlbFRleHRSZXF1aXJlZFNlcnZpY2UsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdmlzdWFsbHkgaGlnaGxpZ2h0IHRoZSBpbnB1dCBib3ggaW4gYW4gZXJyb3Igc3RhdGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBpbnB1dCBib3hcbiAgICogZGlzcGxheXMgaW4gYW4gZXJyb3Igc3RhdGUgd2hlbiBlaXRoZXIgdGhlIGBuZ01vZGVsYCBvciB0aGUgQW5ndWxhciBgRm9ybUNvbnRyb2xgIGNvbnRhaW5zIGFuIGVycm9yLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoYXNFcnJvcnM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdmlzdWFsbHkgaGlnaGxpZ2h0IHRoZSBpbnB1dCBib3ggYXMgZGlzYWJsZWQuIFRvIGRpc2FibGUgdGhlIGlucHV0IGJveCdzXG4gICAqIGlucHV0IGVsZW1lbnQsIHVzZSB0aGUgSFRNTCBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBvciB0aGUgQW5ndWxhciBgRm9ybUNvbnRyb2wuZGlzYWJsZWRgXG4gICAqIHByb3BlcnR5LiBJZiB0aGUgaW5wdXQgZWxlbWVudCBpcyBtYXBwZWQgdG8gYW4gQW5ndWxhciBmb3JtIGNvbnRyb2xcbiAgICogKGUuZy4gYGZvcm1Db250cm9sTmFtZWAsIGBuZ01vZGVsYCwgZXRjLiksIFwiZGlzYWJsZWRcIiBzdHlsZXMgYXJlIGFwcGxpZWQgYXV0b21hdGljYWxseTtcbiAgICogaWYgdGhlIGlucHV0IGVsZW1lbnQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbiBBbmd1bGFyIGZvcm0gY29udHJvbCwgdGhlIGBkaXNhYmxlZGBcbiAgICogcHJvcGVydHkgb24gdGhlIGlucHV0IGJveCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAgdG8gdmlzdWFsbHkgaW5kaWNhdGVcbiAgICogdGhlIGRpc2FibGVkIHN0YXRlIG9uIHRoZSBpbnB1dCBib3guXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIGlucHV0J3MgbGFiZWwgYW5kIGluIGtub3duIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMuIFRoZSBsYWJlbFxuICAgKiB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBgaW5wdXRgLCBgc2VsZWN0YCwgYHRleHRhcmVhYCwgb3IgY29tcGF0aWJsZSBTS1kgVVhcbiAgICogY29tcG9uZW50IGluY2x1ZGVkIGluIHRoZSBpbnB1dCBib3guXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbGFiZWxUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFsbG93ZWQgaW4gdGhlIGlucHV0LiBBIFtTS1kgVVggY2hhcmFjdGVyIGNvdW50XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvY2hhcmFjdGVyLWNvdW50KVxuICAgKiB3aWxsIGJlIHBsYWNlZCBvbiB0aGUgaW5wdXQgZWxlbWVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2YWxpZGF0b3IuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNoYXJhY3RlckxpbWl0KHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgIHRoaXMuI19jaGFyYWN0ZXJMaW1pdCA9XG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHVuZGVmaW5lZCk7XG5cbiAgICB0aGlzLiN1cGRhdGVNYXhMZW5ndGhWYWxpZGF0b3IoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hhcmFjdGVyTGltaXQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2NoYXJhY3RlckxpbWl0O1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGlucHV0IGJveCBpcyBzdGFja2VkIG9uIGFub3RoZXIgaW5wdXQgYm94LiBXaGVuIHNwZWNpZmllZCwgdGhlIGFwcHJvcHJpYXRlXG4gICAqIHZlcnRpY2FsIHNwYWNpbmcgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgaW5wdXQgYm94LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFja2VkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLiNfc3RhY2tlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5jc3NDbGFzcyA9IHRoaXMuI19zdGFja2VkID8gJ3NreS1tYXJnaW4tc3RhY2tlZC1sZycgOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIGhlbHAgcG9wb3Zlci4gVGhpcyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgd2hlbiBgaGVscFBvcG92ZXJDb250ZW50YCBpc1xuICAgKiBhbHNvIHNwZWNpZmllZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwUG9wb3ZlclRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBoZWxwIHBvcG92ZXIuIFdoZW4gc3BlY2lmaWVkLCBhIFtoZWxwIGlubGluZV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2hlbHAtaW5saW5lKVxuICAgKiBidXR0b24gaXMgYWRkZWQgdG8gdGhlIGlucHV0IGJveCBsYWJlbC4gVGhlIGhlbHAgaW5saW5lIGJ1dHRvbiBkaXNwbGF5cyBhIFtwb3BvdmVyXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcG9wb3ZlcilcbiAgICogd2hlbiBjbGlja2VkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9uYWwgdGl0bGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogW1BlcnNpc3RlbnQgaW5saW5lIGhlbHAgdGV4dF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9kZXNpZ24vZ3VpZGVsaW5lcy91c2VyLWFzc2lzdGFuY2UjaW5saW5lLWhlbHApIHRoYXQgcHJvdmlkZXNcbiAgICogYWRkaXRpb25hbCBjb250ZXh0IHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoaW50VGV4dCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2hpbnRUZXh0ID0gdmFsdWU7XG5cbiAgICB0aGlzLmFyaWFEZXNjcmliZWRCeS5uZXh0KHZhbHVlID8gdGhpcy5oaW50VGV4dElkIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGludFRleHQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2hpbnRUZXh0O1xuICB9XG5cbiAgcHVibGljIGhvc3RJbnB1dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgaG9zdEJ1dHRvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGhvc3RCdXR0b25zSW5zZXRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGhvc3RCdXR0b25zTGVmdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZm9ybUNvbnRyb2xIYXNGb2N1cyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBob3N0SWNvbnNJbnNldFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgaG9zdEljb25zSW5zZXRMZWZ0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBoaW50VGV4dEhpZGRlbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBoaW50VGV4dFNjcmVlblJlYWRlck9ubHkgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgaG9zdEhpbnRUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRyb2xJZCA9IHRoaXMuI2lkU3ZjLmdlbmVyYXRlSWQoKTtcbiAgcHVibGljIHJlYWRvbmx5IGVycm9ySWQgPSB0aGlzLiNpZFN2Yy5nZW5lcmF0ZUlkKCk7XG4gIHB1YmxpYyByZWFkb25seSBoaW50VGV4dElkID0gdGhpcy4jaWRTdmMuZ2VuZXJhdGVJZCgpO1xuICBwdWJsaWMgcmVhZG9ubHkgYXJpYURlc2NyaWJlZEJ5ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPigxKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcHVibGljIGNzc0NsYXNzID0gJyc7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcbiAgcHVibGljIGRpc3BsYXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBAQ29udGVudENoaWxkKEZvcm1Db250cm9sRGlyZWN0aXZlKVxuICBwdWJsaWMgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG4gIEBDb250ZW50Q2hpbGQoRm9ybUNvbnRyb2xOYW1lKVxuICBwdWJsaWMgZm9ybUNvbnRyb2xCeU5hbWU6IEZvcm1Db250cm9sTmFtZSB8IHVuZGVmaW5lZDtcblxuICBAQ29udGVudENoaWxkKE5nTW9kZWwpXG4gIHB1YmxpYyBuZ01vZGVsOiBOZ01vZGVsIHwgdW5kZWZpbmVkO1xuXG4gIEBDb250ZW50Q2hpbGQoU2t5SW5wdXRCb3hDb250cm9sRGlyZWN0aXZlLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgfSlcbiAgcHVibGljIGlucHV0UmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBjb250cm9sRGlyOiBBYnN0cmFjdENvbnRyb2xEaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBoZWxwUG9wb3Zlck9wZW46IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMuY29udHJvbERpcj8uY29udHJvbD8uZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmRpc2FibGVkXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaGFzRXJyb3JzQ29tcHV0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3JzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLiNjb250cm9sSGFzRXJyb3JzKHRoaXMuY29udHJvbERpcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFzRXJyb3JzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy4jaGFzUmVxdWlyZWRWYWxpZGF0b3IoKSB8fCB0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50LnJlcXVpcmVkXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGFyYWN0ZXJDb3VudFNjcmVlblJlYWRlciA9IDA7XG5cbiAgI19zdGFja2VkID0gZmFsc2U7XG4gICNfY2hhcmFjdGVyTGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgI19oaW50VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNwcmV2aW91c0lucHV0UmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuICAjcHJldmlvdXNNYXhMZW5ndGhWYWxpZGF0b3I6IFZhbGlkYXRvckZuIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNpbnB1dEJveEhvc3RTdmMuaW5pdCh0aGlzKTtcblxuICAgIGlmICh0aGlzLiNsYWJlbFRleHRSZXF1aXJlZCAmJiAhdGhpcy5sYWJlbFRleHQpIHtcbiAgICAgIHRoaXMuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gICAgdGhpcy4jbGFiZWxUZXh0UmVxdWlyZWQ/LnZhbGlkYXRlTGFiZWxUZXh0KHRoaXMubGFiZWxUZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sRGlyID1cbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgfHwgdGhpcy5mb3JtQ29udHJvbEJ5TmFtZSB8fCB0aGlzLm5nTW9kZWw7XG5cbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2xIYXNGb2N1cykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXJDb3VudFNjcmVlblJlYWRlciA9IHRoaXMuY29udHJvbERpcj8udmFsdWU/Lmxlbmd0aCB8fCAwO1xuICAgIH1cblxuICAgIHRoaXMuI3VwZGF0ZUlucHV0UmVmKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hcmlhRGVzY3JpYmVkQnkuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtQ29udHJvbEZvY3VzSW4oKTogdm9pZCB7XG4gICAgY29uc3QgaW5saW5lSGVscEVsID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0SW5saW5lSGVscEVsZW1lbnQoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLFxuICAgICk7XG4gICAgaWYgKCF0aGlzLiNhZGFwdGVyU2VydmljZS5pc0ZvY3VzSW5FbGVtZW50KGlubGluZUhlbHBFbCkpIHtcbiAgICAgIHRoaXMuI3VwZGF0ZUhhc0ZvY3VzKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtQ29udHJvbEZvY3VzT3V0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhcmFjdGVyQ291bnRTY3JlZW5SZWFkZXIgPSB0aGlzLmNvbnRyb2xEaXI/LnZhbHVlPy5sZW5ndGggfHwgMDtcbiAgICB0aGlzLiN1cGRhdGVIYXNGb2N1cyhmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25JbnNldEljb25DbGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZm9jdXNDb250cm9sKHRoaXMuI2VsZW1lbnRSZWYpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwb3B1bGF0ZShhcmdzOiBTa3lJbnB1dEJveFBvcHVsYXRlQXJncyk6IHZvaWQge1xuICAgIHRoaXMuaG9zdElucHV0VGVtcGxhdGUgPSBhcmdzLmlucHV0VGVtcGxhdGU7XG4gICAgdGhpcy5ob3N0QnV0dG9uc1RlbXBsYXRlID0gYXJncy5idXR0b25zVGVtcGxhdGU7XG4gICAgdGhpcy5ob3N0QnV0dG9uc0xlZnRUZW1wbGF0ZSA9IGFyZ3MuYnV0dG9uc0xlZnRUZW1wbGF0ZTtcbiAgICB0aGlzLmhvc3RCdXR0b25zSW5zZXRUZW1wbGF0ZSA9IGFyZ3MuYnV0dG9uc0luc2V0VGVtcGxhdGU7XG4gICAgdGhpcy5ob3N0SWNvbnNJbnNldFRlbXBsYXRlID0gYXJncy5pY29uc0luc2V0VGVtcGxhdGU7XG4gICAgdGhpcy5ob3N0SWNvbnNJbnNldExlZnRUZW1wbGF0ZSA9IGFyZ3MuaWNvbnNJbnNldExlZnRUZW1wbGF0ZTtcbiAgICB0aGlzLiNjaGFuZ2VSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SGludFRleHRIaWRkZW4oaGlkZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaGludFRleHRIaWRkZW4gPSBoaWRlO1xuICAgIHRoaXMuI2NoYW5nZVJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIb3N0SGludFRleHQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuaG9zdEhpbnRUZXh0ID0gdmFsdWU7XG4gICAgdGhpcy4jY2hhbmdlUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIHNldEhpbnRUZXh0U2NyZWVuUmVhZGVyT25seShoaWRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5oaW50VGV4dFNjcmVlblJlYWRlck9ubHkgPSBoaWRlO1xuICAgIHRoaXMuI2NoYW5nZVJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNoYXNSZXF1aXJlZFZhbGlkYXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbnRyb2xEaXI/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuXG4gICN1cGRhdGVIYXNGb2N1cyhoYXNGb2N1czogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFNvbWUgY29tcG9uZW50cyBtYW5pcHVsYXRlIHRoZSBmb2N1cyBvZiBlbGVtZW50cyBpbnNpZGUgYW4gaW5wdXQgYm94IHByb2dyYW1tYXRpY2FsbHksXG4gICAgLy8gd2hpY2ggY2FuIGNhdXNlIGFuIGBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yYCBpZiBmb2N1cyB3YXMgc2V0IGFmdGVyXG4gICAgLy8gaW5pdGlhbCBjaGFuZ2UgZGV0ZWN0aW9uLiBVc2luZyBgc2V0VGltZW91dCgpYCBoZXJlIGZpeGVzIGl0LlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbEhhc0ZvY3VzID0gaGFzRm9jdXM7XG4gICAgICB0aGlzLiNjaGFuZ2VSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICAjY29udHJvbEhhc0Vycm9ycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2xEaXJlY3RpdmUgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoY29udHJvbCAmJiBjb250cm9sLmludmFsaWQgJiYgKGNvbnRyb2wuZGlydHkgfHwgY29udHJvbC50b3VjaGVkKSk7XG4gIH1cblxuICAjdXBkYXRlSW5wdXRSZWYoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlucHV0UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIC8vIENoZWNrIGZvciB0aGUgQW5ndWxhciByZXF1aXJlZCB2YWxpZGF0b3IgYW5kIGFkZCBhbiBhcmlhLXJlcXVpcmVkIGF0dHJpYnV0ZVxuICAgIC8vIHRvIG1hdGNoLiBGb3IgdGVtcGxhdGUtZHJpdmVuIGZvcm1zLCB0aGUgaW5wdXQgd2lsbCBoYXZlIGEgYHJlcXVpcmVkYCBhdHRyaWJ1dGVcbiAgICAvLyBzbyB0aGUgYXJpYS1yZXF1aXJlZCBhdHRyaWJ1dGUgaXMgdW5uZWNlc3NhcnkuXG4gICAgY29uc3QgaGFzUmVxdWlyZWRWYWxpZGF0b3IgPSB0aGlzLiNoYXNSZXF1aXJlZFZhbGlkYXRvcigpO1xuICAgIGNvbnN0IGFyaWFSZXF1aXJlZCA9IGlucHV0RWwuYXJpYVJlcXVpcmVkO1xuXG4gICAgaWYgKGhhc1JlcXVpcmVkVmFsaWRhdG9yICYmIGFyaWFSZXF1aXJlZCAhPT0gJ3RydWUnKSB7XG4gICAgICBpbnB1dEVsLmFyaWFSZXF1aXJlZCA9ICd0cnVlJztcbiAgICB9IGVsc2UgaWYgKCFoYXNSZXF1aXJlZFZhbGlkYXRvciAmJiBhcmlhUmVxdWlyZWQgPT09ICd0cnVlJykge1xuICAgICAgaW5wdXRFbC5hcmlhUmVxdWlyZWQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0Vycm9yc0NvbXB1dGVkKSB7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoaW5wdXRFbCwgJ2FyaWEtaW52YWxpZCcsICd0cnVlJyk7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoaW5wdXRFbCwgJ2FyaWEtZXJyb3JtZXNzYWdlJywgdGhpcy5lcnJvcklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGlucHV0RWwsICdhcmlhLWludmFsaWQnKTtcbiAgICAgIHRoaXMuI3JlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShpbnB1dEVsLCAnYXJpYS1lcnJvcm1lc3NhZ2UnKTtcbiAgICB9XG5cbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS51cGRhdGVEZXNjcmliZWRCeShcbiAgICAgIHRoaXMuaW5wdXRSZWYsXG4gICAgICB0aGlzLmhpbnRUZXh0SWQsXG4gICAgICB0aGlzLmhpbnRUZXh0ID8/IHRoaXMuaG9zdEhpbnRUZXh0LFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5pbnB1dFJlZiAhPT0gdGhpcy4jcHJldmlvdXNJbnB1dFJlZikge1xuICAgICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoaW5wdXRFbCwgJ3NreS1mb3JtLWNvbnRyb2wnKTtcbiAgICAgIHRoaXMuI3JlbmRlcmVyLnNldEF0dHJpYnV0ZShpbnB1dEVsLCAnaWQnLCB0aGlzLmNvbnRyb2xJZCk7XG5cbiAgICAgIHRoaXMuI3VwZGF0ZU1heExlbmd0aFZhbGlkYXRvcigpO1xuXG4gICAgICB0aGlzLiNwcmV2aW91c0lucHV0UmVmID0gdGhpcy5pbnB1dFJlZjtcbiAgICB9XG4gIH1cblxuICAjdXBkYXRlTWF4TGVuZ3RoVmFsaWRhdG9yKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2xEaXI/LmNvbnRyb2w7XG5cbiAgICBpZiAodGhpcy4jcHJldmlvdXNNYXhMZW5ndGhWYWxpZGF0b3IpIHtcbiAgICAgIGNvbnRyb2w/LnJlbW92ZVZhbGlkYXRvcnModGhpcy4jcHJldmlvdXNNYXhMZW5ndGhWYWxpZGF0b3IpO1xuICAgICAgdGhpcy4jcHJldmlvdXNNYXhMZW5ndGhWYWxpZGF0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wgJiYgdGhpcy5jaGFyYWN0ZXJMaW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLiNwcmV2aW91c01heExlbmd0aFZhbGlkYXRvciA9IFZhbGlkYXRvcnMubWF4TGVuZ3RoKFxuICAgICAgICB0aGlzLmNoYXJhY3RlckxpbWl0LFxuICAgICAgKTtcblxuICAgICAgY29udHJvbC5hZGRWYWxpZGF0b3JzKFt0aGlzLiNwcmV2aW91c01heExlbmd0aFZhbGlkYXRvcl0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAqc2t5VGhlbWVJZj1cIidkZWZhdWx0J1wiXG4gIGNsYXNzPVwic2t5LWlucHV0LWJveFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnc2t5LWlucHV0LWJveC1kaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJza3ktZm9ybS1ncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJza3ktaW5wdXQtYm94LWxhYmVsLXdyYXBwZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbFRlbXBsYXRlXCIgLz48bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5saW5lSGVscFRlbXBsYXRlXCJcbiAgICAgIC8+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hhcmFjdGVyQ291bnRUZW1wbGF0ZVwiIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNreS1pbnB1dC1ncm91cFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNMZWZ0VGVtcGxhdGVcIiAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNreS1pbnB1dC1ib3gtaW5wdXQtZ3JvdXAtaW5uZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3NreS1maWVsZC1zdGF0dXMtYWN0aXZlJzogZm9ybUNvbnRyb2xIYXNGb2N1cyxcbiAgICAgICAgICAnc2t5LWZpZWxkLXN0YXR1cy1pbnZhbGlkJzogaGFzRXJyb3JzQ29tcHV0ZWRcbiAgICAgICAgfVwiXG4gICAgICAgIChmb2N1c2luKT1cImZvcm1Db250cm9sRm9jdXNJbigpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cImZvcm1Db250cm9sRm9jdXNPdXQoKVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uc0luc2V0TGVmdFRlbXBsYXRlXCIgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VGVtcGxhdGVcIiAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc0luc2V0VGVtcGxhdGVcIiAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvbnNJbnNldFRlbXBsYXRlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNUZW1wbGF0ZVwiIC8+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhpbnRUZXh0VGVtcGxhdGVcIiAvPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlcnJvckxhYmVsVGVtcGxhdGVcIiAvPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2XG4gICpza3lUaGVtZUlmPVwiJ21vZGVybidcIlxuICBjbGFzcz1cInNreS1pbnB1dC1ib3hcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3NreS1pbnB1dC1ib3gtZGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH1cIlxuPlxuICA8ZGl2IGNsYXNzPVwic2t5LWlucHV0LWJveC1ncm91cFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zTGVmdFRlbXBsYXRlXCIgLz5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1pbnB1dC1ib3gtZ3JvdXAtZm9ybS1jb250cm9sXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3NreS1pbnB1dC1ib3gtZ3JvdXAtZm9ybS1jb250cm9sLWZvY3VzJzogZm9ybUNvbnRyb2xIYXNGb2N1cyxcbiAgICAgICAgJ3NreS1pbnB1dC1ib3gtZ3JvdXAtZm9ybS1jb250cm9sLWludmFsaWQnOiBoYXNFcnJvcnNDb21wdXRlZFxuICAgICAgfVwiXG4gICAgICAoZm9jdXNpbik9XCJmb3JtQ29udHJvbEZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwiZm9ybUNvbnRyb2xGb2N1c091dCgpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic2t5LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25zSW5zZXRMZWZ0VGVtcGxhdGVcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWlucHV0LWJveC1mb3JtLWdyb3VwLWlubmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNreS1pbnB1dC1ib3gtbGFiZWwtd3JhcHBlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsVGVtcGxhdGVcIiAvPjxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVIZWxwVGVtcGxhdGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGFyYWN0ZXJDb3VudFRlbXBsYXRlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRUZW1wbGF0ZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc0luc2V0VGVtcGxhdGVcIiAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvbnNJbnNldFRlbXBsYXRlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zVGVtcGxhdGVcIiAvPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhpbnRUZXh0VGVtcGxhdGVcIiAvPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXJyb3JMYWJlbFRlbXBsYXRlXCIgLz5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5za3ktY29udHJvbC1sYWJlbFwiIC8+XG4gIDxsYWJlbFxuICAgICpuZ0lmPVwibGFiZWxUZXh0XCJcbiAgICBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgY2hhcmFjdGVyTGltaXQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGxhYmVsVGV4dCArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICAoJ3NreXV4X2NoYXJhY3Rlcl9jb3VudF9tZXNzYWdlJ1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXM6IGNoYXJhY3RlckNvdW50U2NyZWVuUmVhZGVyIDogY2hhcmFjdGVyTGltaXQpXG4gICAgICAgIDogbnVsbFxuICAgIFwiXG4gICAgW2Zvcl09XCJjb250cm9sSWRcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktY29udHJvbC1sYWJlbC1yZXF1aXJlZCc6IHJlcXVpcmVkXG4gICAgfVwiXG4gICAgPnt7IGxhYmVsVGV4dCB9fTwvbGFiZWxcbiAgPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmxpbmVIZWxwVGVtcGxhdGU+XG4gIDxza3ktaW5wdXQtYm94LWhlbHAtaW5saW5lXG4gICAgKm5nSWY9XCJoZWxwUG9wb3ZlckNvbnRlbnRcIlxuICAgIGNsYXNzPVwic2t5LWNvbnRyb2wtaGVscFwiXG4gICAgW2xhYmVsVGV4dF09XCJsYWJlbFRleHRcIlxuICAgIFtwb3BvdmVyQ29udGVudF09XCJoZWxwUG9wb3ZlckNvbnRlbnRcIlxuICAgIFtwb3BvdmVyVGl0bGVdPVwiaGVscFBvcG92ZXJUaXRsZVwiXG4gIC8+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnNreS1jb250cm9sLWhlbHBcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaGFyYWN0ZXJDb3VudFRlbXBsYXRlPlxuICA8c2t5LWNoYXJhY3Rlci1jb3VudGVyLWluZGljYXRvclxuICAgICpuZ0lmPVwiY2hhcmFjdGVyTGltaXQgIT09IHVuZGVmaW5lZFwiXG4gICAgW2NoYXJhY3RlckNvdW50XT1cImNvbnRyb2xEaXI/LnZhbHVlPy5sZW5ndGggfHwgMFwiXG4gICAgW2NoYXJhY3RlckNvdW50TGltaXRdPVwiY2hhcmFjdGVyTGltaXRcIlxuICAvPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktY2hhcmFjdGVyLWNvdW50ZXItaW5kaWNhdG9yXCIgLz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnRcbiAgICBzZWxlY3Q9XCJpbnB1dCxzZWxlY3QsLnNreS1mb3JtLWNvbnRyb2w6bm90KHRleHRhcmVhKSxza3ktdGV4dC1lZGl0b3JcIlxuICAvPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJob3N0SW5wdXRUZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaG9zdElucHV0VGVtcGxhdGVcIlxuICAvPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJ0ZXh0YXJlYVwiIC8+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnNMZWZ0VGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5za3ktaW5wdXQtZ3JvdXAtYnRuLnNreS1pbnB1dC1ib3gtYnRuLWxlZnRcIiAvPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJob3N0QnV0dG9uc0xlZnRUZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaG9zdEJ1dHRvbnNMZWZ0VGVtcGxhdGVcIlxuICAvPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50XG4gICAgc2VsZWN0PVwiLnNreS1pbnB1dC1ncm91cC1idG46bm90KC5za3ktaW5wdXQtYm94LWJ0bi1sZWZ0KTpub3QoLnNreS1pbnB1dC1ib3gtYnRuLWluc2V0KVwiXG4gIC8+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cImhvc3RCdXR0b25zVGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhvc3RCdXR0b25zVGVtcGxhdGVcIlxuICAvPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zSW5zZXRUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnNreS1pbnB1dC1ncm91cC1idG4uc2t5LWlucHV0LWJveC1idG4taW5zZXRcIiAvPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJob3N0QnV0dG9uc0luc2V0VGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhvc3RCdXR0b25zSW5zZXRUZW1wbGF0ZVwiXG4gIC8+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ljb25zSW5zZXRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInNreS1pbnB1dC1ib3gtaWNvbi1pbnNldC13cmFwcGVyXCIgKGNsaWNrKT1cIm9uSW5zZXRJY29uQ2xpY2soKVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5za3ktaW5wdXQtZ3JvdXAtaWNvbi5za3ktaW5wdXQtYm94LWljb24taW5zZXRcIiAvPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiaG9zdEljb25zSW5zZXRUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJob3N0SWNvbnNJbnNldFRlbXBsYXRlXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaWNvbnNJbnNldExlZnRUZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWlucHV0LWJveC1pY29uLWluc2V0LWxlZnQtd3JhcHBlclwiXG4gICAgKGNsaWNrKT1cIm9uSW5zZXRJY29uQ2xpY2soKVwiXG4gID5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuc2t5LWlucHV0LWdyb3VwLWljb24uc2t5LWlucHV0LWJveC1pY29uLWluc2V0LWxlZnRcIiAvPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiaG9zdEljb25zSW5zZXRMZWZ0VGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaG9zdEljb25zSW5zZXRMZWZ0VGVtcGxhdGVcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlcnJvckxhYmVsVGVtcGxhdGU+XG4gIDxza3ktZm9ybS1lcnJvcnNcbiAgICBbaWRdPVwiZXJyb3JJZFwiXG4gICAgW2Vycm9yc109XCJjb250cm9sRGlyPy5lcnJvcnNcIlxuICAgIFtsYWJlbFRleHRdPVwibGFiZWxUZXh0XCJcbiAgICBbc2hvd0Vycm9yc109XCJjb250cm9sRGlyPy50b3VjaGVkIHx8IGNvbnRyb2xEaXI/LmRpcnR5XCJcbiAgPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1mb3JtLWVycm9yXCIgLz5cbiAgPC9za3ktZm9ybS1lcnJvcnM+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5za3ktZXJyb3ItbGFiZWwsLnNreS1lcnJvci1pbmRpY2F0b3JcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoaW50VGV4dFRlbXBsYXRlPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJoaW50VGV4dCB8fCBob3N0SGludFRleHRcIlxuICAgIGNsYXNzPVwic2t5LWZvbnQtZGVlbXBoYXNpemVkIHNreS1pbnB1dC1ib3gtaGludC10ZXh0XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LWlucHV0LWJveC1oaW50LXRleHQtaGlkZGVuJzogaGludFRleHRIaWRkZW4sXG4gICAgICAnc2t5LXNjcmVlbi1yZWFkZXItb25seSc6IGhpbnRUZXh0U2NyZWVuUmVhZGVyT25seVxuICAgIH1cIlxuICAgIFtpZF09XCJoaW50VGV4dElkXCJcbiAgPlxuICAgIHt7IGhpbnRUZXh0IHwgc2t5SW5wdXRCb3hIaW50VGV4dDogaG9zdEhpbnRUZXh0IH19XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|