@skyux/forms 11.0.0-alpha.9 → 11.0.0-beta.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 +3570 -3450
- package/esm2022/index.mjs +1 -3
- package/esm2022/lib/modules/character-counter/character-counter-indicator.component.mjs +5 -5
- package/esm2022/lib/modules/character-counter/character-counter-screen-reader.pipe.mjs +3 -3
- package/esm2022/lib/modules/character-counter/character-counter.directive.mjs +3 -3
- package/esm2022/lib/modules/character-counter/character-counter.module.mjs +4 -4
- package/esm2022/lib/modules/checkbox/checkbox-group.component.mjs +6 -6
- package/esm2022/lib/modules/checkbox/checkbox-label-text-label.component.mjs +5 -6
- package/esm2022/lib/modules/checkbox/checkbox-label.component.mjs +3 -3
- package/esm2022/lib/modules/checkbox/checkbox.component.mjs +13 -22
- package/esm2022/lib/modules/checkbox/checkbox.module.mjs +4 -4
- package/esm2022/lib/modules/field-group/field-group.component.mjs +5 -6
- package/esm2022/lib/modules/field-group/field-group.module.mjs +4 -4
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment-join-ids.pipe.mjs +22 -0
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment-label.component.mjs +5 -6
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment.component.mjs +22 -28
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment.module.mjs +4 -4
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment.service.mjs +3 -3
- package/esm2022/lib/modules/file-attachment/file-attachments.module.mjs +4 -4
- package/esm2022/lib/modules/file-attachment/file-drop/file-drop.component.mjs +16 -23
- package/esm2022/lib/modules/file-attachment/file-drop/file-drop.module.mjs +4 -4
- package/esm2022/lib/modules/file-attachment/file-drop/file-item.component.mjs +7 -14
- package/esm2022/lib/modules/file-attachment/shared/file-item.service.mjs +3 -3
- package/esm2022/lib/modules/file-attachment/shared/file-size.pipe.mjs +3 -3
- package/esm2022/lib/modules/form-error/form-error.component.mjs +24 -24
- package/esm2022/lib/modules/form-error/form-error.module.mjs +4 -4
- package/esm2022/lib/modules/form-error/form-errors.component.mjs +18 -20
- package/esm2022/lib/modules/form-error/form-errors.module.mjs +4 -4
- package/esm2022/lib/modules/input-box/input-box-adapter.service.mjs +3 -3
- package/esm2022/lib/modules/input-box/input-box-control.directive.mjs +3 -3
- package/esm2022/lib/modules/input-box/input-box-hint-text.pipe.mjs +3 -3
- package/esm2022/lib/modules/input-box/input-box-host.service.mjs +21 -4
- package/esm2022/lib/modules/input-box/input-box.component.mjs +30 -30
- package/esm2022/lib/modules/input-box/input-box.module.mjs +4 -4
- package/esm2022/lib/modules/radio/radio-group-id.service.mjs +3 -3
- package/esm2022/lib/modules/radio/radio-group.component.mjs +11 -19
- package/esm2022/lib/modules/radio/radio-label.component.mjs +3 -3
- package/esm2022/lib/modules/radio/radio.component.mjs +9 -16
- package/esm2022/lib/modules/radio/radio.module.mjs +4 -4
- package/esm2022/lib/modules/required-state/required-state.directive.mjs +3 -3
- package/esm2022/lib/modules/selection-box/selection-box-adapter.service.mjs +3 -3
- package/esm2022/lib/modules/selection-box/selection-box-description.component.mjs +3 -3
- package/esm2022/lib/modules/selection-box/selection-box-grid.component.mjs +4 -4
- package/esm2022/lib/modules/selection-box/selection-box-header.component.mjs +3 -3
- package/esm2022/lib/modules/selection-box/selection-box.component.mjs +3 -3
- package/esm2022/lib/modules/selection-box/selection-box.module.mjs +4 -4
- package/esm2022/lib/modules/shared/sky-forms-resources.module.mjs +6 -8
- package/esm2022/lib/modules/toggle-switch/toggle-switch-label.component.mjs +3 -3
- package/esm2022/lib/modules/toggle-switch/toggle-switch.component.mjs +9 -16
- package/esm2022/lib/modules/toggle-switch/toggle-switch.module.mjs +4 -4
- package/esm2022/testing/checkbox/checkbox-harness.mjs +2 -6
- package/fesm2022/skyux-forms-testing.mjs +1 -5
- package/fesm2022/skyux-forms-testing.mjs.map +1 -1
- package/fesm2022/skyux-forms.mjs +294 -343
- package/fesm2022/skyux-forms.mjs.map +1 -1
- package/index.d.ts +1 -2
- package/lib/modules/checkbox/checkbox.component.d.ts +1 -2
- package/lib/modules/file-attachment/file-attachment/file-attachment-join-ids.pipe.d.ts +11 -0
- package/lib/modules/file-attachment/file-attachment/file-attachment.component.d.ts +8 -8
- package/lib/modules/file-attachment/file-drop/file-drop.component.d.ts +1 -2
- package/lib/modules/form-error/form-errors.component.d.ts +9 -5
- package/lib/modules/input-box/input-box-host.service.d.ts +10 -1
- package/lib/modules/input-box/input-box.component.d.ts +1 -6
- package/lib/modules/radio/radio-group.component.d.ts +1 -2
- package/lib/modules/radio/radio.component.d.ts +1 -2
- package/lib/modules/toggle-switch/toggle-switch.component.d.ts +1 -2
- package/package.json +14 -14
- package/esm2022/lib/modules/shared/form-field-label-text-required.directive.mjs +0 -37
- package/esm2022/lib/modules/shared/form-field-label-text-required.service.mjs +0 -21
- package/lib/modules/shared/form-field-label-text-required.directive.d.ts +0 -14
- package/lib/modules/shared/form-field-label-text-required.service.d.ts +0 -11
|
@@ -4,18 +4,15 @@ import { SkyIdService, SkyLogService } from '@skyux/core';
|
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
5
|
import { takeUntil } from 'rxjs/operators';
|
|
6
6
|
import { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';
|
|
7
|
-
import { SkyFormFieldLabelTextRequiredDirective } from '../shared/form-field-label-text-required.directive';
|
|
8
7
|
import { SkyRadioGroupIdService } from './radio-group-id.service';
|
|
9
8
|
import { SkyRadioComponent } from './radio.component';
|
|
10
9
|
import * as i0 from "@angular/core";
|
|
11
10
|
import * as i1 from "./radio-group-id.service";
|
|
12
11
|
import * as i2 from "@angular/forms";
|
|
13
|
-
import * as i3 from "
|
|
14
|
-
import * as i4 from "
|
|
15
|
-
import * as i5 from "
|
|
16
|
-
import * as i6 from "@skyux/
|
|
17
|
-
import * as i7 from "@skyux/core";
|
|
18
|
-
import * as i8 from "@skyux/i18n";
|
|
12
|
+
import * as i3 from "@angular/common";
|
|
13
|
+
import * as i4 from "../form-error/form-errors.component";
|
|
14
|
+
import * as i5 from "@skyux/help-inline";
|
|
15
|
+
import * as i6 from "@skyux/core";
|
|
19
16
|
let nextUniqueId = 0;
|
|
20
17
|
function numberAttribute4(value) {
|
|
21
18
|
return numberAttribute(value, 4);
|
|
@@ -323,23 +320,18 @@ export class SkyRadioGroupComponent {
|
|
|
323
320
|
this.stackedLg = !this.headingLevel && this.stacked;
|
|
324
321
|
this.stackedXL = !!this.headingLevel && this.stacked;
|
|
325
322
|
}
|
|
326
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
327
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
323
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRadioGroupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyRadioGroupIdService }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
324
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: SkyRadioGroupComponent, selector: "sky-radio-group", inputs: { ariaLabelledBy: "ariaLabelledBy", ariaLabel: "ariaLabel", disabled: ["disabled", "disabled", booleanAttribute], headingLevel: ["headingLevel", "headingLevel", numberAttribute], headingStyle: ["headingStyle", "headingStyle", numberAttribute4], name: "name", required: ["required", "required", booleanAttribute], stacked: ["stacked", "stacked", booleanAttribute], value: "value", tabIndex: "tabIndex", headingText: "headingText", headingHidden: ["headingHidden", "headingHidden", booleanAttribute], hintText: "hintText", helpPopoverContent: "helpPopoverContent", helpPopoverTitle: "helpPopoverTitle", helpKey: "helpKey" }, host: { properties: { "class.sky-margin-stacked-lg": "this.stackedLg", "class.sky-margin-stacked-xl": "this.stackedXL" } }, providers: [
|
|
328
325
|
SkyRadioGroupIdService,
|
|
329
326
|
{ provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
|
|
330
|
-
], queries: [{ propertyName: "radios", predicate: SkyRadioComponent, descendants: true }],
|
|
327
|
+
], queries: [{ propertyName: "radios", predicate: SkyRadioComponent, descendants: true }], ngImport: i0, template: "<fieldset\n class=\"sky-radio-group\"\n role=\"radiogroup\"\n [attr.aria-label]=\"headingText ? undefined : ariaLabel\"\n [attr.aria-labelledby]=\"headingText ? undefined : ariaLabelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-owns]=\"ariaOwns\"\n [attr.aria-required]=\"isRequired ? true : null\"\n [attr.required]=\"isRequired ? '' : null\"\n [attr.aria-invalid]=\"!!ngControl?.errors\"\n [attr.aria-errormessage]=\"\n headingText && ngControl?.errors ? errorId : undefined\n \"\n>\n <span class=\"sky-radio-group-label-wrapper\">\n @if (headingText) {\n <legend\n class=\"sky-control-label\"\n [ngClass]=\"{\n 'sky-screen-reader-only': headingHidden,\n 'sky-margin-stacked-sm': !hintText,\n 'sky-control-label-required': isRequired,\n 'sky-margin-inline-xs': helpPopoverContent\n }\"\n >\n @if (headingLevel === 3) {\n <h3 [class]=\"headingClass\">\n {{ headingText }}\n </h3>\n } @else if (headingLevel === 4) {\n <h4 [class]=\"headingClass\">\n {{ headingText }}\n </h4>\n } @else if (headingLevel === 5) {\n <h5 [class]=\"headingClass\">\n {{ headingText }}\n </h5>\n } @else {\n <span [class]=\"headingClass\">\n {{ headingText }}\n </span>\n }\n </legend>\n @if (helpPopoverContent || helpKey) {\n <sky-help-inline\n [helpKey]=\"helpKey\"\n [labelText]=\"headingText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n }\n }\n </span>\n\n <div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div class=\"sky-font-deemphasized sky-radio-group-hint-text\">\n {{ hintText }}\n </div>\n }\n </div>\n <ng-content />\n</fieldset>\n<sky-form-errors\n [id]=\"errorId\"\n [errors]=\"ngControl?.errors\"\n [labelText]=\"headingText\"\n [touched]=\"ngControl?.touched\"\n [dirty]=\"ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n", styles: [":host.sky-margin-stacked-lg,:host.sky-margin-stacked-xl{display:block}.sky-radio-group-hint-text{margin-bottom:var(--sky-margin-stacked-lg)}.sky-radio-group-label-wrapper{display:flex}h3,h4,h5{margin:0;display:inline-block}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i4.SkyFormErrorsComponent, selector: "sky-form-errors", inputs: ["errors", "labelText", "touched", "dirty"] }, { kind: "component", type: i5.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "helpKey", "labelledBy", "labelText", "popoverContent", "popoverTitle"], outputs: ["actionClick"] }, { kind: "directive", type: i6.λ2, selector: "[skyId]", exportAs: ["skyId"] }] }); }
|
|
331
328
|
}
|
|
332
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
329
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRadioGroupComponent, decorators: [{
|
|
333
330
|
type: Component,
|
|
334
|
-
args: [{ selector: 'sky-radio-group',
|
|
335
|
-
{
|
|
336
|
-
directive: SkyFormFieldLabelTextRequiredDirective,
|
|
337
|
-
inputs: ['labelText: headingText'],
|
|
338
|
-
},
|
|
339
|
-
], providers: [
|
|
331
|
+
args: [{ selector: 'sky-radio-group', providers: [
|
|
340
332
|
SkyRadioGroupIdService,
|
|
341
333
|
{ provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
|
|
342
|
-
], template: "<fieldset\n class=\"sky-radio-group\"\n role=\"radiogroup\"\n [attr.aria-label]=\"headingText ? undefined : ariaLabel\"\n [attr.aria-labelledby]=\"headingText ? undefined : ariaLabelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-owns]=\"ariaOwns\"\n [attr.aria-required]=\"isRequired ? true : null\"\n [attr.required]=\"isRequired ? '' : null\"\n [attr.aria-invalid]=\"!!ngControl?.errors\"\n [attr.aria-errormessage]=\"\n headingText && ngControl?.errors ? errorId : undefined\n \"\n>\n <span class=\"sky-radio-group-label-wrapper\">\n
|
|
334
|
+
], template: "<fieldset\n class=\"sky-radio-group\"\n role=\"radiogroup\"\n [attr.aria-label]=\"headingText ? undefined : ariaLabel\"\n [attr.aria-labelledby]=\"headingText ? undefined : ariaLabelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-owns]=\"ariaOwns\"\n [attr.aria-required]=\"isRequired ? true : null\"\n [attr.required]=\"isRequired ? '' : null\"\n [attr.aria-invalid]=\"!!ngControl?.errors\"\n [attr.aria-errormessage]=\"\n headingText && ngControl?.errors ? errorId : undefined\n \"\n>\n <span class=\"sky-radio-group-label-wrapper\">\n @if (headingText) {\n <legend\n class=\"sky-control-label\"\n [ngClass]=\"{\n 'sky-screen-reader-only': headingHidden,\n 'sky-margin-stacked-sm': !hintText,\n 'sky-control-label-required': isRequired,\n 'sky-margin-inline-xs': helpPopoverContent\n }\"\n >\n @if (headingLevel === 3) {\n <h3 [class]=\"headingClass\">\n {{ headingText }}\n </h3>\n } @else if (headingLevel === 4) {\n <h4 [class]=\"headingClass\">\n {{ headingText }}\n </h4>\n } @else if (headingLevel === 5) {\n <h5 [class]=\"headingClass\">\n {{ headingText }}\n </h5>\n } @else {\n <span [class]=\"headingClass\">\n {{ headingText }}\n </span>\n }\n </legend>\n @if (helpPopoverContent || helpKey) {\n <sky-help-inline\n [helpKey]=\"helpKey\"\n [labelText]=\"headingText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n }\n }\n </span>\n\n <div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div class=\"sky-font-deemphasized sky-radio-group-hint-text\">\n {{ hintText }}\n </div>\n }\n </div>\n <ng-content />\n</fieldset>\n<sky-form-errors\n [id]=\"errorId\"\n [errors]=\"ngControl?.errors\"\n [labelText]=\"headingText\"\n [touched]=\"ngControl?.touched\"\n [dirty]=\"ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n", styles: [":host.sky-margin-stacked-lg,:host.sky-margin-stacked-xl{display:block}.sky-radio-group-hint-text{margin-bottom:var(--sky-margin-stacked-lg)}.sky-radio-group-label-wrapper{display:flex}h3,h4,h5{margin:0;display:inline-block}\n"] }]
|
|
343
335
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.SkyRadioGroupIdService }, { type: i2.NgControl, decorators: [{
|
|
344
336
|
type: Self
|
|
345
337
|
}, {
|
|
@@ -392,4 +384,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
392
384
|
type: HostBinding,
|
|
393
385
|
args: ['class.sky-margin-stacked-xl']
|
|
394
386
|
}] } });
|
|
395
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm1zL3NyYy9saWIvbW9kdWxlcy9yYWRpby9yYWRpby1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL3JhZGlvL3JhZGlvLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxLQUFLLEVBRUwsUUFBUSxFQUVSLElBQUksRUFFSixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLGVBQWUsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRTVHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7O0FBS3RELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUVyQixTQUFTLGdCQUFnQixDQUFDLEtBQWM7SUFDdEMsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFF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QUs7c0JBRGYsS0FBSztnQkFvQkssUUFBUTtzQkFEbEIsS0FBSztnQkFlQyxXQUFXO3NCQURqQixLQUFLO2dCQU9DLGFBQWE7c0JBRG5CLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUS9CLFFBQVE7c0JBRGQsS0FBSztnQkFTQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBUUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQVNDLE9BQU87c0JBRGIsS0FBSztnQkFhQyxNQUFNO3NCQURaLGVBQWU7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUlsRCxTQUFTO3NCQURmLFdBQVc7dUJBQUMsNkJBQTZCO2dCQUluQyxTQUFTO3NCQURmLFdBQVc7dUJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFF1ZXJ5TGlzdCxcbiAgU2VsZixcbiAgVGVtcGxhdGVSZWYsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGluamVjdCxcbiAgbnVtYmVyQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUlkU2VydmljZSwgU2t5TG9nU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCB9IGZyb20gJy4uL2Zvcm0tZXJyb3IvZm9ybS1lcnJvcnMtZW5hYmxlZC10b2tlbic7XG5pbXBvcnQgeyBTa3lGb3JtRmllbGRMYWJlbFRleHRSZXF1aXJlZERpcmVjdGl2ZSB9IGZyb20gJy4uL3NoYXJlZC9mb3JtLWZpZWxkLWxhYmVsLXRleHQtcmVxdWlyZWQuZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgU2t5UmFkaW9Hcm91cElkU2VydmljZSB9IGZyb20gJy4vcmFkaW8tZ3JvdXAtaWQuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IFNreVJhZGlvQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9yYWRpby1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5UmFkaW9Hcm91cEhlYWRpbmdMZXZlbCB9IGZyb20gJy4vdHlwZXMvcmFkaW8tZ3JvdXAtaGVhZGluZy1sZXZlbCc7XG5pbXBvcnQgeyBTa3lSYWRpb0dyb3VwSGVhZGluZ1N0eWxlIH0gZnJvbSAnLi90eXBlcy9yYWRpby1ncm91cC1oZWFkaW5nLXN0eWxlJztcblxubGV0IG5leHRVbmlxdWVJZCA9IDA7XG5cbmZ1bmN0aW9uIG51bWJlckF0dHJpYnV0ZTQodmFsdWU6IHVua25vd24pOiBudW1iZXIge1xuICByZXR1cm4gbnVtYmVyQXR0cmlidXRlKHZhbHVlLCA0KTtcbn1cblxuLyoqXG4gKiBPcmdhbml6ZXMgcmFkaW8gYnV0dG9ucyBpbnRvIGEgZ3JvdXAuIEl0IGlzIHJlcXVpcmVkIGZvciByYWRpb1xuICogYnV0dG9ucyBvbiBBbmd1bGFyIHJlYWN0aXZlIGZvcm1zLCBhbmQgd2UgcmVjb21tZW5kIHVzaW5nIGl0IHdpdGggYWxsIHJhZGlvIGJ1dHRvbnMuXG4gKiBPbiBBbmd1bGFyIGZvcm1zLCB0aGUgY29tcG9uZW50IG1hbmFnZXMgdGhlIHNlbGVjdGVkIHZhbHVlcyBhbmQga2VlcHMgdGhlIGZvcm1zIHVwLXRvLWRhdGUuXG4gKiBXaGVuIHVzZXJzIHNlbGVjdCBhIHJhZGlvIGJ1dHRvbiwgaXRzIHZhbHVlIGlzIGRyaXZlbiB0aHJvdWdoIGFuIGBuZ01vZGVsYCBhdHRyaWJ1dGUgdGhhdCB5b3Ugc3BlY2lmeSBvbiB0aGUgYHNreS1yYWRpby1ncm91cGAgZWxlbWVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXJhZGlvLWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFkaW8tZ3JvdXAuY29tcG9uZW50LnNjc3MnXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICB7XG4gICAgICBkaXJlY3RpdmU6IFNreUZvcm1GaWVsZExhYmVsVGV4dFJlcXVpcmVkRGlyZWN0aXZlLFxuICAgICAgaW5wdXRzOiBbJ2xhYmVsVGV4dDogaGVhZGluZ1RleHQnXSxcbiAgICB9LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBTa3lSYWRpb0dyb3VwSWRTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVJhZGlvR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVGhlIEhUTUwgZWxlbWVudCBJRCBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVsc1xuICAgKiB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwLiBUaGlzIHNldHMgdGhlIHJhZGlvIGJ1dHRvbiBncm91cCdzIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSB0byBwcm92aWRlIGEgdGV4dCBlcXVpdmFsZW50IGZvciBzY3JlZW4gcmVhZGVyc1xuICAgKiBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKiBJZiB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwIGRvZXMgbm90IGluY2x1ZGUgYSB2aXNpYmxlIGxhYmVsLCB1c2UgYGFyaWFMYWJlbGAgaW5zdGVhZC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsbGVkYnkpLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGhlYWRpbmdUZXh0YCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhcmlhTGFiZWxsZWRCeSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2FyaWFMYWJlbGxlZEJ5ID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI2xvZ2dlci5kZXByZWNhdGVkKCdTa3lSYWRpb0dyb3VwQ29tcG9uZW50LmFyaWFMYWJlbGxlZEJ5Jywge1xuICAgICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogOSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXJpYUxhYmVsbGVkQnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2FyaWFMYWJlbGxlZEJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUklBIGxhYmVsIGZvciB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwLiBUaGlzIHNldHMgdGhlXG4gICAqIHJhZGlvIGJ1dHRvbiBncm91cCdzIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgdG8gcHJvdmlkZSBhIHRleHQgZXF1aXZhbGVudCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICogW3RvIHN1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KS5cbiAgICogSWYgdGhlIHJhZGlvIGJ1dHRvbiBncm91cCBpbmNsdWRlcyBhIHZpc2libGUgbGFiZWwsIHVzZSBgYXJpYUxhYmVsbGVkQnlgIGluc3RlYWQuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtbGFiZWwpLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGhlYWRpbmdUZXh0YCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhcmlhTGFiZWwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19hcmlhTGFiZWwgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jbG9nZ2VyLmRlcHJlY2F0ZWQoJ1NreVJhZGlvR3JvdXBDb21wb25lbnQuYXJpYUxhYmVsJywge1xuICAgICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogOSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19hcmlhTGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBpbnB1dCBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZSB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZSB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy5cbiAgICogVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcywgdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLiNfZGlzYWJsZWQgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuI3VwZGF0ZVJhZGlvQnV0dG9uRGlzYWJsZWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNlbWFudGljIGhlYWRpbmcgbGV2ZWwgaW4gdGhlIGRvY3VtZW50IHN0cnVjdHVyZS4gQnkgZGVmYXVsdCwgdGhlIGhlYWRpbmcgdGV4dCBpcyBub3Qgd3JhcHBlZCBpbiBhIGhlYWRpbmcgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBzZXQgaGVhZGluZ0xldmVsKHZhbHVlOiBTa3lSYWRpb0dyb3VwSGVhZGluZ0xldmVsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2hlYWRpbmdMZXZlbCA9IHZhbHVlICYmICFpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLiN1cGRhdGVTdGFja2VkQ2xhc3NlcygpO1xuICB9XG5cbiAgcHVibGljIGdldCBoZWFkaW5nTGV2ZWwoKTogU2t5UmFkaW9Hcm91cEhlYWRpbmdMZXZlbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19oZWFkaW5nTGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGhlYWRpbmcgW2ZvbnQgc3R5bGVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvZGVzaWduL3N0eWxlcy90eXBvZ3JhcGh5I2hlYWRpbmdzKS5cbiAgICogQGRlZmF1bHQgNFxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGU0IH0pXG4gIHB1YmxpYyBzZXQgaGVhZGluZ1N0eWxlKHZhbHVlOiBTa3lSYWRpb0dyb3VwSGVhZGluZ1N0eWxlKSB7XG4gICAgdGhpcy5oZWFkaW5nQ2xhc3MgPSBgc2t5LWZvbnQtaGVhZGluZy0ke3ZhbHVlfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgZm9yIHRoZSBjb2xsZWN0aW9uIG9mIHJhZGlvIGJ1dHRvbnMgdGhhdCB0aGUgY29tcG9uZW50IGdyb3VwcyB0b2dldGhlci5cbiAgICogVGhpcyBwcm9wZXJ0eSBvdmVyd3JpdGVzIHRoZSBkZXByZWNhdGVkIGBuYW1lYCBwcm9wZXJ0eSBvbiBpbmRpdmlkdWFsIGBza3ktcmFkaW9gIGVsZW1lbnRzLFxuICAgKiBhbmQgaXQgaXMgcmVxdWlyZWQgdW5sZXNzIHRoZSBgbmFtZWAgcHJvcGVydHkgaXMgc2V0IG9uIGluZGl2aWR1YWwgYHNreS1yYWRpb2AgZWxlbWVudHMuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI19uYW1lID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI19uYW1lID0gdGhpcy4jZGVmYXVsdE5hbWU7XG4gICAgfVxuICAgIHRoaXMuI3VwZGF0ZVJhZGlvQnV0dG9uTmFtZXMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX25hbWU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaW5wdXQgaXMgcmVxdWlyZWQgZm9yIGZvcm0gdmFsaWRhdGlvbi5cbiAgICogV2hlbiB5b3Ugc2V0IHRoaXMgcHJvcGVydHkgdG8gYHRydWVgLCB0aGUgY29tcG9uZW50IGFkZHMgYGFyaWEtcmVxdWlyZWRgIGFuZCBgcmVxdWlyZWRgXG4gICAqIGF0dHJpYnV0ZXMgdG8gdGhlIGlucHV0IGVsZW1lbnQgc28gdGhhdCBmb3JtcyBkaXNwbGF5IGFuIGludmFsaWQgc3RhdGUgdW50aWwgdGhlIGlucHV0IGVsZW1lbnRcbiAgICogaXMgY29tcGxldGUuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1yZXF1aXJlZGAgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtcmVxdWlyZWQpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByYWRpbyBidXR0b24gZ3JvdXAgaXMgc3RhY2tlZCBvbiBhbm90aGVyIGZvcm0gY29tcG9uZW50LiBXaGVuIHNwZWNpZmllZCxcbiAgICogdGhlIGFwcHJvcHJpYXRlIHZlcnRpY2FsIHNwYWNpbmcgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBzZXQgc3RhY2tlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI19zdGFja2VkID0gdmFsdWU7XG4gICAgdGhpcy4jdXBkYXRlU3RhY2tlZENsYXNzZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX3N0YWNrZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSByYWRpbyBidXR0b24gdG8gc2VsZWN0IGJ5IGRlZmF1bHQgd2hlbiB0aGUgZ3JvdXAgbG9hZHMuXG4gICAqIFRoZSB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgYHZhbHVlYCBwcm9wZXJ0eSBvZiBhbiBpbmRpdmlkdWFsIGBza3ktcmFkaW9gIGVsZW1lbnQgd2l0aGluIHRoZVxuICAgKiBncm91cC5cbiAgICovXG4gIC8vIFRPRE86IExvb2sgaW50byBtb3JlIHN0cm9uZ2x5IHR5cGluZyBpbiBhIGJyZWFraW5nIGNoYW5nZVxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBpc05ld1ZhbHVlID0gdmFsdWUgIT09IHRoaXMuI2NvbnRyb2xWYWx1ZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGlzTmV3VmFsdWUpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2xWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy4jb25DaGFuZ2UodmFsdWUpO1xuICAgICAgdGhpcy4jdXBkYXRlQ2hlY2tlZFJhZGlvRnJvbVZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBmb3IgYWxsIHRoZSByYWRpbyBidXR0b25zIGluIHRoZSBncm91cC4gSWYgdGhlIGluZGV4IGlzIG5vdCBkZWZpbmVkLFxuICAgKiB0aGUgaW5kaWNlcyBmb3IgaW5kaXZpZHVhbCByYWRpbyBidXR0b25zIGFyZSBzZXQgdG8gdGhlaXIgcG9zaXRpb25zIG9uIGxvYWQuXG4gICAqIFRoaXMgcHJvcGVydHkgc3VwcG9ydHMgYWNjZXNzaWJpbGl0eSBieSBwbGFjaW5nIGZvY3VzIG9uIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcmFkaW9cbiAgICogYnV0dG9uLiBJZiBubyByYWRpbyBidXR0b24gaXMgc2VsZWN0ZWQsIGl0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZmlyc3Qgb3IgbGFzdCBidXR0b25cbiAgICogZGVwZW5kaW5nIG9uIGhvdyB1c2VycyBuYXZpZ2F0ZSB0byB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuI190YWJJbmRleCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuI190YWJJbmRleCA9IHZhbHVlO1xuICAgICAgdGhpcy4jdXBkYXRlUmFkaW9CdXR0b25UYWJJbmRleGVzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3RhYkluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIHJhZGlvIGdyb3VwJ3MgaGVhZGluZy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWFkaW5nVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBoaWRlIHRoZSBgaGVhZGluZ1RleHRgLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBoZWFkaW5nSGlkZGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFtQZXJzaXN0ZW50IGlubGluZSBoZWxwIHRleHRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvZGVzaWduL2d1aWRlbGluZXMvdXNlci1hc3Npc3RhbmNlI2lubGluZS1oZWxwKSB0aGF0IHByb3ZpZGVzXG4gICAqIGFkZGl0aW9uYWwgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaW50VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgaGVscCBwb3BvdmVyLiBXaGVuIHNwZWNpZmllZCBhbG9uZyB3aXRoIGBoZWFkaW5nVGV4dGAsIGEgW2hlbHAgaW5saW5lXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaGVscC1pbmxpbmUpXG4gICAqIGJ1dHRvbiBpcyBhZGRlZCB0byByYWRpbyBncm91cC4gVGhlIGhlbHAgaW5saW5lIGJ1dHRvbiBkaXNwbGF5cyBhIFtwb3BvdmVyXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcG9wb3ZlcilcbiAgICogd2hlbiBjbGlja2VkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9uYWwgdGl0bGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBoZWxwIHBvcG92ZXIuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGhlbHBQb3BvdmVyQ29udGVudGAgaXNcbiAgICogYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGhlbHAga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgZ2xvYmFsIGhlbHAgY29udGVudCB0byBkaXNwbGF5LiBXaGVuIHNwZWNpZmllZCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIHBsYWNlZCBiZXNpZGUgdGhlIHJhZGlvIGdyb3VwIGhlYWRpbmcuIENsaWNraW5nIHRoZSBidXR0b24gaW52b2tlcyBbZ2xvYmFsIGhlbHBdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vZGV2ZWxvcC9nbG9iYWwtaGVscClcbiAgICogYXMgY29uZmlndXJlZCBieSB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPdXIgcmFkaW8gY29tcG9uZW50cyBhcmUgdXN1YWxseSBpbXBsZW1lbnRlZCB1c2luZyBhbiB1bm9yZGVyZWQgbGlzdC4gVGhpcyBpcyBhblxuICAgKiBhY2Nlc3NpYmlsaXR5IHZpb2xhdGlvbiBiZWNhdXNlIHRoZSB1bm9yZGVyZWQgbGlzdCBoYXMgYW4gaW1wbGljaXQgcm9sZSB3aGljaFxuICAgKiBpbnRlcnJ1cHRzIHRoZSAncmFkaW9ncm91cCcgYW5kICdyYWRpbycgcmVsYXRpb25zaGlwLiBUbyBjb3JyZWN0IHRoaXMsIHdlIGNhbiBzZXQgdGhlXG4gICAqIHJhZGlvIGdyb3VwJ3MgJ2FyaWEtb3ducycgYXR0cmlidXRlIHRvIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgcmFkaW8gSURzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtb3duc2AgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtb3ducyksIGFuZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYHJhZGlvYCByb2xlLCBzZWUgW2l0cyBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI3JhZGlvKS5cbiAgICovXG4gIHB1YmxpYyBhcmlhT3duczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5UmFkaW9Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHVibGljIHJhZGlvczogUXVlcnlMaXN0PFNreVJhZGlvQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1tYXJnaW4tc3RhY2tlZC1sZycpXG4gIHB1YmxpYyBzdGFja2VkTGcgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1tYXJnaW4tc3RhY2tlZC14bCcpXG4gIHB1YmxpYyBzdGFja2VkWEwgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucmVxdWlyZWQgfHxcbiAgICAgICh0aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpID8/IGZhbHNlKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGVhZGluZ0NsYXNzID0gJ3NreS1mb250LWhlYWRpbmctNCc7XG5cbiAgI2NvbnRyb2xWYWx1ZTogYW55O1xuXG4gICNkZWZhdWx0TmFtZSA9IGBza3ktcmFkaW8tZ3JvdXAtJHtuZXh0VW5pcXVlSWQrK31gO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgI19uYW1lID0gJyc7XG5cbiAgI190YWJJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICNfYXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI19hcmlhTGFiZWxsZWRCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNfaGVhZGluZ0xldmVsOiBTa3lSYWRpb0dyb3VwSGVhZGluZ0xldmVsIHwgdW5kZWZpbmVkO1xuXG4gICNfc3RhY2tlZCA9IGZhbHNlO1xuXG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNyYWRpb0dyb3VwSWRTdmM6IFNreVJhZGlvR3JvdXBJZFNlcnZpY2U7XG5cbiAgcmVhZG9ubHkgI2xvZ2dlciA9IGluamVjdChTa3lMb2dTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2lkU2VydmljZSA9IGluamVjdChTa3lJZFNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCBlcnJvcklkID0gdGhpcy4jaWRTZXJ2aWNlLmdlbmVyYXRlSWQoKTtcbiAgcHJvdGVjdGVkIG5nQ29udHJvbDogTmdDb250cm9sIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICByYWRpb0dyb3VwSWRTdmM6IFNreVJhZGlvR3JvdXBJZFNlcnZpY2UsXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgKSB7XG4gICAgaWYgKG5nQ29udHJvbCkge1xuICAgICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI3JhZGlvR3JvdXBJZFN2YyA9IHJhZGlvR3JvdXBJZFN2YztcbiAgICB0aGlzLm5nQ29udHJvbCA9IG5nQ29udHJvbDtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLiNkZWZhdWx0TmFtZTtcblxuICAgIHRoaXMuI3JhZGlvR3JvdXBJZFN2Yy5yYWRpb0lkc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoaWRzKSA9PiB7XG4gICAgICAgIHRoaXMuYXJpYU93bnMgPSBpZHMuam9pbignICcpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgLy8gTGV0IGNoaWxkIHJhZGlvIGNvbXBvbmVudHMgcmVuZGVyIGJlZm9yZSB1cGRhdGluZy5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuI3Jlc2V0UmFkaW9CdXR0b25zKCk7XG4gICAgfSk7XG5cbiAgICAvLyBXYXRjaCBmb3IgcmFkaW8gc2VsZWN0aW9ucy5cbiAgICB0aGlzLndhdGNoRm9yU2VsZWN0aW9ucygpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5yYWRpb3MpIHtcbiAgICAgIHRoaXMucmFkaW9zLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIFdhaXQgZm9yIGNoaWxkIHJhZGlvIGNvbXBvbmVudHMgdG8gZmluaXNoIGFueSByZW5kZXJpbmcgdXBkYXRlcy5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jcmVzZXRSYWRpb0J1dHRvbnMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBuZXcgcmFkaW8gYnV0dG9uc1xuICAgICAgICB0aGlzLndhdGNoRm9yU2VsZWN0aW9ucygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHdhdGNoRm9yU2VsZWN0aW9ucygpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnJhZGlvcykge1xuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW8pID0+IHtcbiAgICAgICAgcmFkaW8uY2hhbmdlXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZTogU2t5UmFkaW9DaGFuZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI29uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNoYW5nZS52YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmFkaW8uYmx1ci5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiNvblRvdWNoZWQoKTtcbiAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBpc05ld1ZhbHVlID0gdmFsdWUgIT09IHRoaXMuI2NvbnRyb2xWYWx1ZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGlzTmV3VmFsdWUpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2xWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy4jdXBkYXRlQ2hlY2tlZFJhZGlvRnJvbVZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGNvbnRyb2wuIEltcGxlbWVudGVkIGFzIGEgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAjb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAjb25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7fTtcblxuICAjdXBkYXRlUmFkaW9CdXR0b25EaXNhYmxlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yYWRpb3MpIHtcbiAgICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvKSA9PlxuICAgICAgICByYWRpby5zZXRHcm91cERpc2FibGVkU3RhdGUodGhpcy5kaXNhYmxlZCksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVSYWRpb0J1dHRvbk5hbWVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJhZGlvcykge1xuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW8pID0+IHtcbiAgICAgICAgcmFkaW8ubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVSYWRpb0J1dHRvblRhYkluZGV4ZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmFkaW9zKSB7XG4gICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4ge1xuICAgICAgICByYWRpby5ncm91cFRhYkluZGV4ID0gdGhpcy50YWJJbmRleDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVDaGVja2VkUmFkaW9Gcm9tVmFsdWUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJhZGlvcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvKSA9PiB7XG4gICAgICByYWRpby5jaGVja2VkID0gdGhpcy4jY29udHJvbFZhbHVlID09PSByYWRpby52YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gICNyZXNldFJhZGlvQnV0dG9ucygpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVDaGVja2VkUmFkaW9Gcm9tVmFsdWUoKTtcbiAgICB0aGlzLiN1cGRhdGVSYWRpb0J1dHRvbk5hbWVzKCk7XG4gICAgdGhpcy4jdXBkYXRlUmFkaW9CdXR0b25UYWJJbmRleGVzKCk7XG4gICAgdGhpcy4jdXBkYXRlUmFkaW9CdXR0b25EaXNhYmxlZCgpO1xuICB9XG5cbiAgI3VwZGF0ZVN0YWNrZWRDbGFzc2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhY2tlZExnID0gIXRoaXMuaGVhZGluZ0xldmVsICYmIHRoaXMuc3RhY2tlZDtcbiAgICB0aGlzLnN0YWNrZWRYTCA9ICEhdGhpcy5oZWFkaW5nTGV2ZWwgJiYgdGhpcy5zdGFja2VkO1xuICB9XG59XG4iLCI8ZmllbGRzZXRcbiAgY2xhc3M9XCJza3ktcmFkaW8tZ3JvdXBcIlxuICByb2xlPVwicmFkaW9ncm91cFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiaGVhZGluZ1RleHQgPyB1bmRlZmluZWQgOiBhcmlhTGFiZWxcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaGVhZGluZ1RleHQgPyB1bmRlZmluZWQgOiBhcmlhTGFiZWxsZWRCeVwiXG4gIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGludFRleHQgPyBoaW50VGV4dEVsLmlkIDogdW5kZWZpbmVkXCJcbiAgW2F0dHIuYXJpYS1vd25zXT1cImFyaWFPd25zXCJcbiAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJpc1JlcXVpcmVkID8gdHJ1ZSA6IG51bGxcIlxuICBbYXR0ci5yZXF1aXJlZF09XCJpc1JlcXVpcmVkID8gJycgOiBudWxsXCJcbiAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cIiEhbmdDb250cm9sPy5lcnJvcnNcIlxuICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJcbiAgICBoZWFkaW5nVGV4dCAmJiBuZ0NvbnRyb2w/LmVycm9ycyA/IGVycm9ySWQgOiB1bmRlZmluZWRcbiAgXCJcbj5cbiAgPHNwYW4gY2xhc3M9XCJza3ktcmFkaW8tZ3JvdXAtbGFiZWwtd3JhcHBlclwiPlxuICAgIDxsZWdlbmRcbiAgICAgICpuZ0lmPVwiaGVhZGluZ1RleHRcIlxuICAgICAgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbFwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdza3ktc2NyZWVuLXJlYWRlci1vbmx5JzogaGVhZGluZ0hpZGRlbixcbiAgICAgICAgJ3NreS1tYXJnaW4tc3RhY2tlZC1zbSc6ICFoaW50VGV4dCxcbiAgICAgICAgJ3NreS1jb250cm9sLWxhYmVsLXJlcXVpcmVkJzogaXNSZXF1aXJlZCxcbiAgICAgICAgJ3NreS1tYXJnaW4taW5saW5lLXhzJzogaGVscFBvcG92ZXJDb250ZW50XG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFoZWFkaW5nTGV2ZWxcIiBbY2xhc3NdPVwiaGVhZGluZ0NsYXNzXCI+XG4gICAgICAgIHt7IGhlYWRpbmdUZXh0IH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8aDMgKm5nSWY9XCJoZWFkaW5nTGV2ZWwgPT09IDNcIiBbY2xhc3NdPVwiaGVhZGluZ0NsYXNzXCI+XG4gICAgICAgIHt7IGhlYWRpbmdUZXh0IH19XG4gICAgICA8L2gzPlxuICAgICAgPGg0ICpuZ0lmPVwiaGVhZGluZ0xldmVsID09PSA0XCIgW2NsYXNzXT1cImhlYWRpbmdDbGFzc1wiPlxuICAgICAgICB7eyBoZWFkaW5nVGV4dCB9fVxuICAgICAgPC9oND5cbiAgICAgIDxoNSAqbmdJZj1cImhlYWRpbmdMZXZlbCA9PT0gNVwiIFtjbGFzc109XCJoZWFkaW5nQ2xhc3NcIj5cbiAgICAgICAge3sgaGVhZGluZ1RleHQgfX1cbiAgICAgIDwvaDU+XG4gICAgPC9sZWdlbmQ+XG4gICAgPHNreS1oZWxwLWlubGluZVxuICAgICAgKm5nSWY9XCIoaGVscFBvcG92ZXJDb250ZW50IHx8IGhlbHBLZXkpICYmIGhlYWRpbmdUZXh0XCJcbiAgICAgIFtoZWxwS2V5XT1cImhlbHBLZXlcIlxuICAgICAgW2xhYmVsVGV4dF09XCJoZWFkaW5nVGV4dFwiXG4gICAgICBbcG9wb3ZlclRpdGxlXT1cImhlbHBQb3BvdmVyVGl0bGVcIlxuICAgICAgW3BvcG92ZXJDb250ZW50XT1cImhlbHBQb3BvdmVyQ29udGVudFwiXG4gICAgLz5cbiAgPC9zcGFuPlxuXG4gIDxkaXYgc2t5SWQgI2hpbnRUZXh0RWw9XCJza3lJZFwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiaGludFRleHRcIlxuICAgICAgY2xhc3M9XCJza3ktZm9udC1kZWVtcGhhc2l6ZWQgc2t5LXJhZGlvLWdyb3VwLWhpbnQtdGV4dFwiXG4gICAgPlxuICAgICAge3sgaGludFRleHQgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250ZW50IC8+XG48L2ZpZWxkc2V0PlxuPHNreS1mb3JtLWVycm9yc1xuICAqbmdJZj1cImhlYWRpbmdUZXh0ICYmIG5nQ29udHJvbD8uZXJyb3JzXCJcbiAgW2lkXT1cImVycm9ySWRcIlxuICBbZXJyb3JzXT1cIm5nQ29udHJvbD8uZXJyb3JzXCJcbiAgW2xhYmVsVGV4dF09XCInc2t5dXhfcmFkaW9fZ3JvdXBfcmVxdWlyZWRfbGFiZWxfdGV4dCcgfCBza3lMaWJSZXNvdXJjZXNcIlxuICBbc2hvd0Vycm9yc109XCJuZ0NvbnRyb2w/LnRvdWNoZWQgfHwgbmdDb250cm9sPy5kaXJ0eVwiXG4+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1mb3JtLWVycm9yXCIgLz5cbjwvc2t5LWZvcm0tZXJyb3JzPlxuIl19
|
|
387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm1zL3NyYy9saWIvbW9kdWxlcy9yYWRpby9yYWRpby1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL3JhZGlvL3JhZGlvLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxLQUFLLEVBRUwsUUFBUSxFQUVSLElBQUksRUFFSixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLGVBQWUsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7OztBQUt0RCxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFFckIsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjO0lBQ3RDLE9BQU8sZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFVSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDOzs7Ozs7O09B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O3NCQURkLEtBQUs7Z0JBU0Msa0JBQWtCO3NCQUR4QixLQUFLO2dCQVFDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFTQyxPQUFPO3NCQURiLEtBQUs7Z0JBYUMsTUFBTTtzQkFEWixlQUFlO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJbEQsU0FBUztzQkFEZixXQUFXO3VCQUFDLDZCQUE2QjtnQkFJbkMsU0FBUztzQkFEZixXQUFXO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFNlbGYsXG4gIFRlbXBsYXRlUmVmLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBpbmplY3QsXG4gIG51bWJlckF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lJZFNlcnZpY2UsIFNreUxvZ1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQgfSBmcm9tICcuLi9mb3JtLWVycm9yL2Zvcm0tZXJyb3JzLWVuYWJsZWQtdG9rZW4nO1xuXG5pbXBvcnQgeyBTa3lSYWRpb0dyb3VwSWRTZXJ2aWNlIH0gZnJvbSAnLi9yYWRpby1ncm91cC1pZC5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmFkaW9DaGFuZ2UgfSBmcm9tICcuL3R5cGVzL3JhZGlvLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lSYWRpb0dyb3VwSGVhZGluZ0xldmVsIH0gZnJvbSAnLi90eXBlcy9yYWRpby1ncm91cC1oZWFkaW5nLWxldmVsJztcbmltcG9ydCB7IFNreVJhZGlvR3JvdXBIZWFkaW5nU3R5bGUgfSBmcm9tICcuL3R5cGVzL3JhZGlvLWdyb3VwLWhlYWRpbmctc3R5bGUnO1xuXG5sZXQgbmV4dFVuaXF1ZUlkID0gMDtcblxuZnVuY3Rpb24gbnVtYmVyQXR0cmlidXRlNCh2YWx1ZTogdW5rbm93bik6IG51bWJlciB7XG4gIHJldHVybiBudW1iZXJBdHRyaWJ1dGUodmFsdWUsIDQpO1xufVxuXG4vKipcbiAqIE9yZ2FuaXplcyByYWRpbyBidXR0b25zIGludG8gYSBncm91cC4gSXQgaXMgcmVxdWlyZWQgZm9yIHJhZGlvXG4gKiBidXR0b25zIG9uIEFuZ3VsYXIgcmVhY3RpdmUgZm9ybXMsIGFuZCB3ZSByZWNvbW1lbmQgdXNpbmcgaXQgd2l0aCBhbGwgcmFkaW8gYnV0dG9ucy5cbiAqIE9uIEFuZ3VsYXIgZm9ybXMsIHRoZSBjb21wb25lbnQgbWFuYWdlcyB0aGUgc2VsZWN0ZWQgdmFsdWVzIGFuZCBrZWVwcyB0aGUgZm9ybXMgdXAtdG8tZGF0ZS5cbiAqIFdoZW4gdXNlcnMgc2VsZWN0IGEgcmFkaW8gYnV0dG9uLCBpdHMgdmFsdWUgaXMgZHJpdmVuIHRocm91Z2ggYW4gYG5nTW9kZWxgIGF0dHJpYnV0ZSB0aGF0IHlvdSBzcGVjaWZ5IG9uIHRoZSBgc2t5LXJhZGlvLWdyb3VwYCBlbGVtZW50LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcmFkaW8tZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yYWRpby1ncm91cC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBTa3lSYWRpb0dyb3VwSWRTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVJhZGlvR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVGhlIEhUTUwgZWxlbWVudCBJRCBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVsc1xuICAgKiB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwLiBUaGlzIHNldHMgdGhlIHJhZGlvIGJ1dHRvbiBncm91cCdzIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSB0byBwcm92aWRlIGEgdGV4dCBlcXVpdmFsZW50IGZvciBzY3JlZW4gcmVhZGVyc1xuICAgKiBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKiBJZiB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwIGRvZXMgbm90IGluY2x1ZGUgYSB2aXNpYmxlIGxhYmVsLCB1c2UgYGFyaWFMYWJlbGAgaW5zdGVhZC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsbGVkYnkpLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGhlYWRpbmdUZXh0YCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhcmlhTGFiZWxsZWRCeSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2FyaWFMYWJlbGxlZEJ5ID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI2xvZ2dlci5kZXByZWNhdGVkKCdTa3lSYWRpb0dyb3VwQ29tcG9uZW50LmFyaWFMYWJlbGxlZEJ5Jywge1xuICAgICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogOSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXJpYUxhYmVsbGVkQnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2FyaWFMYWJlbGxlZEJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUklBIGxhYmVsIGZvciB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwLiBUaGlzIHNldHMgdGhlXG4gICAqIHJhZGlvIGJ1dHRvbiBncm91cCdzIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgdG8gcHJvdmlkZSBhIHRleHQgZXF1aXZhbGVudCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICogW3RvIHN1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KS5cbiAgICogSWYgdGhlIHJhZGlvIGJ1dHRvbiBncm91cCBpbmNsdWRlcyBhIHZpc2libGUgbGFiZWwsIHVzZSBgYXJpYUxhYmVsbGVkQnlgIGluc3RlYWQuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtbGFiZWwpLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGhlYWRpbmdUZXh0YCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhcmlhTGFiZWwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19hcmlhTGFiZWwgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jbG9nZ2VyLmRlcHJlY2F0ZWQoJ1NreVJhZGlvR3JvdXBDb21wb25lbnQuYXJpYUxhYmVsJywge1xuICAgICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogOSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19hcmlhTGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBpbnB1dCBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZSB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZSB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy5cbiAgICogVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcywgdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLiNfZGlzYWJsZWQgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuI3VwZGF0ZVJhZGlvQnV0dG9uRGlzYWJsZWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNlbWFudGljIGhlYWRpbmcgbGV2ZWwgaW4gdGhlIGRvY3VtZW50IHN0cnVjdHVyZS4gQnkgZGVmYXVsdCwgdGhlIGhlYWRpbmcgdGV4dCBpcyBub3Qgd3JhcHBlZCBpbiBhIGhlYWRpbmcgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBzZXQgaGVhZGluZ0xldmVsKHZhbHVlOiBTa3lSYWRpb0dyb3VwSGVhZGluZ0xldmVsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2hlYWRpbmdMZXZlbCA9IHZhbHVlICYmICFpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLiN1cGRhdGVTdGFja2VkQ2xhc3NlcygpO1xuICB9XG5cbiAgcHVibGljIGdldCBoZWFkaW5nTGV2ZWwoKTogU2t5UmFkaW9Hcm91cEhlYWRpbmdMZXZlbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19oZWFkaW5nTGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGhlYWRpbmcgW2ZvbnQgc3R5bGVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvZGVzaWduL3N0eWxlcy90eXBvZ3JhcGh5I2hlYWRpbmdzKS5cbiAgICogQGRlZmF1bHQgNFxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGU0IH0pXG4gIHB1YmxpYyBzZXQgaGVhZGluZ1N0eWxlKHZhbHVlOiBTa3lSYWRpb0dyb3VwSGVhZGluZ1N0eWxlKSB7XG4gICAgdGhpcy5oZWFkaW5nQ2xhc3MgPSBgc2t5LWZvbnQtaGVhZGluZy0ke3ZhbHVlfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgZm9yIHRoZSBjb2xsZWN0aW9uIG9mIHJhZGlvIGJ1dHRvbnMgdGhhdCB0aGUgY29tcG9uZW50IGdyb3VwcyB0b2dldGhlci5cbiAgICogVGhpcyBwcm9wZXJ0eSBvdmVyd3JpdGVzIHRoZSBkZXByZWNhdGVkIGBuYW1lYCBwcm9wZXJ0eSBvbiBpbmRpdmlkdWFsIGBza3ktcmFkaW9gIGVsZW1lbnRzLFxuICAgKiBhbmQgaXQgaXMgcmVxdWlyZWQgdW5sZXNzIHRoZSBgbmFtZWAgcHJvcGVydHkgaXMgc2V0IG9uIGluZGl2aWR1YWwgYHNreS1yYWRpb2AgZWxlbWVudHMuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI19uYW1lID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI19uYW1lID0gdGhpcy4jZGVmYXVsdE5hbWU7XG4gICAgfVxuICAgIHRoaXMuI3VwZGF0ZVJhZGlvQnV0dG9uTmFtZXMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX25hbWU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaW5wdXQgaXMgcmVxdWlyZWQgZm9yIGZvcm0gdmFsaWRhdGlvbi5cbiAgICogV2hlbiB5b3Ugc2V0IHRoaXMgcHJvcGVydHkgdG8gYHRydWVgLCB0aGUgY29tcG9uZW50IGFkZHMgYGFyaWEtcmVxdWlyZWRgIGFuZCBgcmVxdWlyZWRgXG4gICAqIGF0dHJpYnV0ZXMgdG8gdGhlIGlucHV0IGVsZW1lbnQgc28gdGhhdCBmb3JtcyBkaXNwbGF5IGFuIGludmFsaWQgc3RhdGUgdW50aWwgdGhlIGlucHV0IGVsZW1lbnRcbiAgICogaXMgY29tcGxldGUuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1yZXF1aXJlZGAgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtcmVxdWlyZWQpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByYWRpbyBidXR0b24gZ3JvdXAgaXMgc3RhY2tlZCBvbiBhbm90aGVyIGZvcm0gY29tcG9uZW50LiBXaGVuIHNwZWNpZmllZCxcbiAgICogdGhlIGFwcHJvcHJpYXRlIHZlcnRpY2FsIHNwYWNpbmcgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBzZXQgc3RhY2tlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI19zdGFja2VkID0gdmFsdWU7XG4gICAgdGhpcy4jdXBkYXRlU3RhY2tlZENsYXNzZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX3N0YWNrZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSByYWRpbyBidXR0b24gdG8gc2VsZWN0IGJ5IGRlZmF1bHQgd2hlbiB0aGUgZ3JvdXAgbG9hZHMuXG4gICAqIFRoZSB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgYHZhbHVlYCBwcm9wZXJ0eSBvZiBhbiBpbmRpdmlkdWFsIGBza3ktcmFkaW9gIGVsZW1lbnQgd2l0aGluIHRoZVxuICAgKiBncm91cC5cbiAgICovXG4gIC8vIFRPRE86IExvb2sgaW50byBtb3JlIHN0cm9uZ2x5IHR5cGluZyBpbiBhIGJyZWFraW5nIGNoYW5nZVxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBpc05ld1ZhbHVlID0gdmFsdWUgIT09IHRoaXMuI2NvbnRyb2xWYWx1ZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGlzTmV3VmFsdWUpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2xWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy4jb25DaGFuZ2UodmFsdWUpO1xuICAgICAgdGhpcy4jdXBkYXRlQ2hlY2tlZFJhZGlvRnJvbVZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBmb3IgYWxsIHRoZSByYWRpbyBidXR0b25zIGluIHRoZSBncm91cC4gSWYgdGhlIGluZGV4IGlzIG5vdCBkZWZpbmVkLFxuICAgKiB0aGUgaW5kaWNlcyBmb3IgaW5kaXZpZHVhbCByYWRpbyBidXR0b25zIGFyZSBzZXQgdG8gdGhlaXIgcG9zaXRpb25zIG9uIGxvYWQuXG4gICAqIFRoaXMgcHJvcGVydHkgc3VwcG9ydHMgYWNjZXNzaWJpbGl0eSBieSBwbGFjaW5nIGZvY3VzIG9uIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcmFkaW9cbiAgICogYnV0dG9uLiBJZiBubyByYWRpbyBidXR0b24gaXMgc2VsZWN0ZWQsIGl0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZmlyc3Qgb3IgbGFzdCBidXR0b25cbiAgICogZGVwZW5kaW5nIG9uIGhvdyB1c2VycyBuYXZpZ2F0ZSB0byB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuI190YWJJbmRleCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuI190YWJJbmRleCA9IHZhbHVlO1xuICAgICAgdGhpcy4jdXBkYXRlUmFkaW9CdXR0b25UYWJJbmRleGVzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3RhYkluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIHJhZGlvIGdyb3VwJ3MgaGVhZGluZy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWFkaW5nVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBoaWRlIHRoZSBgaGVhZGluZ1RleHRgLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBoZWFkaW5nSGlkZGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFtQZXJzaXN0ZW50IGlubGluZSBoZWxwIHRleHRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvZGVzaWduL2d1aWRlbGluZXMvdXNlci1hc3Npc3RhbmNlI2lubGluZS1oZWxwKSB0aGF0IHByb3ZpZGVzXG4gICAqIGFkZGl0aW9uYWwgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaW50VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgaGVscCBwb3BvdmVyLiBXaGVuIHNwZWNpZmllZCBhbG9uZyB3aXRoIGBoZWFkaW5nVGV4dGAsIGEgW2hlbHAgaW5saW5lXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaGVscC1pbmxpbmUpXG4gICAqIGJ1dHRvbiBpcyBhZGRlZCB0byByYWRpbyBncm91cC4gVGhlIGhlbHAgaW5saW5lIGJ1dHRvbiBkaXNwbGF5cyBhIFtwb3BvdmVyXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcG9wb3ZlcilcbiAgICogd2hlbiBjbGlja2VkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9uYWwgdGl0bGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBoZWxwIHBvcG92ZXIuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGhlbHBQb3BvdmVyQ29udGVudGAgaXNcbiAgICogYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGhlbHAga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgZ2xvYmFsIGhlbHAgY29udGVudCB0byBkaXNwbGF5LiBXaGVuIHNwZWNpZmllZCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIHBsYWNlZCBiZXNpZGUgdGhlIHJhZGlvIGdyb3VwIGhlYWRpbmcuIENsaWNraW5nIHRoZSBidXR0b24gaW52b2tlcyBbZ2xvYmFsIGhlbHBdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vZGV2ZWxvcC9nbG9iYWwtaGVscClcbiAgICogYXMgY29uZmlndXJlZCBieSB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPdXIgcmFkaW8gY29tcG9uZW50cyBhcmUgdXN1YWxseSBpbXBsZW1lbnRlZCB1c2luZyBhbiB1bm9yZGVyZWQgbGlzdC4gVGhpcyBpcyBhblxuICAgKiBhY2Nlc3NpYmlsaXR5IHZpb2xhdGlvbiBiZWNhdXNlIHRoZSB1bm9yZGVyZWQgbGlzdCBoYXMgYW4gaW1wbGljaXQgcm9sZSB3aGljaFxuICAgKiBpbnRlcnJ1cHRzIHRoZSAncmFkaW9ncm91cCcgYW5kICdyYWRpbycgcmVsYXRpb25zaGlwLiBUbyBjb3JyZWN0IHRoaXMsIHdlIGNhbiBzZXQgdGhlXG4gICAqIHJhZGlvIGdyb3VwJ3MgJ2FyaWEtb3ducycgYXR0cmlidXRlIHRvIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgcmFkaW8gSURzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtb3duc2AgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtb3ducyksIGFuZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYHJhZGlvYCByb2xlLCBzZWUgW2l0cyBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI3JhZGlvKS5cbiAgICovXG4gIHB1YmxpYyBhcmlhT3duczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5UmFkaW9Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHVibGljIHJhZGlvczogUXVlcnlMaXN0PFNreVJhZGlvQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1tYXJnaW4tc3RhY2tlZC1sZycpXG4gIHB1YmxpYyBzdGFja2VkTGcgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1tYXJnaW4tc3RhY2tlZC14bCcpXG4gIHB1YmxpYyBzdGFja2VkWEwgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucmVxdWlyZWQgfHxcbiAgICAgICh0aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpID8/IGZhbHNlKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGVhZGluZ0NsYXNzID0gJ3NreS1mb250LWhlYWRpbmctNCc7XG5cbiAgI2NvbnRyb2xWYWx1ZTogYW55O1xuXG4gICNkZWZhdWx0TmFtZSA9IGBza3ktcmFkaW8tZ3JvdXAtJHtuZXh0VW5pcXVlSWQrK31gO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgI19uYW1lID0gJyc7XG5cbiAgI190YWJJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICNfYXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI19hcmlhTGFiZWxsZWRCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNfaGVhZGluZ0xldmVsOiBTa3lSYWRpb0dyb3VwSGVhZGluZ0xldmVsIHwgdW5kZWZpbmVkO1xuXG4gICNfc3RhY2tlZCA9IGZhbHNlO1xuXG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNyYWRpb0dyb3VwSWRTdmM6IFNreVJhZGlvR3JvdXBJZFNlcnZpY2U7XG5cbiAgcmVhZG9ubHkgI2xvZ2dlciA9IGluamVjdChTa3lMb2dTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2lkU2VydmljZSA9IGluamVjdChTa3lJZFNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCBlcnJvcklkID0gdGhpcy4jaWRTZXJ2aWNlLmdlbmVyYXRlSWQoKTtcbiAgcHJvdGVjdGVkIG5nQ29udHJvbDogTmdDb250cm9sIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICByYWRpb0dyb3VwSWRTdmM6IFNreVJhZGlvR3JvdXBJZFNlcnZpY2UsXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgKSB7XG4gICAgaWYgKG5nQ29udHJvbCkge1xuICAgICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI3JhZGlvR3JvdXBJZFN2YyA9IHJhZGlvR3JvdXBJZFN2YztcbiAgICB0aGlzLm5nQ29udHJvbCA9IG5nQ29udHJvbDtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLiNkZWZhdWx0TmFtZTtcblxuICAgIHRoaXMuI3JhZGlvR3JvdXBJZFN2Yy5yYWRpb0lkc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoaWRzKSA9PiB7XG4gICAgICAgIHRoaXMuYXJpYU93bnMgPSBpZHMuam9pbignICcpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgLy8gTGV0IGNoaWxkIHJhZGlvIGNvbXBvbmVudHMgcmVuZGVyIGJlZm9yZSB1cGRhdGluZy5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuI3Jlc2V0UmFkaW9CdXR0b25zKCk7XG4gICAgfSk7XG5cbiAgICAvLyBXYXRjaCBmb3IgcmFkaW8gc2VsZWN0aW9ucy5cbiAgICB0aGlzLndhdGNoRm9yU2VsZWN0aW9ucygpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5yYWRpb3MpIHtcbiAgICAgIHRoaXMucmFkaW9zLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIFdhaXQgZm9yIGNoaWxkIHJhZGlvIGNvbXBvbmVudHMgdG8gZmluaXNoIGFueSByZW5kZXJpbmcgdXBkYXRlcy5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jcmVzZXRSYWRpb0J1dHRvbnMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBuZXcgcmFkaW8gYnV0dG9uc1xuICAgICAgICB0aGlzLndhdGNoRm9yU2VsZWN0aW9ucygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHdhdGNoRm9yU2VsZWN0aW9ucygpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnJhZGlvcykge1xuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW8pID0+IHtcbiAgICAgICAgcmFkaW8uY2hhbmdlXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZTogU2t5UmFkaW9DaGFuZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI29uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNoYW5nZS52YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmFkaW8uYmx1ci5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiNvblRvdWNoZWQoKTtcbiAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBpc05ld1ZhbHVlID0gdmFsdWUgIT09IHRoaXMuI2NvbnRyb2xWYWx1ZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGlzTmV3VmFsdWUpIHtcbiAgICAgIHRoaXMuI2NvbnRyb2xWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy4jdXBkYXRlQ2hlY2tlZFJhZGlvRnJvbVZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGNvbnRyb2wuIEltcGxlbWVudGVkIGFzIGEgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAjb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAjb25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7fTtcblxuICAjdXBkYXRlUmFkaW9CdXR0b25EaXNhYmxlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yYWRpb3MpIHtcbiAgICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvKSA9PlxuICAgICAgICByYWRpby5zZXRHcm91cERpc2FibGVkU3RhdGUodGhpcy5kaXNhYmxlZCksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVSYWRpb0J1dHRvbk5hbWVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJhZGlvcykge1xuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW8pID0+IHtcbiAgICAgICAgcmFkaW8ubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVSYWRpb0J1dHRvblRhYkluZGV4ZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmFkaW9zKSB7XG4gICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4ge1xuICAgICAgICByYWRpby5ncm91cFRhYkluZGV4ID0gdGhpcy50YWJJbmRleDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVDaGVja2VkUmFkaW9Gcm9tVmFsdWUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJhZGlvcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvKSA9PiB7XG4gICAgICByYWRpby5jaGVja2VkID0gdGhpcy4jY29udHJvbFZhbHVlID09PSByYWRpby52YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gICNyZXNldFJhZGlvQnV0dG9ucygpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVDaGVja2VkUmFkaW9Gcm9tVmFsdWUoKTtcbiAgICB0aGlzLiN1cGRhdGVSYWRpb0J1dHRvbk5hbWVzKCk7XG4gICAgdGhpcy4jdXBkYXRlUmFkaW9CdXR0b25UYWJJbmRleGVzKCk7XG4gICAgdGhpcy4jdXBkYXRlUmFkaW9CdXR0b25EaXNhYmxlZCgpO1xuICB9XG5cbiAgI3VwZGF0ZVN0YWNrZWRDbGFzc2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhY2tlZExnID0gIXRoaXMuaGVhZGluZ0xldmVsICYmIHRoaXMuc3RhY2tlZDtcbiAgICB0aGlzLnN0YWNrZWRYTCA9ICEhdGhpcy5oZWFkaW5nTGV2ZWwgJiYgdGhpcy5zdGFja2VkO1xuICB9XG59XG4iLCI8ZmllbGRzZXRcbiAgY2xhc3M9XCJza3ktcmFkaW8tZ3JvdXBcIlxuICByb2xlPVwicmFkaW9ncm91cFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiaGVhZGluZ1RleHQgPyB1bmRlZmluZWQgOiBhcmlhTGFiZWxcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaGVhZGluZ1RleHQgPyB1bmRlZmluZWQgOiBhcmlhTGFiZWxsZWRCeVwiXG4gIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGludFRleHQgPyBoaW50VGV4dEVsLmlkIDogdW5kZWZpbmVkXCJcbiAgW2F0dHIuYXJpYS1vd25zXT1cImFyaWFPd25zXCJcbiAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJpc1JlcXVpcmVkID8gdHJ1ZSA6IG51bGxcIlxuICBbYXR0ci5yZXF1aXJlZF09XCJpc1JlcXVpcmVkID8gJycgOiBudWxsXCJcbiAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cIiEhbmdDb250cm9sPy5lcnJvcnNcIlxuICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJcbiAgICBoZWFkaW5nVGV4dCAmJiBuZ0NvbnRyb2w/LmVycm9ycyA/IGVycm9ySWQgOiB1bmRlZmluZWRcbiAgXCJcbj5cbiAgPHNwYW4gY2xhc3M9XCJza3ktcmFkaW8tZ3JvdXAtbGFiZWwtd3JhcHBlclwiPlxuICAgIEBpZiAoaGVhZGluZ1RleHQpIHtcbiAgICAgIDxsZWdlbmRcbiAgICAgICAgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnc2t5LXNjcmVlbi1yZWFkZXItb25seSc6IGhlYWRpbmdIaWRkZW4sXG4gICAgICAgICAgJ3NreS1tYXJnaW4tc3RhY2tlZC1zbSc6ICFoaW50VGV4dCxcbiAgICAgICAgICAnc2t5LWNvbnRyb2wtbGFiZWwtcmVxdWlyZWQnOiBpc1JlcXVpcmVkLFxuICAgICAgICAgICdza3ktbWFyZ2luLWlubGluZS14cyc6IGhlbHBQb3BvdmVyQ29udGVudFxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgQGlmIChoZWFkaW5nTGV2ZWwgPT09IDMpIHtcbiAgICAgICAgICA8aDMgW2NsYXNzXT1cImhlYWRpbmdDbGFzc1wiPlxuICAgICAgICAgICAge3sgaGVhZGluZ1RleHQgfX1cbiAgICAgICAgICA8L2gzPlxuICAgICAgICB9IEBlbHNlIGlmIChoZWFkaW5nTGV2ZWwgPT09IDQpIHtcbiAgICAgICAgICA8aDQgW2NsYXNzXT1cImhlYWRpbmdDbGFzc1wiPlxuICAgICAgICAgICAge3sgaGVhZGluZ1RleHQgfX1cbiAgICAgICAgICA8L2g0PlxuICAgICAgICB9IEBlbHNlIGlmIChoZWFkaW5nTGV2ZWwgPT09IDUpIHtcbiAgICAgICAgICA8aDUgW2NsYXNzXT1cImhlYWRpbmdDbGFzc1wiPlxuICAgICAgICAgICAge3sgaGVhZGluZ1RleHQgfX1cbiAgICAgICAgICA8L2g1PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaGVhZGluZ0NsYXNzXCI+XG4gICAgICAgICAgICB7eyBoZWFkaW5nVGV4dCB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9sZWdlbmQ+XG4gICAgICBAaWYgKGhlbHBQb3BvdmVyQ29udGVudCB8fCBoZWxwS2V5KSB7XG4gICAgICAgIDxza3ktaGVscC1pbmxpbmVcbiAgICAgICAgICBbaGVscEtleV09XCJoZWxwS2V5XCJcbiAgICAgICAgICBbbGFiZWxUZXh0XT1cImhlYWRpbmdUZXh0XCJcbiAgICAgICAgICBbcG9wb3ZlclRpdGxlXT1cImhlbHBQb3BvdmVyVGl0bGVcIlxuICAgICAgICAgIFtwb3BvdmVyQ29udGVudF09XCJoZWxwUG9wb3ZlckNvbnRlbnRcIlxuICAgICAgICAvPlxuICAgICAgfVxuICAgIH1cbiAgPC9zcGFuPlxuXG4gIDxkaXYgI2hpbnRUZXh0RWw9XCJza3lJZFwiIHNreUlkPlxuICAgIEBpZiAoaGludFRleHQpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJza3ktZm9udC1kZWVtcGhhc2l6ZWQgc2t5LXJhZGlvLWdyb3VwLWhpbnQtdGV4dFwiPlxuICAgICAgICB7eyBoaW50VGV4dCB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgPG5nLWNvbnRlbnQgLz5cbjwvZmllbGRzZXQ+XG48c2t5LWZvcm0tZXJyb3JzXG4gIFtpZF09XCJlcnJvcklkXCJcbiAgW2Vycm9yc109XCJuZ0NvbnRyb2w/LmVycm9yc1wiXG4gIFtsYWJlbFRleHRdPVwiaGVhZGluZ1RleHRcIlxuICBbdG91Y2hlZF09XCJuZ0NvbnRyb2w/LnRvdWNoZWRcIlxuICBbZGlydHldPVwibmdDb250cm9sPy5kaXJ0eVwiXG4+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1mb3JtLWVycm9yXCIgLz5cbjwvc2t5LWZvcm0tZXJyb3JzPlxuIl19
|
|
@@ -21,10 +21,10 @@ export class SkyRadioLabelComponent {
|
|
|
21
21
|
replacementRecommendation: 'To add a label to radio button, use the `labelText` input on the radio button component instead.',
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
25
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRadioLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.3", type: SkyRadioLabelComponent, selector: "sky-radio-label", host: { listeners: { "click": "onClick($event)" } }, ngImport: i0, template: "<span class=\"sky-switch-label\"\n ><span skyTrim><ng-content /></span\n ><span class=\"sky-control-help-container\"\n ><ng-content select=\".sky-control-help\" /></span\n></span>\n", dependencies: [{ kind: "directive", type: i1.λ4, selector: "[skyTrim]" }] }); }
|
|
26
26
|
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRadioLabelComponent, decorators: [{
|
|
28
28
|
type: Component,
|
|
29
29
|
args: [{ selector: 'sky-radio-label', template: "<span class=\"sky-switch-label\"\n ><span skyTrim><ng-content /></span\n ><span class=\"sky-control-help-container\"\n ><ng-content select=\".sky-control-help\" /></span\n></span>\n" }]
|
|
30
30
|
}], ctorParameters: () => [], propDecorators: { onClick: [{
|
|
@@ -2,14 +2,12 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, In
|
|
|
2
2
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
3
|
import { SkyIdService, SkyLogService } from '@skyux/core';
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
|
-
import { SkyFormFieldLabelTextRequiredDirective } from '../shared/form-field-label-text-required.directive';
|
|
6
5
|
import { SkyRadioGroupIdService } from './radio-group-id.service';
|
|
7
6
|
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "
|
|
9
|
-
import * as i2 from "@
|
|
10
|
-
import * as i3 from "@skyux/
|
|
11
|
-
import * as i4 from "@skyux/
|
|
12
|
-
import * as i5 from "@skyux/core";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
|
+
import * as i2 from "@skyux/help-inline";
|
|
9
|
+
import * as i3 from "@skyux/icon";
|
|
10
|
+
import * as i4 from "@skyux/core";
|
|
13
11
|
/**
|
|
14
12
|
* Provider Expression that allows sky-radio to register as a ControlValueAccessor.
|
|
15
13
|
* This allows it to support [(ngModel)].
|
|
@@ -307,17 +305,12 @@ export class SkyRadioComponent {
|
|
|
307
305
|
#onChangeCallback;
|
|
308
306
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
309
307
|
#onTouchedCallback;
|
|
310
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
311
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
308
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
309
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: SkyRadioComponent, selector: "sky-radio", inputs: { checked: "checked", disabled: ["disabled", "disabled", booleanAttribute], id: "id", label: "label", labelledBy: "labelledBy", name: "name", tabindex: "tabindex", value: "value", helpPopoverContent: "helpPopoverContent", helpPopoverTitle: "helpPopoverTitle", icon: "icon", radioType: "radioType", labelText: "labelText", labelHidden: ["labelHidden", "labelHidden", booleanAttribute], hintText: "hintText", helpKey: "helpKey" }, outputs: { change: "change", checkedChange: "checkedChange", disabledChange: "disabledChange" }, providers: [SKY_RADIO_CONTROL_VALUE_ACCESSOR], ngImport: i0, template: "<span class=\"sky-radio-outer-wrapper\">\n <label\n class=\"sky-radio-wrapper sky-switch\"\n [ngClass]=\"{ 'sky-switch-disabled': disabled || radioGroupDisabled }\"\n >\n <input\n class=\"sky-radio-input sky-switch-input\"\n type=\"radio\"\n [attr.aria-label]=\"labelText || label\"\n [attr.aria-labelledby]=\"labelText ? undefined : labelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [checked]=\"checked\"\n [disabled]=\"disabled || radioGroupDisabled\"\n [id]=\"inputId\"\n [name]=\"name\"\n [tabIndex]=\"tabindex\"\n [value]=\"value\"\n (blur)=\"onInputFocusChange()\"\n (change)=\"onInputChange($event)\"\n />\n <span\n class=\"sky-switch-control\"\n [ngClass]=\"{\n 'sky-switch-control-icon': icon,\n 'sky-rounded-corners': icon,\n 'sky-rounded-circle': !icon,\n 'sky-switch-control-info': icon && radioType === 'info',\n 'sky-switch-control-success': icon && radioType === 'success',\n 'sky-switch-control-warning': icon && radioType === 'warning',\n 'sky-switch-control-danger': icon && radioType === 'danger'\n }\"\n >\n @if (icon) {\n <sky-icon [fixedWidth]=\"true\" [icon]=\"icon\" />\n }\n </span>\n @if (labelText) {\n @if (!labelHidden) {\n <span class=\"sky-switch-label\">{{ labelText }}</span>\n }\n } @else {\n <ng-content select=\"sky-radio-label\" />\n }\n </label>\n @if ((helpPopoverContent || helpKey) && labelText) {\n <sky-help-inline\n class=\"sky-radio-help-inline\"\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n }\n</span>\n<div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div class=\"sky-font-deemphasized sky-radio-hint-text\">\n {{ hintText }}\n </div>\n }\n</div>\n", styles: [":host:has(.sky-switch-control-icon){display:inline-block}:host-context(sky-radio-group):not(:has(li)) :host:not(:has(.sky-switch-control-icon)){display:block}:host-context(sky-radio-group):not(:has(li)) :host:not(:has(.sky-switch-control-icon)):not(:last-child){margin-bottom:var(--sky-margin-stacked-sm)}.sky-radio-outer-wrapper{display:flex}.sky-radio-help-inline{display:inline-flex}.sky-switch-label:not(.sky-theme-modern *){margin-right:var(--sky-margin-inline-xs)}:is(.sky-theme-modern .sky-switch-label){margin-right:var(--sky-margin-inline-xs)}.sky-switch-control:not(.sky-switch-control-icon) sky-icon{font-size:70%}.sky-switch-input:checked+.sky-switch-control:not(.sky-switch-control-icon):after{content:\"\";display:inline-block;width:10px;height:10px;background:#000;border-radius:50%}.sky-radio-hint-text{margin:var(--sky-margin-stacked-xs) 0 0 calc(var(--sky-switch-size) + var(--sky-switch-margin))}:host-context(.sky-theme-modern) .sky-switch-input:checked+.sky-switch-control:not(.sky-switch-control-icon):after{background:#1870b8}:host-context(.sky-theme-modern) .sky-radio-input:disabled+.sky-switch-control .sky-radio-icon-modern-checked{background-color:#212327}:host-context(.sky-theme-modern) .sky-switch{display:flex}.sky-theme-modern .sky-switch-input:checked+.sky-switch-control:not(.sky-switch-control-icon):after{background:#1870b8}.sky-theme-modern .sky-radio-input:disabled+.sky-switch-control .sky-radio-icon-modern-checked{background-color:#212327}.sky-theme-modern .sky-switch{display:flex}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "helpKey", "labelledBy", "labelText", "popoverContent", "popoverTitle"], outputs: ["actionClick"] }, { kind: "component", type: i3.λ1, selector: "sky-icon", inputs: ["icon", "iconName", "iconType", "size", "fixedWidth", "variant"] }, { kind: "directive", type: i4.λ2, selector: "[skyId]", exportAs: ["skyId"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
312
310
|
}
|
|
313
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
311
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRadioComponent, decorators: [{
|
|
314
312
|
type: Component,
|
|
315
|
-
args: [{ selector: 'sky-radio',
|
|
316
|
-
{
|
|
317
|
-
directive: SkyFormFieldLabelTextRequiredDirective,
|
|
318
|
-
inputs: ['labelText'],
|
|
319
|
-
},
|
|
320
|
-
], providers: [SKY_RADIO_CONTROL_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"sky-radio-outer-wrapper\">\n <label\n class=\"sky-radio-wrapper sky-switch\"\n [ngClass]=\"{ 'sky-switch-disabled': disabled || radioGroupDisabled }\"\n >\n <input\n class=\"sky-radio-input sky-switch-input\"\n type=\"radio\"\n [attr.aria-label]=\"labelText || label\"\n [attr.aria-labelledby]=\"labelText ? undefined : labelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [checked]=\"checked\"\n [disabled]=\"disabled || radioGroupDisabled\"\n [id]=\"inputId\"\n [name]=\"name\"\n [tabIndex]=\"tabindex\"\n [value]=\"value\"\n (blur)=\"onInputFocusChange()\"\n (change)=\"onInputChange($event)\"\n />\n <span\n class=\"sky-switch-control\"\n [ngClass]=\"{\n 'sky-switch-control-icon': icon,\n 'sky-rounded-corners': icon,\n 'sky-rounded-circle': !icon,\n 'sky-switch-control-info': icon && radioType === 'info',\n 'sky-switch-control-success': icon && radioType === 'success',\n 'sky-switch-control-warning': icon && radioType === 'warning',\n 'sky-switch-control-danger': icon && radioType === 'danger'\n }\"\n >\n <sky-icon *ngIf=\"icon\" [fixedWidth]=\"true\" [icon]=\"icon\" />\n </span>\n <ng-container *ngIf=\"labelText; else labelElement\">\n <span *ngIf=\"!labelHidden\" class=\"sky-switch-label\">{{ labelText }}</span>\n </ng-container>\n <ng-template #labelElement>\n <ng-content select=\"sky-radio-label\" />\n </ng-template>\n </label>\n <sky-help-inline\n *ngIf=\"(helpPopoverContent || helpKey) && labelText\"\n class=\"sky-radio-help-inline\"\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n</span>\n<div skyId #hintTextEl=\"skyId\">\n <div *ngIf=\"hintText\" class=\"sky-font-deemphasized sky-radio-hint-text\">\n {{ hintText }}\n </div>\n</div>\n", styles: [":host{display:inline-block}.sky-radio-outer-wrapper,.sky-radio-help-inline{display:inline-flex}.sky-switch-label:not(.sky-theme-modern *){margin-right:var(--sky-margin-inline-xs)}:is(.sky-theme-modern .sky-switch-label){margin-right:var(--sky-margin-inline-xs)}.sky-switch-control:not(.sky-switch-control-icon) sky-icon{font-size:70%}.sky-switch-input:checked+.sky-switch-control:not(.sky-switch-control-icon):after{content:\"\";display:inline-block;width:10px;height:10px;background:#000;border-radius:50%}.sky-radio-hint-text{margin:var(--sky-margin-stacked-xs) 0 0 calc(var(--sky-switch-size) + var(--sky-switch-margin))}:host-context(.sky-theme-modern) .sky-switch-input:checked+.sky-switch-control:not(.sky-switch-control-icon):after{background:#1870b8}:host-context(.sky-theme-modern) .sky-radio-input:disabled+.sky-switch-control .sky-radio-icon-modern-checked{background-color:#212327}.sky-theme-modern .sky-switch-input:checked+.sky-switch-control:not(.sky-switch-control-icon):after{background:#1870b8}.sky-theme-modern .sky-radio-input:disabled+.sky-switch-control .sky-radio-icon-modern-checked{background-color:#212327}\n"] }]
|
|
313
|
+
args: [{ selector: 'sky-radio', providers: [SKY_RADIO_CONTROL_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"sky-radio-outer-wrapper\">\n <label\n class=\"sky-radio-wrapper sky-switch\"\n [ngClass]=\"{ 'sky-switch-disabled': disabled || radioGroupDisabled }\"\n >\n <input\n class=\"sky-radio-input sky-switch-input\"\n type=\"radio\"\n [attr.aria-label]=\"labelText || label\"\n [attr.aria-labelledby]=\"labelText ? undefined : labelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [checked]=\"checked\"\n [disabled]=\"disabled || radioGroupDisabled\"\n [id]=\"inputId\"\n [name]=\"name\"\n [tabIndex]=\"tabindex\"\n [value]=\"value\"\n (blur)=\"onInputFocusChange()\"\n (change)=\"onInputChange($event)\"\n />\n <span\n class=\"sky-switch-control\"\n [ngClass]=\"{\n 'sky-switch-control-icon': icon,\n 'sky-rounded-corners': icon,\n 'sky-rounded-circle': !icon,\n 'sky-switch-control-info': icon && radioType === 'info',\n 'sky-switch-control-success': icon && radioType === 'success',\n 'sky-switch-control-warning': icon && radioType === 'warning',\n 'sky-switch-control-danger': icon && radioType === 'danger'\n }\"\n >\n @if (icon) {\n <sky-icon [fixedWidth]=\"true\" [icon]=\"icon\" />\n }\n </span>\n @if (labelText) {\n @if (!labelHidden) {\n <span class=\"sky-switch-label\">{{ labelText }}</span>\n }\n } @else {\n <ng-content select=\"sky-radio-label\" />\n }\n </label>\n @if ((helpPopoverContent || helpKey) && labelText) {\n <sky-help-inline\n class=\"sky-radio-help-inline\"\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n }\n</span>\n<div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div class=\"sky-font-deemphasized sky-radio-hint-text\">\n {{ hintText }}\n </div>\n }\n</div>\n", styles: [":host:has(.sky-switch-control-icon){display:inline-block}:host-context(sky-radio-group):not(:has(li)) :host:not(:has(.sky-switch-control-icon)){display:block}:host-context(sky-radio-group):not(:has(li)) :host:not(:has(.sky-switch-control-icon)):not(:last-child){margin-bottom:var(--sky-margin-stacked-sm)}.sky-radio-outer-wrapper{display:flex}.sky-radio-help-inline{display:inline-flex}.sky-switch-label:not(.sky-theme-modern *){margin-right:var(--sky-margin-inline-xs)}:is(.sky-theme-modern .sky-switch-label){margin-right:var(--sky-margin-inline-xs)}.sky-switch-control:not(.sky-switch-control-icon) sky-icon{font-size:70%}.sky-switch-input:checked+.sky-switch-control:not(.sky-switch-control-icon):after{content:\"\";display:inline-block;width:10px;height:10px;background:#000;border-radius:50%}.sky-radio-hint-text{margin:var(--sky-margin-stacked-xs) 0 0 calc(var(--sky-switch-size) + var(--sky-switch-margin))}:host-context(.sky-theme-modern) .sky-switch-input:checked+.sky-switch-control:not(.sky-switch-control-icon):after{background:#1870b8}:host-context(.sky-theme-modern) .sky-radio-input:disabled+.sky-switch-control .sky-radio-icon-modern-checked{background-color:#212327}:host-context(.sky-theme-modern) .sky-switch{display:flex}.sky-theme-modern .sky-switch-input:checked+.sky-switch-control:not(.sky-switch-control-icon):after{background:#1870b8}.sky-theme-modern .sky-radio-input:disabled+.sky-switch-control .sky-radio-icon-modern-checked{background-color:#212327}.sky-theme-modern .sky-switch{display:flex}\n"] }]
|
|
321
314
|
}], ctorParameters: () => [], propDecorators: { checked: [{
|
|
322
315
|
type: Input
|
|
323
316
|
}], disabled: [{
|
|
@@ -359,4 +352,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
359
352
|
}], disabledChange: [{
|
|
360
353
|
type: Output
|
|
361
354
|
}] } });
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm1zL3NyYy9saWIvbW9kdWxlcy9yYWRpby9yYWRpby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL3JhZGlvL3JhZGlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFHTixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUU1RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQUlsRTs7O0dBR0c7QUFDSCxNQUFNLGdDQUFnQyxHQUFhO0lBQ2pELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztJQUNoRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRjs7OztHQUlHO0FBY0gsTUFBTSxPQUFPLGlCQUFpQjtJQU01Qjs7O09BR0c7SUFDSCxJQUNXLE9BQU8sQ0FBQyxLQUEwQjtRQUMzQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRWhDLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztZQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUV6QyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBYztRQUNoQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ1csRUFBRSxDQUFDLEtBQXlCO1FBQ3JDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsS0FBSyxRQUFRLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsSUFBSSxDQUFDLFVBQVUsUUFBUSxDQUFDO1FBQ3RELENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFDVyxLQUFLLENBQUMsS0FBeUI7UUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFckIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLHlCQUF5QixFQUFFO2dCQUNqRCx1QkFBdUIsRUFBRSxFQUFFO2dCQUMzQix5QkFBeUIsRUFBRSxvQ0FBb0M7YUFDaEUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUNXLFVBQVUsQ0FBQyxLQUF5QjtRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUUxQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsOEJBQThCLEVBQUU7Z0JBQ3RELHVCQUF1QixFQUFFLEVBQUU7Z0JBQzNCLHlCQUF5QixFQUFFLG9DQUFvQzthQUNoRSxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFDVyxJQUFJLENBQUMsS0FBeUI7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQ1csUUFBUSxDQUFDLEtBQXlCO1FBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsdUhBQXVILENBQ3hILENBQUM7UUFDRixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELElBQVcsYUFBYSxDQUFDLEtBQXlCO1FBQ2hELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUMxQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQ1csS0FBSyxDQUFDLEtBQVU7UUFDekIsMEJBQTBCO1FBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzlELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixDQUFDO1lBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBeUJEOzs7Ozs7OztPQVFHO0lBQ0gsSUFDVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBVyxTQUFTLENBQUMsS0FBK0I7UUFDbEQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLDZCQUE2QixFQUFFO2dCQUNyRCx1QkFBdUIsRUFBRSxDQUFDO2FBQzNCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUM7SUFDckMsQ0FBQztJQWdERCxJQUFXLGFBQWEsQ0FBQyxLQUFVO1FBQ2pDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQU1ELFNBQVMsQ0FBUztJQUNsQixVQUFVLENBQVM7SUFDbkIsTUFBTSxDQUFxQjtJQUMzQixXQUFXLENBQXdCO0lBQ25DLGVBQWUsQ0FBVTtJQUN6QixVQUFVLENBQUs7SUFDZixPQUFPLENBQU07SUFDYixPQUFPLENBQXFCO0lBQzVCLFlBQVksQ0FBcUI7SUFFakMsZUFBZSxDQUE2QjtJQUM1QyxVQUFVLENBQXFDO0lBQy9DLGdCQUFnQixDQUFzRDtJQUN0RSxPQUFPLENBQXlCO0lBRWhDO1FBaFRBOztXQUVHO1FBQ0ksU0FBSSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUF5T2xDOztXQUVHO1FBRUksZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFpQjNCOztXQUVHO1FBR0ksV0FBTSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBRW5EOztXQUVHO1FBRUksa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRW5EOztXQUVHO1FBRUksbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBVzdDLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUV4QixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRXZCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixnQkFBVyxHQUFpQixNQUFNLENBQUM7UUFFbkMsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUtmLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RSxZQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBaUVoQyxnRUFBZ0U7UUFDaEUsbUNBQThCLEdBQUcsR0FBUyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQ2hELGdFQUFnRTtRQUNoRSxzQkFBaUIsR0FBRyxDQUFDLEtBQVUsRUFBUSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzdDLGdFQUFnRTtRQUNoRSx1QkFBa0IsR0FBRyxHQUFTLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFuRWxDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM1QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUVqRCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRU0scUJBQXFCLENBQUMsVUFBbUI7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFPO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEVBQU87UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQVk7UUFDL0IsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2FBQ2xCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLDhCQUE4QixDQUFrQjtJQUNoRCxnRUFBZ0U7SUFDaEUsaUJBQWlCLENBQTRCO0lBQzdDLGdFQUFnRTtJQUNoRSxrQkFBa0IsQ0FBa0I7OEdBclh6QixpQkFBaUI7a0dBQWpCLGlCQUFpQiwwRkFtQ1IsZ0JBQWdCLHFTQTZNaEIsZ0JBQWdCLDJKQW5QekIsQ0FBQyxnQ0FBZ0MsQ0FBQywwSUNsRC9DLHE5REF1REE7OzJGREZhLGlCQUFpQjtrQkFiN0IsU0FBUzsrQkFDRSxXQUFXLGtCQUdMO3dCQUNkOzRCQUNFLFNBQVMsRUFBRSxzQ0FBc0M7NEJBQ2pELE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQzt5QkFDdEI7cUJBQ0YsYUFDVSxDQUFDLGdDQUFnQyxDQUFDLG1CQUM1Qix1QkFBdUIsQ0FBQyxNQUFNO3dEQWFwQyxPQUFPO3NCQURqQixLQUFLO2dCQTBCSyxRQUFRO3NCQURsQixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWtCM0IsRUFBRTtzQkFEWixLQUFLO2dCQW1CSyxLQUFLO3NCQURmLEtBQUs7Z0JBeUJLLFVBQVU7c0JBRHBCLEtBQUs7Z0JBdUJLLElBQUk7c0JBRGQsS0FBSztnQkFpQkssUUFBUTtzQkFEbEIsS0FBSztnQkFrQ0ssS0FBSztzQkFEZixLQUFLO2dCQTBCQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBUUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQVNDLElBQUk7c0JBRFYsS0FBSztnQkFhSyxTQUFTO3NCQURuQixLQUFLO2dCQWtCQyxTQUFTO3NCQURmLEtBQUs7Z0JBT0MsV0FBVztzQkFEakIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFRL0IsUUFBUTtzQkFEZCxLQUFLO2dCQVNDLE9BQU87c0JBRGIsS0FBSztnQkFRQyxNQUFNO3NCQUZaLE1BQU07Z0JBUUEsYUFBYTtzQkFEbkIsTUFBTTtnQkFPQSxjQUFjO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBQcm92aWRlcixcbiAgVGVtcGxhdGVSZWYsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lJZFNlcnZpY2UsIFNreUxvZ1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5Rm9ybUZpZWxkTGFiZWxUZXh0UmVxdWlyZWREaXJlY3RpdmUgfSBmcm9tICcuLi9zaGFyZWQvZm9ybS1maWVsZC1sYWJlbC10ZXh0LXJlcXVpcmVkLmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7IFNreVJhZGlvR3JvdXBJZFNlcnZpY2UgfSBmcm9tICcuL3JhZGlvLWdyb3VwLWlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5UmFkaW9DaGFuZ2UgfSBmcm9tICcuL3R5cGVzL3JhZGlvLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lSYWRpb1R5cGUgfSBmcm9tICcuL3R5cGVzL3JhZGlvLXR5cGUnO1xuXG4vKipcbiAqIFByb3ZpZGVyIEV4cHJlc3Npb24gdGhhdCBhbGxvd3Mgc2t5LXJhZGlvIHRvIHJlZ2lzdGVyIGFzIGEgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gKiBUaGlzIGFsbG93cyBpdCB0byBzdXBwb3J0IFsobmdNb2RlbCldLlxuICovXG5jb25zdCBTS1lfUkFESU9fQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lSYWRpb0NvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgU0tZIFVYLXRoZW1lZCByZXBsYWNlbWVudCBmb3IgYW4gSFRNTCBgaW5wdXRgIGVsZW1lbnRcbiAqIHdpdGggYHR5cGU9XCJyYWRpb1wiYC4gV2hlbiB1c2VycyBzZWxlY3QgYSByYWRpbyBidXR0b24sIGl0cyB2YWx1ZSBpcyBkcml2ZW4gdGhyb3VnaCBhblxuICogYG5nTW9kZWxgIGF0dHJpYnV0ZSB0aGF0IHlvdSBzcGVjaWZ5IG9uIHRoZSBgc2t5LXJhZGlvYCBlbGVtZW50IG9yIHRoZSBwYXJlbnQgYHNreS1yYWRpby1ncm91cGAgZWxlbWVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXJhZGlvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFkaW8uY29tcG9uZW50LnNjc3MnXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICB7XG4gICAgICBkaXJlY3RpdmU6IFNreUZvcm1GaWVsZExhYmVsVGV4dFJlcXVpcmVkRGlyZWN0aXZlLFxuICAgICAgaW5wdXRzOiBbJ2xhYmVsVGV4dCddLFxuICAgIH0sXG4gIF0sXG4gIHByb3ZpZGVyczogW1NLWV9SQURJT19DT05UUk9MX1ZBTFVFX0FDQ0VTU09SXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreVJhZGlvQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGZvY3VzIG9mZiBhIHJhZGlvIGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBibHVyID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcmFkaW8gYnV0dG9uIGlzIHNlbGVjdGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjaGVja2VkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbmV3Q2hlY2tlZFN0YXRlID0gISF2YWx1ZTtcblxuICAgIGlmICh0aGlzLiNfY2hlY2tlZCAhPT0gbmV3Q2hlY2tlZFN0YXRlKSB7XG4gICAgICB0aGlzLiNfY2hlY2tlZCA9IG5ld0NoZWNrZWRTdGF0ZTtcbiAgICAgIHRoaXMuY2hlY2tlZENoYW5nZS5uZXh0KG5ld0NoZWNrZWRTdGF0ZSk7XG5cbiAgICAgIGlmIChuZXdDaGVja2VkU3RhdGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2NoZWNrZWQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBpbnB1dCBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZSB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZSB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy5cbiAgICogVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcywgdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy4jX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgICB0aGlzLmRpc2FibGVkQ2hhbmdlLm5leHQodmFsdWUpO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBmb3IgdGhlIHJhZGlvIGJ1dHRvbi5cbiAgICogSWYgYSB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIGFuIGF1dG9nZW5lcmF0ZWQgSUQgaXMgdXNlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5pbnB1dElkID0gYHNreS1yYWRpby0ke3ZhbHVlfS1pbnB1dGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5wdXRJZCA9IGBza3ktcmFkaW8tJHt0aGlzLiNkZWZhdWx0SWR9LWlucHV0YDtcbiAgICB9XG4gICAgdGhpcy4jcmFkaW9Hcm91cElkU3ZjPy5yZWdpc3Rlcih0aGlzLiNkZWZhdWx0SWQsIHRoaXMuaW5wdXRJZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSSUEgbGFiZWwgZm9yIHRoZSByYWRpbyBidXR0b24uIFRoaXMgc2V0cyB0aGUgcmFkaW8gYnV0dG9uJ3MgYGFyaWEtbGFiZWxgXG4gICAqIGF0dHJpYnV0ZSB0byBwcm92aWRlIGEgdGV4dCBlcXVpdmFsZW50IGZvciBzY3JlZW4gcmVhZGVycyBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpXG4gICAqIHdoZW4gdGhlIHJhZGlvIGJ1dHRvbiBkb2VzIG5vdCBpbmNsdWRlIGEgdmlzaWJsZSBsYWJlbC4gWW91IG11c3Qgc2V0IHRoaXMgcHJvcGVydHkgZm9yIGljb25cbiAgICogcmFkaW8gYnV0dG9ucy4gSWYgdGhlIHJhZGlvIGJ1dHRvbiBpbmNsdWRlcyBhIHZpc2libGUgbGFiZWwsIHVzZSBgbGFiZWxsZWRCeWAgaW5zdGVhZC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUsIHNlZSB0aGUgW1dBSS1BUklBIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1sYWJlbCkuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgbGFiZWxUZXh0YCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBsYWJlbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2xhYmVsID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI2xvZ2dlci5kZXByZWNhdGVkKCdTa3lSYWRpb0NvbXBvbmVudC5sYWJlbCcsIHtcbiAgICAgICAgZGVwcmVjYXRpb25NYWpvclZlcnNpb246IDEwLFxuICAgICAgICByZXBsYWNlbWVudFJlY29tbWVuZGF0aW9uOiAnVXNlIHRoZSBgbGFiZWxUZXh0YCBpbnB1dCBpbnN0ZWFkLicsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19sYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSFRNTCBlbGVtZW50IElEIG9mIHRoZSBlbGVtZW50IHRoYXQgbGFiZWxzXG4gICAqIHRoZSByYWRpbyBidXR0b24uIFRoaXMgc2V0cyB0aGUgcmFkaW8gYnV0dG9uJ3MgYGFyaWEtbGFiZWxsZWRieWAgYXR0cmlidXRlIHRvIHByb3ZpZGUgYSB0ZXh0IGVxdWl2YWxlbnQgZm9yIHNjcmVlbiByZWFkZXJzXG4gICAqIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIElmIHRoZSByYWRpbyBidXR0b24gZG9lcyBub3QgaW5jbHVkZSBhIHZpc2libGUgbGFiZWwsIHVzZSBgbGFiZWxgIGluc3RlYWQuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGUsIHNlZSB0aGUgW1dBSS1BUklBIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1sYWJlbGxlZGJ5KS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBsYWJlbFRleHRgIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGxhYmVsbGVkQnkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19sYWJlbGxlZEJ5ID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI2xvZ2dlci5kZXByZWNhdGVkKCdTa3lSYWRpb0NvbXBvbmVudC5sYWJlbGxlZEJ5Jywge1xuICAgICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogMTAsXG4gICAgICAgIHJlcGxhY2VtZW50UmVjb21tZW5kYXRpb246ICdVc2UgdGhlIGBsYWJlbFRleHRgIGlucHV0IGluc3RlYWQuJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFiZWxsZWRCeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbGFiZWxsZWRCeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIGBuYW1lYCBwcm9wZXJ0eSBvbiB0aGUgYHNreS1yYWRpby1ncm91cCBlbGVtZW50YC5cbiAgICogV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBgc2t5LXJhZGlvLWdyb3VwYCBlbGVtZW50IHdpdGggYWxsIHJhZGlvIGJ1dHRvbnMsIGJ1dCBpZiB5b3Ugb3B0IG5vdCB0byxcbiAgICogdGhlbiB0aGlzIHByb3BlcnR5IHNwZWNpZmllcyBhIG5hbWUgZm9yIGEgZ3JvdXAgb2YgcmFkaW8gYnV0dG9ucy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX25hbWUgPSB2YWx1ZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2ZcbiAgICogdGhlIGB0YWJJbmRleGAgcHJvcGVydHkgb24gdGhlIGBza3ktcmFkaW8tZ3JvdXBgIGVsZW1lbnQuIEl0IHNwZWNpZmllcyBhbiBpbmRleCBmb3IgdGhlIHJhZGlvXG4gICAqIGJ1dHRvbi4gSWYgdGhlIGluZGV4IGlzIG5vdCBkZWZpbmVkLCBpdCBpcyBzZXQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSByYWRpbyBidXR0b24gb24gbG9hZC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdUaGUgc2t5LXJhZGlvIGB0YWJpbmRleGAgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0aGUgYHRhYmluZGV4YCBwcm9wZXJ0eSBvbiB0aGUgc2t5LXJhZGlvLWdyb3VwIGNvbXBvbmVudC4nLFxuICAgICk7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNfdGFiaW5kZXggPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jX3RhYmluZGV4ID0gMDtcbiAgICB9XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgcHVibGljIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfdGFiaW5kZXg7XG4gIH1cblxuICAvLyBGb3Igc2V0dGluZyB0aGUgdGFiaW5kZXggZnJvbSB0aGUgcmFkaW8gZ3JvdXBcbiAgcHVibGljIHNldCBncm91cFRhYkluZGV4KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI190YWJpbmRleCA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNfdGFiaW5kZXggPSAwO1xuICAgIH1cblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBib3VuZCB0byB0aGUgcmFkaW8gYnV0dG9uJ3MgYHZhbHVlYCBwcm9wZXJ0eS4gVGhlIHZhbHVlIHVzdWFsbHlcbiAgICogY29ycmVzcG9uZHMgdG8gdGhlIHJhZGlvIGJ1dHRvbidzIGxhYmVsLCB3aGljaCB5b3Ugc3BlY2lmeSB3aXRoIHRoZSBgc2t5LXJhZGlvLWxhYmVsYFxuICAgKiBjb21wb25lbnQuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jX3ZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWUgPT09IHRoaXMuI192YWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy4jb25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgICAgICB0aGlzLiNvblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNfdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBoZWxwIHBvcG92ZXIuIFdoZW4gc3BlY2lmaWVkIGFsb25nIHdpdGggYGxhYmVsVGV4dGAsIGEgW2hlbHAgaW5saW5lXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaGVscC1pbmxpbmUpXG4gICAqIGJ1dHRvbiBpcyBhZGRlZCB0byByYWRpbyBidXR0b24uIFRoZSBoZWxwIGlubGluZSBidXR0b24gZGlzcGxheXMgYSBbcG9wb3Zlcl0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL3BvcG92ZXIpXG4gICAqIHdoZW4gY2xpY2tlZCB1c2luZyB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgYW5kIG9wdGlvbmFsIHRpdGxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlbHBQb3BvdmVyQ29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgaGVscCBwb3BvdmVyLiBUaGlzIHByb3BlcnR5IG9ubHkgYXBwbGllcyB3aGVuIGBoZWxwUG9wb3ZlckNvbnRlbnRgIGlzXG4gICAqIGFsc28gc3BlY2lmaWVkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlbHBQb3BvdmVyVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSBpbiBwbGFjZSBvZiB0aGUgcmFkaW8gYnV0dG9uLiBUbyBncm91cCByYWRpbyBidXR0b25zIGxpa2UgaW5cbiAgICogdGhlIGRlbW8gYWJvdmUsIHBsYWNlIHRoZSBgc2t5LXN3aXRjaC1pY29uLWdyb3VwYCBjbGFzcyBvbiB0aGUgZGlyZWN0IHBhcmVudCBlbGVtZW50IG9mIHRoZVxuICAgKiByYWRpbyBidXR0b25zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGJhY2tncm91bmQgY29sb3IgdHlwZSBhZnRlciB1c2VycyBzZWxlY3QgYW4gaWNvbiByYWRpbyBidXR0b24uXG4gICAqIFRoZSB2YWxpZCBvcHRpb25zIGNvcnJlc3BvbmRcbiAgICogW3RoZSBsYWJlbCBjb21wb25lbnQnc10oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2xhYmVsKVxuICAgKiBsYWJlbCB0eXBlcy4gYGRhbmdlcmAgY3JlYXRlcyBhIHJlZCBiYWNrZ3JvdW5kLCBgaW5mb2AgY3JlYXRlcyBhIGJsdWUgYmFja2dyb3VuZCxcbiAgICogYHN1Y2Nlc3NgIGNyZWF0ZXMgYSBncmVlbiBiYWNrZ3JvdW5kLCBhbmQgYHdhcm5pbmdgIGNyZWF0ZXMgYW4gb3JhbmdlIGJhY2tncm91bmQuXG4gICAqIEBkZWZhdWx0IFwiaW5mb1wiXG4gICAqIEBkZXByZWNhdGVkIHJhZGlvVHlwZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHJhZGlvVHlwZSgpOiBTa3lSYWRpb1R5cGUge1xuICAgIHJldHVybiB0aGlzLiNfcmFkaW9UeXBlO1xuICB9XG4gIHB1YmxpYyBzZXQgcmFkaW9UeXBlKHZhbHVlOiBTa3lSYWRpb1R5cGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI2xvZ2dlci5kZXByZWNhdGVkKCdTa3lSYWRpb0NvbXBvbmVudC5yYWRpb1R5cGUnLCB7XG4gICAgICAgIGRlcHJlY2F0aW9uTWFqb3JWZXJzaW9uOiA3LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy4jX3JhZGlvVHlwZSA9IHZhbHVlID8/ICdpbmZvJztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byBkaXNwbGF5IGFzIHRoZSByYWRpbyBidXR0b24ncyBsYWJlbC4gVXNlIHRoaXMgaW5zdGVhZCBvZiB0aGUgYHNreS1yYWRpby1sYWJlbGAgd2hlbiB0aGUgbGFiZWwgaXMgdGV4dC1vbmx5LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGxhYmVsVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBoaWRlIHRoZSBgbGFiZWxUZXh0YC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgbGFiZWxIaWRkZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogW1BlcnNpc3RlbnQgaW5saW5lIGhlbHAgdGV4dF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9kZXNpZ24vZ3VpZGVsaW5lcy91c2VyLWFzc2lzdGFuY2UjaW5saW5lLWhlbHApIHRoYXQgcHJvdmlkZXNcbiAgICogYWRkaXRpb25hbCBjb250ZXh0IHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhpbnRUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEEgaGVscCBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSBnbG9iYWwgaGVscCBjb250ZW50IHRvIGRpc3BsYXkuIFdoZW4gc3BlY2lmaWVkLCBhIFtoZWxwIGlubGluZV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2hlbHAtaW5saW5lKVxuICAgKiBidXR0b24gaXMgcGxhY2VkIGJlc2lkZSB0aGUgcmFkaW8gYnV0dG9uIGxhYmVsLiBDbGlja2luZyB0aGUgYnV0dG9uIGludm9rZXMgW2dsb2JhbCBoZWxwXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2RldmVsb3AvZ2xvYmFsLWhlbHApXG4gICAqIGFzIGNvbmZpZ3VyZWQgYnkgdGhlIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlbHBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBzZWxlY3QgYSByYWRpbyBidXR0b24uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIHB1YmxpYyBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNreVJhZGlvQ2hhbmdlPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBzZWxlY3RlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjaGVja2VkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBzZWxlY3RlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBkaXNhYmxlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4jX3NlbGVjdGVkVmFsdWUpIHtcbiAgICAgIHRoaXMuI19zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLiNfc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyByYWRpb0dyb3VwRGlzYWJsZWQgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgaW5wdXRJZCA9ICcnO1xuXG4gICNfY2hlY2tlZCA9IGZhbHNlO1xuICAjX2Rpc2FibGVkID0gZmFsc2U7XG4gICNfbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjX3JhZGlvVHlwZTogU2t5UmFkaW9UeXBlID0gJ2luZm8nO1xuICAjX3NlbGVjdGVkVmFsdWU6IHVua25vd247XG4gICNfdGFiaW5kZXggPSAwO1xuICAjX3ZhbHVlOiBhbnk7XG4gICNfbGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgI19sYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI2NoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgI2RlZmF1bHRJZCA9IGluamVjdChTa3lJZFNlcnZpY2UpLmdlbmVyYXRlSWQoKTtcbiAgI3JhZGlvR3JvdXBJZFN2YyA9IGluamVjdChTa3lSYWRpb0dyb3VwSWRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAjbG9nZ2VyID0gaW5qZWN0KFNreUxvZ1NlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaWQgPSB0aGlzLiNkZWZhdWx0SWQ7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jcmFkaW9Hcm91cElkU3ZjPy51bnJlZ2lzdGVyKHRoaXMuI2RlZmF1bHRJZCk7XG4gICAgdGhpcy4jcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXIoKTtcbiAgICB0aGlzLmNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuY2hlY2tlZENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGlzYWJsZWRDaGFuZ2UuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNoZWNrZWQgPSB0aGlzLnZhbHVlID09PSB0aGlzLnNlbGVjdGVkVmFsdWU7XG5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBjb250cm9sLiBJbXBsZW1lbnRlZCBhcyBhIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0R3JvdXBEaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJhZGlvR3JvdXBEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy4jb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLmNoYW5nZS5uZXh0KHtcbiAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5vbklucHV0Rm9jdXNDaGFuZ2UoKTtcbiAgICAgIHRoaXMuI29uQ2hhbmdlQ2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSW5wdXRGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLiNvblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYmx1ci5uZXh0KCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICNyZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lciA9ICgpOiB2b2lkID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICNvbkNoYW5nZUNhbGxiYWNrID0gKHZhbHVlOiBhbnkpOiB2b2lkID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICNvblRvdWNoZWRDYWxsYmFjayA9ICgpOiB2b2lkID0+IHt9O1xufVxuIiwiPHNwYW4gY2xhc3M9XCJza3ktcmFkaW8tb3V0ZXItd3JhcHBlclwiPlxuICA8bGFiZWxcbiAgICBjbGFzcz1cInNreS1yYWRpby13cmFwcGVyIHNreS1zd2l0Y2hcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3NreS1zd2l0Y2gtZGlzYWJsZWQnOiBkaXNhYmxlZCB8fCByYWRpb0dyb3VwRGlzYWJsZWQgfVwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIGNsYXNzPVwic2t5LXJhZGlvLWlucHV0IHNreS1zd2l0Y2gtaW5wdXRcIlxuICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxUZXh0IHx8IGxhYmVsXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbFRleHQgPyB1bmRlZmluZWQgOiBsYWJlbGxlZEJ5XCJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGludFRleHQgPyBoaW50VGV4dEVsLmlkIDogdW5kZWZpbmVkXCJcbiAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJhZGlvR3JvdXBEaXNhYmxlZFwiXG4gICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgIFt0YWJJbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgKGJsdXIpPVwib25JbnB1dEZvY3VzQ2hhbmdlKClcIlxuICAgICAgKGNoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxuICAgIC8+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwic2t5LXN3aXRjaC1jb250cm9sXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3NreS1zd2l0Y2gtY29udHJvbC1pY29uJzogaWNvbixcbiAgICAgICAgJ3NreS1yb3VuZGVkLWNvcm5lcnMnOiBpY29uLFxuICAgICAgICAnc2t5LXJvdW5kZWQtY2lyY2xlJzogIWljb24sXG4gICAgICAgICdza3ktc3dpdGNoLWNvbnRyb2wtaW5mbyc6IGljb24gJiYgcmFkaW9UeXBlID09PSAnaW5mbycsXG4gICAgICAgICdza3ktc3dpdGNoLWNvbnRyb2wtc3VjY2Vzcyc6IGljb24gJiYgcmFkaW9UeXBlID09PSAnc3VjY2VzcycsXG4gICAgICAgICdza3ktc3dpdGNoLWNvbnRyb2wtd2FybmluZyc6IGljb24gJiYgcmFkaW9UeXBlID09PSAnd2FybmluZycsXG4gICAgICAgICdza3ktc3dpdGNoLWNvbnRyb2wtZGFuZ2VyJzogaWNvbiAmJiByYWRpb1R5cGUgPT09ICdkYW5nZXInXG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8c2t5LWljb24gKm5nSWY9XCJpY29uXCIgW2ZpeGVkV2lkdGhdPVwidHJ1ZVwiIFtpY29uXT1cImljb25cIiAvPlxuICAgIDwvc3Bhbj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGFiZWxUZXh0OyBlbHNlIGxhYmVsRWxlbWVudFwiPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhbGFiZWxIaWRkZW5cIiBjbGFzcz1cInNreS1zd2l0Y2gtbGFiZWxcIj57eyBsYWJlbFRleHQgfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNsYWJlbEVsZW1lbnQ+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktcmFkaW8tbGFiZWxcIiAvPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbGFiZWw+XG4gIDxza3ktaGVscC1pbmxpbmVcbiAgICAqbmdJZj1cIihoZWxwUG9wb3ZlckNvbnRlbnQgfHwgaGVscEtleSkgJiYgbGFiZWxUZXh0XCJcbiAgICBjbGFzcz1cInNreS1yYWRpby1oZWxwLWlubGluZVwiXG4gICAgW2hlbHBLZXldPVwiaGVscEtleVwiXG4gICAgW2xhYmVsVGV4dF09XCJsYWJlbFRleHRcIlxuICAgIFtwb3BvdmVyVGl0bGVdPVwiaGVscFBvcG92ZXJUaXRsZVwiXG4gICAgW3BvcG92ZXJDb250ZW50XT1cImhlbHBQb3BvdmVyQ29udGVudFwiXG4gIC8+XG48L3NwYW4+XG48ZGl2IHNreUlkICNoaW50VGV4dEVsPVwic2t5SWRcIj5cbiAgPGRpdiAqbmdJZj1cImhpbnRUZXh0XCIgY2xhc3M9XCJza3ktZm9udC1kZWVtcGhhc2l6ZWQgc2t5LXJhZGlvLWhpbnQtdGV4dFwiPlxuICAgIHt7IGhpbnRUZXh0IH19XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
355
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm1zL3NyYy9saWIvbW9kdWxlcy9yYWRpby9yYWRpby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL3JhZGlvL3JhZGlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFHTixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBSWxFOzs7R0FHRztBQUNILE1BQU0sZ0NBQWdDLEdBQWE7SUFDakQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGOzs7O0dBSUc7QUFRSCxNQUFNLE9BQU8saUJBQWlCO0lBTTVCOzs7T0FHRztJQUNILElBQ1csT0FBTyxDQUFDLEtBQTBCO1FBQzNDLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQ3ZDLElB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OEJBQThCLENBQWtCO0lBQ2hELGdFQUFnRTtJQUNoRSxpQkFBaUIsQ0FBNEI7SUFDN0MsZ0VBQWdFO0lBQ2hFLGtCQUFrQixDQUFrQjs4R0FyWHpCLGlCQUFpQjtrR0FBakIsaUJBQWlCLDBGQW1DUixnQkFBZ0IscVNBNk1oQixnQkFBZ0IsMkpBblB6QixDQUFDLGdDQUFnQyxDQUFDLDBCQzFDL0MsdzdEQTZEQTs7MkZEaEJhLGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDRSxXQUFXLGFBR1YsQ0FBQyxnQ0FBZ0MsQ0FBQyxtQkFDNUIsdUJBQXVCLENBQUMsTUFBTTt3REFhcEMsT0FBTztzQkFEakIsS0FBSztnQkEwQkssUUFBUTtzQkFEbEIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFrQjNCLEVBQUU7c0JBRFosS0FBSztnQkFtQkssS0FBSztzQkFEZixLQUFLO2dCQXlCSyxVQUFVO3NCQURwQixLQUFLO2dCQXVCSyxJQUFJO3NCQURkLEtBQUs7Z0JBaUJLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBa0NLLEtBQUs7c0JBRGYsS0FBSztnQkEwQkMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQVFDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFTQyxJQUFJO3NCQURWLEtBQUs7Z0JBYUssU0FBUztzQkFEbkIsS0FBSztnQkFrQkMsU0FBUztzQkFEZixLQUFLO2dCQU9DLFdBQVc7c0JBRGpCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUS9CLFFBQVE7c0JBRGQsS0FBSztnQkFTQyxPQUFPO3NCQURiLEtBQUs7Z0JBUUMsTUFBTTtzQkFGWixNQUFNO2dCQVFBLGFBQWE7c0JBRG5CLE1BQU07Z0JBT0EsY0FBYztzQkFEcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUHJvdmlkZXIsXG4gIFRlbXBsYXRlUmVmLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5SWRTZXJ2aWNlLCBTa3lMb2dTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreVJhZGlvR3JvdXBJZFNlcnZpY2UgfSBmcm9tICcuL3JhZGlvLWdyb3VwLWlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5UmFkaW9DaGFuZ2UgfSBmcm9tICcuL3R5cGVzL3JhZGlvLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lSYWRpb1R5cGUgfSBmcm9tICcuL3R5cGVzL3JhZGlvLXR5cGUnO1xuXG4vKipcbiAqIFByb3ZpZGVyIEV4cHJlc3Npb24gdGhhdCBhbGxvd3Mgc2t5LXJhZGlvIHRvIHJlZ2lzdGVyIGFzIGEgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gKiBUaGlzIGFsbG93cyBpdCB0byBzdXBwb3J0IFsobmdNb2RlbCldLlxuICovXG5jb25zdCBTS1lfUkFESU9fQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lSYWRpb0NvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgU0tZIFVYLXRoZW1lZCByZXBsYWNlbWVudCBmb3IgYW4gSFRNTCBgaW5wdXRgIGVsZW1lbnRcbiAqIHdpdGggYHR5cGU9XCJyYWRpb1wiYC4gV2hlbiB1c2VycyBzZWxlY3QgYSByYWRpbyBidXR0b24sIGl0cyB2YWx1ZSBpcyBkcml2ZW4gdGhyb3VnaCBhblxuICogYG5nTW9kZWxgIGF0dHJpYnV0ZSB0aGF0IHlvdSBzcGVjaWZ5IG9uIHRoZSBgc2t5LXJhZGlvYCBlbGVtZW50IG9yIHRoZSBwYXJlbnQgYHNreS1yYWRpby1ncm91cGAgZWxlbWVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXJhZGlvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFkaW8uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbU0tZX1JBRElPX0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UmFkaW9Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgZm9jdXMgb2ZmIGEgcmFkaW8gYnV0dG9uLlxuICAgKi9cbiAgcHVibGljIGJsdXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByYWRpbyBidXR0b24gaXMgc2VsZWN0ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBuZXdDaGVja2VkU3RhdGUgPSAhIXZhbHVlO1xuXG4gICAgaWYgKHRoaXMuI19jaGVja2VkICE9PSBuZXdDaGVja2VkU3RhdGUpIHtcbiAgICAgIHRoaXMuI19jaGVja2VkID0gbmV3Q2hlY2tlZFN0YXRlO1xuICAgICAgdGhpcy5jaGVja2VkQ2hhbmdlLm5leHQobmV3Q2hlY2tlZFN0YXRlKTtcblxuICAgICAgaWYgKG5ld0NoZWNrZWRTdGF0ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfY2hlY2tlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGlucHV0IG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuZGlzYWJsZWRDaGFuZ2UubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElEIGZvciB0aGUgcmFkaW8gYnV0dG9uLlxuICAgKiBJZiBhIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgYW4gYXV0b2dlbmVyYXRlZCBJRCBpcyB1c2VkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmlucHV0SWQgPSBgc2t5LXJhZGlvLSR7dmFsdWV9LWlucHV0YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dElkID0gYHNreS1yYWRpby0ke3RoaXMuI2RlZmF1bHRJZH0taW5wdXRgO1xuICAgIH1cbiAgICB0aGlzLiNyYWRpb0dyb3VwSWRTdmM/LnJlZ2lzdGVyKHRoaXMuI2RlZmF1bHRJZCwgdGhpcy5pbnB1dElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJJQSBsYWJlbCBmb3IgdGhlIHJhZGlvIGJ1dHRvbi4gVGhpcyBzZXRzIHRoZSByYWRpbyBidXR0b24ncyBgYXJpYS1sYWJlbGBcbiAgICogYXR0cmlidXRlIHRvIHByb3ZpZGUgYSB0ZXh0IGVxdWl2YWxlbnQgZm9yIHNjcmVlbiByZWFkZXJzIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSlcbiAgICogd2hlbiB0aGUgcmFkaW8gYnV0dG9uIGRvZXMgbm90IGluY2x1ZGUgYSB2aXNpYmxlIGxhYmVsLiBZb3UgbXVzdCBzZXQgdGhpcyBwcm9wZXJ0eSBmb3IgaWNvblxuICAgKiByYWRpbyBidXR0b25zLiBJZiB0aGUgcmFkaW8gYnV0dG9uIGluY2x1ZGVzIGEgdmlzaWJsZSBsYWJlbCwgdXNlIGBsYWJlbGxlZEJ5YCBpbnN0ZWFkLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsKS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBsYWJlbFRleHRgIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGxhYmVsKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbGFiZWwgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jbG9nZ2VyLmRlcHJlY2F0ZWQoJ1NreVJhZGlvQ29tcG9uZW50LmxhYmVsJywge1xuICAgICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogMTAsXG4gICAgICAgIHJlcGxhY2VtZW50UmVjb21tZW5kYXRpb246ICdVc2UgdGhlIGBsYWJlbFRleHRgIGlucHV0IGluc3RlYWQuJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2xhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBIVE1MIGVsZW1lbnQgSUQgb2YgdGhlIGVsZW1lbnQgdGhhdCBsYWJlbHNcbiAgICogdGhlIHJhZGlvIGJ1dHRvbi4gVGhpcyBzZXRzIHRoZSByYWRpbyBidXR0b24ncyBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGUgdG8gcHJvdmlkZSBhIHRleHQgZXF1aXZhbGVudCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICogW3RvIHN1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KS5cbiAgICogSWYgdGhlIHJhZGlvIGJ1dHRvbiBkb2VzIG5vdCBpbmNsdWRlIGEgdmlzaWJsZSBsYWJlbCwgdXNlIGBsYWJlbGAgaW5zdGVhZC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsbGVkYnkpLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGxhYmVsVGV4dGAgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGFiZWxsZWRCeSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2xhYmVsbGVkQnkgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jbG9nZ2VyLmRlcHJlY2F0ZWQoJ1NreVJhZGlvQ29tcG9uZW50LmxhYmVsbGVkQnknLCB7XG4gICAgICAgIGRlcHJlY2F0aW9uTWFqb3JWZXJzaW9uOiAxMCxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWNvbW1lbmRhdGlvbjogJ1VzZSB0aGUgYGxhYmVsVGV4dGAgaW5wdXQgaW5zdGVhZC4nLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBsYWJlbGxlZEJ5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19sYWJlbGxlZEJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgYG5hbWVgIHByb3BlcnR5IG9uIHRoZSBgc2t5LXJhZGlvLWdyb3VwIGVsZW1lbnRgLlxuICAgKiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGBza3ktcmFkaW8tZ3JvdXBgIGVsZW1lbnQgd2l0aCBhbGwgcmFkaW8gYnV0dG9ucywgYnV0IGlmIHlvdSBvcHQgbm90IHRvLFxuICAgKiB0aGVuIHRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIGEgbmFtZSBmb3IgYSBncm91cCBvZiByYWRpbyBidXR0b25zLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbmFtZSA9IHZhbHVlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZlxuICAgKiB0aGUgYHRhYkluZGV4YCBwcm9wZXJ0eSBvbiB0aGUgYHNreS1yYWRpby1ncm91cGAgZWxlbWVudC4gSXQgc3BlY2lmaWVzIGFuIGluZGV4IGZvciB0aGUgcmFkaW9cbiAgICogYnV0dG9uLiBJZiB0aGUgaW5kZXggaXMgbm90IGRlZmluZWQsIGl0IGlzIHNldCB0byB0aGUgcG9zaXRpb24gb2YgdGhlIHJhZGlvIGJ1dHRvbiBvbiBsb2FkLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0YWJpbmRleCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1RoZSBza3ktcmFkaW8gYHRhYmluZGV4YCBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBgdGFiaW5kZXhgIHByb3BlcnR5IG9uIHRoZSBza3ktcmFkaW8tZ3JvdXAgY29tcG9uZW50LicsXG4gICAgKTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI190YWJpbmRleCA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNfdGFiaW5kZXggPSAwO1xuICAgIH1cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI190YWJpbmRleDtcbiAgfVxuXG4gIC8vIEZvciBzZXR0aW5nIHRoZSB0YWJpbmRleCBmcm9tIHRoZSByYWRpbyBncm91cFxuICBwdWJsaWMgc2V0IGdyb3VwVGFiSW5kZXgodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI190YWJpbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZhbHVlIGJvdW5kIHRvIHRoZSByYWRpbyBidXR0b24ncyBgdmFsdWVgIHByb3BlcnR5LiBUaGUgdmFsdWUgdXN1YWxseVxuICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmFkaW8gYnV0dG9uJ3MgbGFiZWwsIHdoaWNoIHlvdSBzcGVjaWZ5IHdpdGggdGhlIGBza3ktcmFkaW8tbGFiZWxgXG4gICAqIGNvbXBvbmVudC5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiNfdmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PT0gdGhpcy4jX3ZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLiNvbkNoYW5nZUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIHRoaXMuI29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI192YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLiNfdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGhlbHAgcG9wb3Zlci4gV2hlbiBzcGVjaWZpZWQgYWxvbmcgd2l0aCBgbGFiZWxUZXh0YCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIGFkZGVkIHRvIHJhZGlvIGJ1dHRvbi4gVGhlIGhlbHAgaW5saW5lIGJ1dHRvbiBkaXNwbGF5cyBhIFtwb3BvdmVyXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcG9wb3ZlcilcbiAgICogd2hlbiBjbGlja2VkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9uYWwgdGl0bGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBoZWxwIHBvcG92ZXIuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGhlbHBQb3BvdmVyQ29udGVudGAgaXNcbiAgICogYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IGluIHBsYWNlIG9mIHRoZSByYWRpbyBidXR0b24uIFRvIGdyb3VwIHJhZGlvIGJ1dHRvbnMgbGlrZSBpblxuICAgKiB0aGUgZGVtbyBhYm92ZSwgcGxhY2UgdGhlIGBza3ktc3dpdGNoLWljb24tZ3JvdXBgIGNsYXNzIG9uIHRoZSBkaXJlY3QgcGFyZW50IGVsZW1lbnQgb2YgdGhlXG4gICAqIHJhZGlvIGJ1dHRvbnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0eXBlIGFmdGVyIHVzZXJzIHNlbGVjdCBhbiBpY29uIHJhZGlvIGJ1dHRvbi5cbiAgICogVGhlIHZhbGlkIG9wdGlvbnMgY29ycmVzcG9uZFxuICAgKiBbdGhlIGxhYmVsIGNvbXBvbmVudCdzXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvbGFiZWwpXG4gICAqIGxhYmVsIHR5cGVzLiBgZGFuZ2VyYCBjcmVhdGVzIGEgcmVkIGJhY2tncm91bmQsIGBpbmZvYCBjcmVhdGVzIGEgYmx1ZSBiYWNrZ3JvdW5kLFxuICAgKiBgc3VjY2Vzc2AgY3JlYXRlcyBhIGdyZWVuIGJhY2tncm91bmQsIGFuZCBgd2FybmluZ2AgY3JlYXRlcyBhbiBvcmFuZ2UgYmFja2dyb3VuZC5cbiAgICogQGRlZmF1bHQgXCJpbmZvXCJcbiAgICogQGRlcHJlY2F0ZWQgcmFkaW9UeXBlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgcmFkaW9UeXBlKCk6IFNreVJhZGlvVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuI19yYWRpb1R5cGU7XG4gIH1cbiAgcHVibGljIHNldCByYWRpb1R5cGUodmFsdWU6IFNreVJhZGlvVHlwZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jbG9nZ2VyLmRlcHJlY2F0ZWQoJ1NreVJhZGlvQ29tcG9uZW50LnJhZGlvVHlwZScsIHtcbiAgICAgICAgZGVwcmVjYXRpb25NYWpvclZlcnNpb246IDcsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLiNfcmFkaW9UeXBlID0gdmFsdWUgPz8gJ2luZm8nO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIHJhZGlvIGJ1dHRvbidzIGxhYmVsLiBVc2UgdGhpcyBpbnN0ZWFkIG9mIHRoZSBgc2t5LXJhZGlvLWxhYmVsYCB3aGVuIHRoZSBsYWJlbCBpcyB0ZXh0LW9ubHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbGFiZWxUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGhpZGUgdGhlIGBsYWJlbFRleHRgLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBsYWJlbEhpZGRlbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBbUGVyc2lzdGVudCBpbmxpbmUgaGVscCB0ZXh0XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2Rlc2lnbi9ndWlkZWxpbmVzL3VzZXItYXNzaXN0YW5jZSNpbmxpbmUtaGVscCkgdGhhdCBwcm92aWRlc1xuICAgKiBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGludFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBoZWxwIGtleSB0aGF0IGlkZW50aWZpZXMgdGhlIGdsb2JhbCBoZWxwIGNvbnRlbnQgdG8gZGlzcGxheS4gV2hlbiBzcGVjaWZpZWQsIGEgW2hlbHAgaW5saW5lXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvaGVscC1pbmxpbmUpXG4gICAqIGJ1dHRvbiBpcyBwbGFjZWQgYmVzaWRlIHRoZSByYWRpbyBidXR0b24gbGFiZWwuIENsaWNraW5nIHRoZSBidXR0b24gaW52b2tlcyBbZ2xvYmFsIGhlbHBdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vZGV2ZWxvcC9nbG9iYWwtaGVscClcbiAgICogYXMgY29uZmlndXJlZCBieSB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCBhIHJhZGlvIGJ1dHRvbi5cbiAgICovXG4gIEBPdXRwdXQoKVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgcHVibGljIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5UmFkaW9DaGFuZ2U+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNlbGVjdGVkIHZhbHVlIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGNoZWNrZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNlbGVjdGVkIHZhbHVlIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGRpc2FibGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLiNfc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgdGhpcy4jX3NlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWxlY3RlZFZhbHVlO1xuICB9XG5cbiAgcHVibGljIHJhZGlvR3JvdXBEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBpbnB1dElkID0gJyc7XG5cbiAgI19jaGVja2VkID0gZmFsc2U7XG4gICNfZGlzYWJsZWQgPSBmYWxzZTtcbiAgI19uYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNfcmFkaW9UeXBlOiBTa3lSYWRpb1R5cGUgPSAnaW5mbyc7XG4gICNfc2VsZWN0ZWRWYWx1ZTogdW5rbm93bjtcbiAgI190YWJpbmRleCA9IDA7XG4gICNfdmFsdWU6IGFueTtcbiAgI19sYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjX2xhYmVsbGVkQnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAjZGVmYXVsdElkID0gaW5qZWN0KFNreUlkU2VydmljZSkuZ2VuZXJhdGVJZCgpO1xuICAjcmFkaW9Hcm91cElkU3ZjID0gaW5qZWN0KFNreVJhZGlvR3JvdXBJZFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gICNsb2dnZXIgPSBpbmplY3QoU2t5TG9nU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pZCA9IHRoaXMuI2RlZmF1bHRJZDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNyYWRpb0dyb3VwSWRTdmM/LnVucmVnaXN0ZXIodGhpcy4jZGVmYXVsdElkKTtcbiAgICB0aGlzLiNyZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcigpO1xuICAgIHRoaXMuY2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5jaGVja2VkQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5kaXNhYmxlZENoYW5nZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hlY2tlZCA9IHRoaXMudmFsdWUgPT09IHRoaXMuc2VsZWN0ZWRWYWx1ZTtcblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGNvbnRyb2wuIEltcGxlbWVudGVkIGFzIGEgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRHcm91cERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMucmFkaW9Hcm91cERpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLiNvbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hhbmdlLm5leHQoe1xuICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm9uSW5wdXRGb2N1c0NoYW5nZSgpO1xuICAgICAgdGhpcy4jb25DaGFuZ2VDYWxsYmFjayh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dEZvY3VzQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5ibHVyLm5leHQoKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgI3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyID0gKCk6IHZvaWQgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgI29uQ2hhbmdlQ2FsbGJhY2sgPSAodmFsdWU6IGFueSk6IHZvaWQgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgI29uVG91Y2hlZENhbGxiYWNrID0gKCk6IHZvaWQgPT4ge307XG59XG4iLCI8c3BhbiBjbGFzcz1cInNreS1yYWRpby1vdXRlci13cmFwcGVyXCI+XG4gIDxsYWJlbFxuICAgIGNsYXNzPVwic2t5LXJhZGlvLXdyYXBwZXIgc2t5LXN3aXRjaFwiXG4gICAgW25nQ2xhc3NdPVwieyAnc2t5LXN3aXRjaC1kaXNhYmxlZCc6IGRpc2FibGVkIHx8IHJhZGlvR3JvdXBEaXNhYmxlZCB9XCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgY2xhc3M9XCJza3ktcmFkaW8taW5wdXQgc2t5LXN3aXRjaC1pbnB1dFwiXG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFRleHQgfHwgbGFiZWxcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsVGV4dCA/IHVuZGVmaW5lZCA6IGxhYmVsbGVkQnlcIlxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJoaW50VGV4dCA/IGhpbnRUZXh0RWwuaWQgOiB1bmRlZmluZWRcIlxuICAgICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmFkaW9Hcm91cERpc2FibGVkXCJcbiAgICAgIFtpZF09XCJpbnB1dElkXCJcbiAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgW3RhYkluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAoYmx1cik9XCJvbklucHV0Rm9jdXNDaGFuZ2UoKVwiXG4gICAgICAoY2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgLz5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJza3ktc3dpdGNoLWNvbnRyb2xcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnc2t5LXN3aXRjaC1jb250cm9sLWljb24nOiBpY29uLFxuICAgICAgICAnc2t5LXJvdW5kZWQtY29ybmVycyc6IGljb24sXG4gICAgICAgICdza3ktcm91bmRlZC1jaXJjbGUnOiAhaWNvbixcbiAgICAgICAgJ3NreS1zd2l0Y2gtY29udHJvbC1pbmZvJzogaWNvbiAmJiByYWRpb1R5cGUgPT09ICdpbmZvJyxcbiAgICAgICAgJ3NreS1zd2l0Y2gtY29udHJvbC1zdWNjZXNzJzogaWNvbiAmJiByYWRpb1R5cGUgPT09ICdzdWNjZXNzJyxcbiAgICAgICAgJ3NreS1zd2l0Y2gtY29udHJvbC13YXJuaW5nJzogaWNvbiAmJiByYWRpb1R5cGUgPT09ICd3YXJuaW5nJyxcbiAgICAgICAgJ3NreS1zd2l0Y2gtY29udHJvbC1kYW5nZXInOiBpY29uICYmIHJhZGlvVHlwZSA9PT0gJ2RhbmdlcidcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICA8c2t5LWljb24gW2ZpeGVkV2lkdGhdPVwidHJ1ZVwiIFtpY29uXT1cImljb25cIiAvPlxuICAgICAgfVxuICAgIDwvc3Bhbj5cbiAgICBAaWYgKGxhYmVsVGV4dCkge1xuICAgICAgQGlmICghbGFiZWxIaWRkZW4pIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJza3ktc3dpdGNoLWxhYmVsXCI+e3sgbGFiZWxUZXh0IH19PC9zcGFuPlxuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LXJhZGlvLWxhYmVsXCIgLz5cbiAgICB9XG4gIDwvbGFiZWw+XG4gIEBpZiAoKGhlbHBQb3BvdmVyQ29udGVudCB8fCBoZWxwS2V5KSAmJiBsYWJlbFRleHQpIHtcbiAgICA8c2t5LWhlbHAtaW5saW5lXG4gICAgICBjbGFzcz1cInNreS1yYWRpby1oZWxwLWlubGluZVwiXG4gICAgICBbaGVscEtleV09XCJoZWxwS2V5XCJcbiAgICAgIFtsYWJlbFRleHRdPVwibGFiZWxUZXh0XCJcbiAgICAgIFtwb3BvdmVyVGl0bGVdPVwiaGVscFBvcG92ZXJUaXRsZVwiXG4gICAgICBbcG9wb3ZlckNvbnRlbnRdPVwiaGVscFBvcG92ZXJDb250ZW50XCJcbiAgICAvPlxuICB9XG48L3NwYW4+XG48ZGl2ICNoaW50VGV4dEVsPVwic2t5SWRcIiBza3lJZD5cbiAgQGlmIChoaW50VGV4dCkge1xuICAgIDxkaXYgY2xhc3M9XCJza3ktZm9udC1kZWVtcGhhc2l6ZWQgc2t5LXJhZGlvLWhpbnQtdGV4dFwiPlxuICAgICAge3sgaGludFRleHQgfX1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
|
|
@@ -12,8 +12,8 @@ import { SkyRadioLabelComponent } from './radio-label.component';
|
|
|
12
12
|
import { SkyRadioComponent } from './radio.component';
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
export class SkyRadioModule {
|
|
15
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
16
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.
|
|
15
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRadioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
16
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.3", ngImport: i0, type: SkyRadioModule, declarations: [SkyRadioComponent,
|
|
17
17
|
SkyRadioGroupComponent,
|
|
18
18
|
SkyRadioLabelComponent], imports: [CommonModule,
|
|
19
19
|
FormsModule,
|
|
@@ -27,7 +27,7 @@ export class SkyRadioModule {
|
|
|
27
27
|
SkyRadioComponent,
|
|
28
28
|
SkyRadioGroupComponent,
|
|
29
29
|
SkyRadioLabelComponent] }); }
|
|
30
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.
|
|
30
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRadioModule, imports: [CommonModule,
|
|
31
31
|
FormsModule,
|
|
32
32
|
SkyFormErrorModule,
|
|
33
33
|
SkyFormErrorsModule,
|
|
@@ -37,7 +37,7 @@ export class SkyRadioModule {
|
|
|
37
37
|
SkyFormsResourcesModule,
|
|
38
38
|
SkyTrimModule, SkyFormErrorModule] }); }
|
|
39
39
|
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRadioModule, decorators: [{
|
|
41
41
|
type: NgModule,
|
|
42
42
|
args: [{
|
|
43
43
|
declarations: [
|
|
@@ -19,10 +19,10 @@ export class SkyRequiredStateDirective {
|
|
|
19
19
|
!!this.#ngControl?.control?.hasValidator(Validators.required));
|
|
20
20
|
}
|
|
21
21
|
#ngControl;
|
|
22
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
23
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRequiredStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
23
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.3", type: SkyRequiredStateDirective, isStandalone: true, inputs: { required: ["required", "required", booleanAttribute] }, ngImport: i0 }); }
|
|
24
24
|
}
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyRequiredStateDirective, decorators: [{
|
|
26
26
|
type: Directive,
|
|
27
27
|
args: [{
|
|
28
28
|
standalone: true,
|
|
@@ -119,10 +119,10 @@ export class SkySelectionBoxAdapterService {
|
|
|
119
119
|
const el = element.nativeElement;
|
|
120
120
|
el.tabIndex = tabIndex;
|
|
121
121
|
}
|
|
122
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
123
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
122
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkySelectionBoxAdapterService, deps: [{ token: i1.SkyCoreAdapterService }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
123
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkySelectionBoxAdapterService }); }
|
|
124
124
|
}
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkySelectionBoxAdapterService, decorators: [{
|
|
126
126
|
type: Injectable
|
|
127
127
|
}], ctorParameters: () => [{ type: i1.SkyCoreAdapterService }, { type: i0.RendererFactory2 }] });
|
|
128
128
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWJveC1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL3NlbGVjdGlvbi1ib3gvc2VsZWN0aW9uLWJveC1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsR0FHWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXlCLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUFFekUsTUFBTSxtQkFBbUIsR0FBRyxnQ0FBZ0MsQ0FBQztBQUM3RCxNQUFNLG1CQUFtQixHQUFHLGdDQUFnQyxDQUFDO0FBQzdELE1BQU0sbUJBQW1CLEdBQUcsZ0NBQWdDLENBQUM7QUFDN0QsTUFBTSxtQkFBbUIsR0FBRyxnQ0FBZ0MsQ0FBQztBQUU3RCxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQUV0Qzs7R0FFRztBQUVILE1BQU0sT0FBTyw2QkFBNkI7SUFDeEMsbUJBQW1CLENBQXdCO0lBQzNDLFNBQVMsQ0FBWTtJQUVyQixZQUNFLGtCQUF5QyxFQUN6QyxlQUFpQztRQUVqQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsRUFBYztRQUN6QixFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFD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QUFLLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztnQkFDL0IsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVcsQ0FBQyxPQUFtQixFQUFFLFFBQWdCO1FBQ3RELE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFFakMsRUFBRSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDekIsQ0FBQzs4R0FoSVUsNkJBQTZCO2tIQUE3Qiw2QkFBNkI7OzJGQUE3Qiw2QkFBNkI7a0JBRHpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFbGVtZW50UmVmLFxuICBJbmplY3RhYmxlLFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyRmFjdG9yeTIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5Q29yZUFkYXB0ZXJTZXJ2aWNlLCBTa3lNZWRpYUJyZWFrcG9pbnRzIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5jb25zdCBSRVNQT05TSVZFX0NMQVNTX1hTID0gJ3NreS1zZWxlY3Rpb24tYm94LWNvbnRhaW5lci14cyc7XG5jb25zdCBSRVNQT05TSVZFX0NMQVNTX1NNID0gJ3NreS1zZWxlY3Rpb24tYm94LWNvbnRhaW5lci1zbSc7XG5jb25zdCBSRVNQT05TSVZFX0NMQVNTX01EID0gJ3NreS1zZWxlY3Rpb24tYm94LWNvbnRhaW5lci1tZCc7XG5jb25zdCBSRVNQT05TSVZFX0NMQVNTX0xHID0gJ3NreS1zZWxlY3Rpb24tYm94LWNvbnRhaW5lci1sZyc7XG5cbmNvbnN0IEJSRUFLUE9JTlRfWFNfTUFYX1BJWEVMUyA9IDc2NztcbmNvbnN0IEJSRUFLUE9JTlRfU01fTUlOX1BJWEVMUyA9IDc2ODtcbmNvbnN0IEJSRUFLUE9JTlRfU01fTUFYX1BJWEVMUyA9IDk5MTtcbmNvbnN0IEJSRUFLUE9JTlRfTURfTUlOX1BJWEVMUyA9IDk5MjtcbmNvbnN0IEJSRUFLUE9JTlRfTURfTUFYX1BJWEVMUyA9IDE0Mzk7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lTZWxlY3Rpb25Cb3hBZGFwdGVyU2VydmljZSB7XG4gICNjb3JlQWRhcHRlclNlcnZpY2U6IFNreUNvcmVBZGFwdGVyU2VydmljZTtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29yZUFkYXB0ZXJTZXJ2aWNlOiBTa3lDb3JlQWRhcHRlclNlcnZpY2UsXG4gICAgcmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyLFxuICApIHtcbiAgICB0aGlzLiNjb3JlQWRhcHRlclNlcnZpY2UgPSBjb3JlQWRhcHRlclNlcnZpY2U7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIodW5kZWZpbmVkLCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGZvY3VzIG9uIHRoZSBzcGVjaWZpZWQgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBmb2N1cyhlbDogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIGVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY2hpbGQgZWxlbWVudCB3aXRoIHRoZSBgLnNreS1zd2l0Y2hgIGNsYXNzLlxuICAgKiBVc2VmdWwgZm9yIGdldHRpbmcgU0tZIFVYLXRoZW1lZCByYWRpbyBidXR0b25zIG9yIGNoZWNrYm94ZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29udHJvbChlbDogRWxlbWVudFJlZik6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2t5LXN3aXRjaCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBicmVha3BvaW50IGJhc2VkIG9uIHRoZSB3aWR0aC5cbiAgICogQHBhcmFtIHdpZHRoIFdpZHRoIG9mIHRoZSBlbGVtZW50IGluIHBpeGVscy5cbiAgICovXG4gIHB1YmxpYyBnZXRCcmVha3BvaW50Rm9yV2lkdGgod2lkdGg6IG51bWJlciB8IHVuZGVmaW5lZCk6IFNreU1lZGlhQnJlYWtwb2ludHMge1xuICAgIGlmICghd2lkdGgpIHtcbiAgICAgIHJldHVybiBTa3lNZWRpYUJyZWFrcG9pbnRzLmxnO1xuICAgIH1cblxuICAgIGlmICh3aWR0aCA8PSBCUkVBS1BPSU5UX1hTX01BWF9QSVhFTFMpIHtcbiAgICAgIHJldHVybiBTa3lNZWRpYUJyZWFrcG9pbnRzLnhzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB3aWR0aCA+PSBCUkVBS1BPSU5UX1NNX01JTl9QSVhFTFMgJiZcbiAgICAgIHdpZHRoIDw9IEJSRUFLUE9JTlRfU01fTUFYX1BJWEVMU1xuICAgICkge1xuICAgICAgcmV0dXJuIFNreU1lZGlhQnJlYWtwb2ludHMuc207XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHdpZHRoID49IEJSRUFLUE9JTlRfTURfTUlOX1BJWEVMUyAmJlxuICAgICAgd2lkdGggPD0gQlJFQUtQT0lOVF9NRF9NQVhfUElYRUxTXG4gICAgKSB7XG4gICAgICByZXR1cm4gU2t5TWVkaWFCcmVha3BvaW50cy5tZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFNreU1lZGlhQnJlYWtwb2ludHMubGc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBgcGFyZW50Tm9kZWAgb2YgdGhlIHByb3ZpZGVkIGBlbGVtZW50YC5cbiAgICovXG4gIHB1YmxpYyBnZXRQYXJlbnRXaWR0aChlbGVtZW50OiBFbGVtZW50UmVmKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKFxuICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkXG4gICAgKT8ucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/LndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBgY2hpbGRFbGAgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBgcGFyZW50RWxgLlxuICAgKi9cbiAgcHVibGljIGlzRGVzY2VuZGFudChwYXJlbnRFbDogRWxlbWVudFJlZiwgY2hpbGRFbDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGFyZW50RWwubmF0aXZlRWxlbWVudC5jb250YWlucyhjaGlsZEVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBgdGFiSW5kZXhgIG9mIGFsbCBmb2N1c2FibGUgY2hpbGRyZW4gb2YgdGhlIGBlbGVtZW50YCB0byB0aGUgcHJvdmlkZWQgYHRhYkluZGV4YC5cbiAgICovXG4gIHB1YmxpYyBzZXRDaGlsZHJlblRhYkluZGV4KGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHRhYkluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBmb2N1c2FibGVFbHMgPSB0aGlzLiNjb3JlQWRhcHRlclNlcnZpY2UuZ2V0Rm9jdXNhYmxlQ2hpbGRyZW4oZWwsIHtcbiAgICAgIGlnbm9yZVZpc2liaWxpdHk6IHRydWUsXG4gICAgfSk7XG4gICAgbGV0IGluZGV4ID0gZm9jdXNhYmxlRWxzLmxlbmd0aDtcbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgZm9jdXNhYmxlRWxzW2luZGV4XS50YWJJbmRleCA9IHRhYkluZGV4O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzcG9uc2l2ZSBDU1MgY2xhc3Mgb24gdGhlIHByb3ZpZGVkIGVsZW1lbnQgYmFzZWQgb24gaXRzIGN1cnJlbnQgd2lkdGguXG4gICAqL1xuICBwdWJsaWMgc2V0UmVzcG9uc2l2ZUNsYXNzKFxuICAgIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgYnJlYWtwb2ludDogU2t5TWVkaWFCcmVha3BvaW50cyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbmF0aXZlRWw6IEhUTUxFbGVtZW50ID0gZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQ2xhc3MobmF0aXZlRWwsIFJFU1BPTlNJVkVfQ0xBU1NfWFMpO1xuICAgIHRoaXMuI3JlbmRlcmVyLnJlbW92ZUNsYXNzKG5hdGl2ZUVsLCBSRVNQT05TSVZFX0NMQVNTX1NNKTtcbiAgICB0aGlzLiNyZW5kZXJlci5yZW1vdmVDbGFzcyhuYXRpdmVFbCwgUkVTUE9OU0lWRV9DTEFTU19NRCk7XG4gICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQ2xhc3MobmF0aXZlRWwsIFJFU1BPTlNJVkVfQ0xBU1NfTEcpO1xuXG4gICAgbGV0IG5ld0NsYXNzOiBzdHJpbmc7XG5cbiAgICBzd2l0Y2ggKGJyZWFrcG9pbnQpIHtcbiAgICAgIGNhc2UgU2t5TWVkaWFCcmVha3BvaW50cy54czoge1xuICAgICAgICBuZXdDbGFzcyA9IFJFU1BPTlNJVkVfQ0xBU1NfWFM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBTa3lNZWRpYUJyZWFrcG9pbnRzLnNtOiB7XG4gICAgICAgIG5ld0NsYXNzID0gUkVTUE9OU0lWRV9DTEFTU19TTTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFNreU1lZGlhQnJlYWtwb2ludHMubWQ6IHtcbiAgICAgICAgbmV3Q2xhc3MgPSBSRVNQT05TSVZFX0NMQVNTX01EO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2t5TWVkaWFCcmVha3BvaW50cy5sZzoge1xuICAgICAgICBuZXdDbGFzcyA9IFJFU1BPTlNJVkVfQ0xBU1NfTEc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI3JlbmRlcmVyLmFkZENsYXNzKG5hdGl2ZUVsLCBuZXdDbGFzcyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYHRhYkluZGV4YCBvZiB0aGUgYGVsZW1lbnRgIHRvIHRoZSBwcm92aWRlZCBgdGFiSW5kZXhgLlxuICAgKi9cbiAgcHVibGljIHNldFRhYkluZGV4KGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHRhYkluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcblxuICAgIGVsLnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gIH1cbn1cbiJdfQ==
|