UNPKG

@edugouvfr/ngx-dsfr

Version:

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

117 lines 22.9 kB
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { DsfrSizeConst } from '../../shared'; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; import * as i2 from "@angular/common"; import * as i3 from "../transcription/transcription.component"; import * as i4 from "../link/link.component"; export class DsfrContentComponent { constructor(sanitizer) { this.sanitizer = sanitizer; // -- Commun images / vidéos ----------------------------------------------------------------------------------------- /** Type du média 'image' | 'video', 'image' par défaut. */ this.type = 'image'; /** Le format conseillé par défaut est le 16:9. */ this.ratio = '16:9'; // ------------------------------------------------------------------------------------------------------------------- /** * Si une route est spécifiée, émet un événement avec la route comme valeur, sinon n'émet rien. */ this.linkSelect = new EventEmitter(); this._size = DsfrSizeConst.MD; } get size() { return this._size; } /** @deprecated (@since 1.6) utiliser `transcriptionContent` à la place */ get transcription() { return this.transcriptionContent; } /** @deprecated (@since 1.6) utiliser `transcriptionLinkLabel` à la place */ get transcriptionLabel() { return this.linkLabel; } /** @deprecated (@since 1.6) utiliser `transcriptionContent` à la place */ set transcription(value) { this.transcriptionContent = value; } /** @deprecated (@since 1.6) utiliser `transcriptionLinkLabel` à la place */ set transcriptionLabel(value) { this.linkLabel = value; } /** Redimensionnement du composant : `LG` : 125%, `MD` : 100% (défault), `SM` : 75%. */ set size(value) { this._size = value?.toUpperCase(); } /** * @deprecated (@since 1.11.5) utiliser `routePath` à la place. * routerLink provoque un bug accessibilité sur la navigation au clavier (ajout d'un tabindex=0) **/ set routerLink(value) { if (value) this.routePath = value; } /** @internal */ onLinkSelect() { if (this.route) { this.linkSelect.emit(this.route); } } /** * @internal */ sanitizedSource() { return this.sanitizer.bypassSecurityTrustResourceUrl(this.source); } /** @internal */ hasTranscriptionLink() { return !!this.linkLabel; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrContentComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DsfrContentComponent, selector: "dsfr-content", inputs: { type: "type", legend: "legend", ratio: "ratio", source: "source", linkLabel: "linkLabel", link: "link", linkTarget: "linkTarget", route: "route", routePath: "routePath", routerLinkActive: "routerLinkActive", routerLinkExtras: "routerLinkExtras", tooltipMessage: "tooltipMessage", transcriptionContent: "transcriptionContent", transcriptionHeading: "transcriptionHeading", alternate: "alternate", transcription: "transcription", transcriptionLabel: "transcriptionLabel", size: "size", routerLink: "routerLink" }, outputs: { linkSelect: "linkSelect" }, ngImport: i0, template: "<figure\n class=\"fr-content-media\"\n [class.fr-content-media--lg]=\"size === 'LG'\"\n [class.fr-content-media--sm]=\"size === 'SM'\"\n role=\"group\"\n [attr.aria-label]=\"legend\">\n <div *ngIf=\"type === 'image'\" class=\"fr-content-media__img\">\n <img\n *ngIf=\"source\"\n class=\"fr-responsive-img\"\n [attr.title]=\"tooltipMessage || null\"\n [ngClass]=\"{\n 'fr-ratio-32x9': ratio === '16:9/2',\n 'fr-ratio-16x9': ratio === '16:9',\n 'fr-ratio-3x2': ratio === '3:2',\n 'fr-ratio-4x3': ratio === '4:3',\n 'fr-ratio-1x1': ratio === '1:1',\n 'fr-ratio-3x4': ratio === '3:4',\n 'fr-ratio-2x3': ratio === '2:3'\n }\"\n [src]=\"source\"\n [alt]=\"alternate\" />\n\n <!-- @since 1.6 slot par d\u00E9faut d\u00E9pr\u00E9ci\u00E9 -->\n <ng-content></ng-content>\n <!-- @since 1.6 ajout du slot 'svg' -->\n <ng-content select=\"[svg]\"></ng-content>\n </div>\n\n <iframe\n *ngIf=\"type === 'video'\"\n [attr.title]=\"tooltipMessage || null\"\n class=\"fr-responsive-vid\"\n [class.fr-ratio-16x9]=\"ratio === '16:9'\"\n [class.fr-ratio-4x3]=\"ratio === '4:3'\"\n [class.fr-ratio-1x1]=\"ratio === '1:1'\"\n [src]=\"sanitizedSource()\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen></iframe>\n\n <figcaption *ngIf=\"legend || linkLabel\" class=\"fr-content-media__caption\">\n {{ legend }}\n <dsfr-link\n *ngIf=\"linkLabel\"\n [label]=\"linkLabel\"\n [link]=\"link\"\n [linkTarget]=\"linkTarget\"\n [route]=\"route\"\n [routePath]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkExtras]=\"routerLinkExtras\"\n (linkSelect)=\"onLinkSelect()\"></dsfr-link>\n </figcaption>\n\n <dsfr-transcription\n *ngIf=\"transcriptionContent\"\n [heading]=\"transcriptionHeading\"\n [content]=\"transcriptionContent\"></dsfr-transcription>\n <!-- @since 1.6 ajout du slot 'transcription' -->\n <ng-content *ngIf=\"!transcriptionContent\" select=\"[transcription]\"></ng-content>\n</figure>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DsfrTranscriptionComponent, selector: "dsfr-transcription", inputs: ["content", "heading"] }, { kind: "component", type: i4.DsfrLinkComponent, selector: "dsfr-link", inputs: ["ariaCurrent", "ariaLabel", "ariaControls", "customClass", "disabled", "icon", "iconPosition", "linkId", "label", "link", "linkTarget", "route", "routePath", "routerLinkActive", "routerLinkActiveOptions", "routerLinkExtras", "size", "tooltipMessage", "mode", "targetLink", "routerLink"], outputs: ["linkSelect"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrContentComponent, decorators: [{ type: Component, args: [{ selector: 'dsfr-content', encapsulation: ViewEncapsulation.None, template: "<figure\n class=\"fr-content-media\"\n [class.fr-content-media--lg]=\"size === 'LG'\"\n [class.fr-content-media--sm]=\"size === 'SM'\"\n role=\"group\"\n [attr.aria-label]=\"legend\">\n <div *ngIf=\"type === 'image'\" class=\"fr-content-media__img\">\n <img\n *ngIf=\"source\"\n class=\"fr-responsive-img\"\n [attr.title]=\"tooltipMessage || null\"\n [ngClass]=\"{\n 'fr-ratio-32x9': ratio === '16:9/2',\n 'fr-ratio-16x9': ratio === '16:9',\n 'fr-ratio-3x2': ratio === '3:2',\n 'fr-ratio-4x3': ratio === '4:3',\n 'fr-ratio-1x1': ratio === '1:1',\n 'fr-ratio-3x4': ratio === '3:4',\n 'fr-ratio-2x3': ratio === '2:3'\n }\"\n [src]=\"source\"\n [alt]=\"alternate\" />\n\n <!-- @since 1.6 slot par d\u00E9faut d\u00E9pr\u00E9ci\u00E9 -->\n <ng-content></ng-content>\n <!-- @since 1.6 ajout du slot 'svg' -->\n <ng-content select=\"[svg]\"></ng-content>\n </div>\n\n <iframe\n *ngIf=\"type === 'video'\"\n [attr.title]=\"tooltipMessage || null\"\n class=\"fr-responsive-vid\"\n [class.fr-ratio-16x9]=\"ratio === '16:9'\"\n [class.fr-ratio-4x3]=\"ratio === '4:3'\"\n [class.fr-ratio-1x1]=\"ratio === '1:1'\"\n [src]=\"sanitizedSource()\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen></iframe>\n\n <figcaption *ngIf=\"legend || linkLabel\" class=\"fr-content-media__caption\">\n {{ legend }}\n <dsfr-link\n *ngIf=\"linkLabel\"\n [label]=\"linkLabel\"\n [link]=\"link\"\n [linkTarget]=\"linkTarget\"\n [route]=\"route\"\n [routePath]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkExtras]=\"routerLinkExtras\"\n (linkSelect)=\"onLinkSelect()\"></dsfr-link>\n </figcaption>\n\n <dsfr-transcription\n *ngIf=\"transcriptionContent\"\n [heading]=\"transcriptionHeading\"\n [content]=\"transcriptionContent\"></dsfr-transcription>\n <!-- @since 1.6 ajout du slot 'transcription' -->\n <ng-content *ngIf=\"!transcriptionContent\" select=\"[transcription]\"></ng-content>\n</figure>\n" }] }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { type: [{ type: Input }], legend: [{ type: Input }], ratio: [{ type: Input }], source: [{ type: Input }], linkLabel: [{ type: Input }], link: [{ type: Input }], linkTarget: [{ type: Input }], route: [{ type: Input }], routePath: [{ type: Input }], routerLinkActive: [{ type: Input }], routerLinkExtras: [{ type: Input }], tooltipMessage: [{ type: Input }], transcriptionContent: [{ type: Input }], transcriptionHeading: [{ type: Input }], alternate: [{ type: Input }], linkSelect: [{ type: Output }], transcription: [{ type: Input }], transcriptionLabel: [{ type: Input }], size: [{ type: Input }], routerLink: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jb250ZW50L2NvbnRlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY29udGVudC9jb250ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUYsT0FBTyxFQUE0QyxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7OztBQVl2RixNQUFNLE9BQU8sb0JBQW9CO0lBMkUvQixZQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBMUUzQyxzSEFBc0g7UUFFdEgsMkRBQTJEO1FBQ2xELFNBQUksR0FBYyxPQUFPLENBQUM7UUFLbkMsa0RBQWtEO1FBQ3pDLFVBQUssR0FBNEIsTUFBTSxDQUFDO1FBd0RqRCxzSEFBc0g7UUFFdEg7O1dBRUc7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUUxQyxVQUFLLEdBQWEsYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUVHLENBQUM7SUFFL0MsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxJQUFhLGFBQWEsQ0FBQyxLQUFhO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxJQUFhLGtCQUFrQixDQUFDLEtBQWE7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixJQUFhLElBQUksQ0FBQyxLQUFlO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQWEsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7O1FBR0k7SUFDSixJQUFhLFVBQVUsQ0FBQyxLQUFvQztRQUMxRCxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtRQUNsQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7K0dBbklVLG9CQUFvQjttR0FBcEIsb0JBQW9CLHFtQkNmakMsMm1FQTZEQTs7NEZEOUNhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxjQUFjLGlCQUVULGlCQUFpQixDQUFDLElBQUk7bUdBTTVCLElBQUk7c0JBQVosS0FBSztnQkFHRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFRRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQVNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFxQk0sYUFBYTtzQkFBekIsS0FBSztnQkFLTyxrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBS08sSUFBSTtzQkFBaEIsS0FBSztnQkFRTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE5hdmlnYXRpb25FeHRyYXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRHNmckxpbmtUYXJnZXQsIERzZnJOYXZpZ2F0aW9uLCBEc2ZyU2l6ZSwgRHNmclNpemVDb25zdCB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBEc2ZyTWVkaWEgfSBmcm9tICcuL21lZGlhJztcblxuLy8gaHR0cHM6Ly93d3cuc3lzdGVtZS1kZS1kZXNpZ24uZ291di5mci9lbGVtZW50cy1kLWludGVyZmFjZS9mb25kYW1lbnRhdXgtdGVjaG5pcXVlcy9tZWRpYXMvXG50eXBlIFJhdGlvSW1hZ2UgPSAnMTY6OS8yJyB8ICcxNjo5JyB8ICczOjInIHwgJzQ6MycgfCAnMToxJyB8ICczOjQnIHwgJzI6Myc7XG50eXBlIFJhdGlvVmlkZW8gPSAnMTY6OScgfCAnNDozJyB8ICcxOjEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkc2ZyLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIERzZnJDb250ZW50Q29tcG9uZW50IGltcGxlbWVudHMgRHNmck5hdmlnYXRpb24ge1xuICAvLyAtLSBDb21tdW4gaW1hZ2VzIC8gdmlkw6lvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBUeXBlIGR1IG3DqWRpYSAnaW1hZ2UnIHwgJ3ZpZGVvJywgJ2ltYWdlJyBwYXIgZMOpZmF1dC4gKi9cbiAgQElucHV0KCkgdHlwZTogRHNmck1lZGlhID0gJ2ltYWdlJztcblxuICAvKiogTMOpZ2VuZGUsIG9wdGlvbm5lbGxlICovXG4gIEBJbnB1dCgpIGxlZ2VuZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBMZSBmb3JtYXQgY29uc2VpbGzDqSBwYXIgZMOpZmF1dCBlc3QgbGUgMTY6OS4gKi9cbiAgQElucHV0KCkgcmF0aW86IFJhdGlvSW1hZ2UgfCBSYXRpb1ZpZGVvID0gJzE2OjknO1xuXG4gIC8qKiBAcmVxdWlyZXMgbWVkaWEsIGltYWdlLCB2aWTDqW8gb3UgYXVkaW8sIG9ibGlnYXRvaXJlICovXG4gIEBJbnB1dCgpIHNvdXJjZTogc3RyaW5nO1xuXG4gIC8vIC0tIExpZW4gZGUgdHJhbnNjcmlwdGlvbiBzb3VzIGxlIG1lZGlhIChvcHRpb25uZWwpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQHNpbmNlIDEuNiByZW1wbGFjZSAndHJhbnNjcmlwdGlvbkxhYmVsJy5cbiAgICogTGFiZWwgZHUgbGllbiAoZGUgdHJhbnNjcmlwdGlvbiksIG9wdGlvbm5lbC5cbiAgICovXG4gIEBJbnB1dCgpIGxpbmtMYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBMaWVuIGRlIHRyYW5zY3JpcHRpb24gKG91IGF1dHJlKSwgb3B0aW9ubmVsLiAqL1xuICBASW5wdXQoKSBsaW5rOiBzdHJpbmc7XG5cbiAgLyoqIFRhcmdldCBkdSBsaWVuLiBUYXJnZXQgcGFyIGTDqWZhdXQgZGUgbCdhcHBsaWNhdGlvbiBzaSBsYSBwcm9wcmnDqXTDqSBlc3Qgbm9uIHJlbnNlaWduw6llLiAqL1xuICBASW5wdXQoKSBsaW5rVGFyZ2V0OiBEc2ZyTGlua1RhcmdldDtcblxuICAvKiogUGF0aCBpbnRlcm5lLiBFeGNsdXNpZiBhdmVjIGxpbmsgZXQgcm91dGVQYXRoICovXG4gIEBJbnB1dCgpIHJvdXRlOiBzdHJpbmc7XG5cbiAgLyoqIFBhdGggYW5ndWxhciBnw6lyw6kgZW4gdGFudCBxdWUgZGlyZWN0aXZlIHJvdXRlckxpbmsuIEV4Y2x1c2lmIGF2ZWMgbGluayBldCByb3V0ZS4gKi9cbiAgQElucHV0KCkgcm91dGVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogUm91dGVyTGluayA6IGNsYXNzZSB1dGlsaXPDqWUgcG91ciBsYSBkaXJlY3RpdmUgcm91dGVyTGluayBhY3RpdmUuICovXG4gIEBJbnB1dCgpIHJvdXRlckxpbmtBY3RpdmU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBSb3V0ZXJMaW5rIDogdmFsZXVycyBhZGRpdGlvbm5lbGxlcyBkZSBuYXZpZ2F0aW9uIHBvdXIgbGUgcm91dGVyTGluayAocXVlcnlQYXJhbXMsIHN0YXRlLCBldGMuKSAqL1xuICBASW5wdXQoKSByb3V0ZXJMaW5rRXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzO1xuXG4gIC8qKiBNZXNzYWdlIGR1IHRvb2x0aXAgZHUgbcOpZGlhLiAqL1xuICBASW5wdXQoKSB0b29sdGlwTWVzc2FnZTogc3RyaW5nO1xuXG4gIC8vIC0tIE1vZGFsIGRlIHRyYW5zY3JpcHRpb24gKG9wdGlvbm5lbCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQHNpbmNlIDEuNiByZW1wbGFjZSAndHJhbnNjcmlwdGlvbicuXG4gICAqIENvbnRlbnUsIHNpbXBsZSwgb3B0aW9ubmVsIGRlIGxhIG1vZGFsZSBkZSB0cmFuc2NyaXB0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgdHJhbnNjcmlwdGlvbkNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHNpbmNlIDEuNiBUaXRyZSBkdSBtw6lkaWEgKGltYWdlIG91IHZpZMOpbyksIGRlIG5pdmVhdSBoMS5cbiAgICovXG4gIEBJbnB1dCgpIHRyYW5zY3JpcHRpb25IZWFkaW5nOiBzdHJpbmc7XG5cbiAgLy8gLS0gSW1hZ2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTcMOpY2lmaXF1ZSBhdXggaW1hZ2VzLlxuICAgKiBBbHRlcm5hdGl2ZSBkJ3VuZSBpbWFnZSAoYXR0cmlidXQgYWx0KSwgZG9pdCB0b3Vqb3VycyDDqnRyZSBwcsOpc2VudGUsIHNhIHZhbGV1ciBwZXV0IMOqdHJlIHZpZGUgKGltYWdlIG7igJlhcHBvcnRhbnRcbiAgICogcGFzIGRlIHNlbnMgc3VwcGzDqW1lbnRhaXJlIGF1IGNvbnRleHRlKSBvdSBub24gKHBvcnRldXNlIGRlIHRleHRlIG91IGFwcG9ydGFudCBkdSBzZW5zKSBzZWxvbiB2b3RyZSBjb250ZXh0ZS5cbiAgICovXG4gIEBJbnB1dCgpIGFsdGVybmF0ZTogc3RyaW5nO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogU2kgdW5lIHJvdXRlIGVzdCBzcMOpY2lmacOpZSwgw6ltZXQgdW4gw6l2w6luZW1lbnQgYXZlYyBsYSByb3V0ZSBjb21tZSB2YWxldXIsIHNpbm9uIG4nw6ltZXQgcmllbi5cbiAgICovXG4gIEBPdXRwdXQoKSBsaW5rU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBfc2l6ZTogRHNmclNpemUgPSBEc2ZyU2l6ZUNvbnN0Lk1EO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XG5cbiAgZ2V0IHNpemUoKTogRHNmclNpemUge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIChAc2luY2UgMS42KSB1dGlsaXNlciBgdHJhbnNjcmlwdGlvbkNvbnRlbnRgIMOgIGxhIHBsYWNlICovXG4gIGdldCB0cmFuc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNjcmlwdGlvbkNvbnRlbnQ7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKEBzaW5jZSAxLjYpIHV0aWxpc2VyIGB0cmFuc2NyaXB0aW9uTGlua0xhYmVsYCDDoCBsYSBwbGFjZSAgKi9cbiAgZ2V0IHRyYW5zY3JpcHRpb25MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxpbmtMYWJlbDtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAoQHNpbmNlIDEuNikgdXRpbGlzZXIgYHRyYW5zY3JpcHRpb25Db250ZW50YCDDoCBsYSBwbGFjZSAgKi9cbiAgQElucHV0KCkgc2V0IHRyYW5zY3JpcHRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudHJhbnNjcmlwdGlvbkNvbnRlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAoQHNpbmNlIDEuNikgdXRpbGlzZXIgYHRyYW5zY3JpcHRpb25MaW5rTGFiZWxgIMOgIGxhIHBsYWNlICAqL1xuICBASW5wdXQoKSBzZXQgdHJhbnNjcmlwdGlvbkxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxpbmtMYWJlbCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqIFJlZGltZW5zaW9ubmVtZW50IGR1IGNvbXBvc2FudCA6IGBMR2AgOiAxMjUlLCBgTURgIDogMTAwJSAoZMOpZmF1bHQpLCBgU01gIDogNzUlLiAqL1xuICBASW5wdXQoKSBzZXQgc2l6ZSh2YWx1ZTogRHNmclNpemUpIHtcbiAgICB0aGlzLl9zaXplID0gPERzZnJTaXplPnZhbHVlPy50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIChAc2luY2UgMS4xMS41KSB1dGlsaXNlciBgcm91dGVQYXRoYCDDoCBsYSBwbGFjZS5cbiAgICogcm91dGVyTGluayBwcm92b3F1ZSB1biBidWcgYWNjZXNzaWJpbGl0w6kgc3VyIGxhIG5hdmlnYXRpb24gYXUgY2xhdmllciAoYWpvdXQgZCd1biB0YWJpbmRleD0wKVxuICAgKiovXG4gIEBJbnB1dCgpIHNldCByb3V0ZXJMaW5rKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkgdGhpcy5yb3V0ZVBhdGggPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgb25MaW5rU2VsZWN0KCkge1xuICAgIGlmICh0aGlzLnJvdXRlKSB7XG4gICAgICB0aGlzLmxpbmtTZWxlY3QuZW1pdCh0aGlzLnJvdXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzYW5pdGl6ZWRTb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0aGlzLnNvdXJjZSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGhhc1RyYW5zY3JpcHRpb25MaW5rKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubGlua0xhYmVsO1xuICB9XG59XG4iLCI8ZmlndXJlXG4gIGNsYXNzPVwiZnItY29udGVudC1tZWRpYVwiXG4gIFtjbGFzcy5mci1jb250ZW50LW1lZGlhLS1sZ109XCJzaXplID09PSAnTEcnXCJcbiAgW2NsYXNzLmZyLWNvbnRlbnQtbWVkaWEtLXNtXT1cInNpemUgPT09ICdTTSdcIlxuICByb2xlPVwiZ3JvdXBcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImxlZ2VuZFwiPlxuICA8ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2ltYWdlJ1wiIGNsYXNzPVwiZnItY29udGVudC1tZWRpYV9faW1nXCI+XG4gICAgPGltZ1xuICAgICAgKm5nSWY9XCJzb3VyY2VcIlxuICAgICAgY2xhc3M9XCJmci1yZXNwb25zaXZlLWltZ1wiXG4gICAgICBbYXR0ci50aXRsZV09XCJ0b29sdGlwTWVzc2FnZSB8fCBudWxsXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2ZyLXJhdGlvLTMyeDknOiByYXRpbyA9PT0gJzE2OjkvMicsXG4gICAgICAgICdmci1yYXRpby0xNng5JzogcmF0aW8gPT09ICcxNjo5JyxcbiAgICAgICAgJ2ZyLXJhdGlvLTN4Mic6IHJhdGlvID09PSAnMzoyJyxcbiAgICAgICAgJ2ZyLXJhdGlvLTR4Myc6IHJhdGlvID09PSAnNDozJyxcbiAgICAgICAgJ2ZyLXJhdGlvLTF4MSc6IHJhdGlvID09PSAnMToxJyxcbiAgICAgICAgJ2ZyLXJhdGlvLTN4NCc6IHJhdGlvID09PSAnMzo0JyxcbiAgICAgICAgJ2ZyLXJhdGlvLTJ4Myc6IHJhdGlvID09PSAnMjozJ1xuICAgICAgfVwiXG4gICAgICBbc3JjXT1cInNvdXJjZVwiXG4gICAgICBbYWx0XT1cImFsdGVybmF0ZVwiIC8+XG5cbiAgICA8IS0tIEBzaW5jZSAxLjYgc2xvdCBwYXIgZMOpZmF1dCBkw6lwcsOpY2nDqSAtLT5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPCEtLSBAc2luY2UgMS42IGFqb3V0IGR1IHNsb3QgJ3N2ZycgLS0+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3N2Z11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDxpZnJhbWVcbiAgICAqbmdJZj1cInR5cGUgPT09ICd2aWRlbydcIlxuICAgIFthdHRyLnRpdGxlXT1cInRvb2x0aXBNZXNzYWdlIHx8IG51bGxcIlxuICAgIGNsYXNzPVwiZnItcmVzcG9uc2l2ZS12aWRcIlxuICAgIFtjbGFzcy5mci1yYXRpby0xNng5XT1cInJhdGlvID09PSAnMTY6OSdcIlxuICAgIFtjbGFzcy5mci1yYXRpby00eDNdPVwicmF0aW8gPT09ICc0OjMnXCJcbiAgICBbY2xhc3MuZnItcmF0aW8tMXgxXT1cInJhdGlvID09PSAnMToxJ1wiXG4gICAgW3NyY109XCJzYW5pdGl6ZWRTb3VyY2UoKVwiXG4gICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPlxuXG4gIDxmaWdjYXB0aW9uICpuZ0lmPVwibGVnZW5kIHx8IGxpbmtMYWJlbFwiIGNsYXNzPVwiZnItY29udGVudC1tZWRpYV9fY2FwdGlvblwiPlxuICAgIHt7IGxlZ2VuZCB9fVxuICAgIDxkc2ZyLWxpbmtcbiAgICAgICpuZ0lmPVwibGlua0xhYmVsXCJcbiAgICAgIFtsYWJlbF09XCJsaW5rTGFiZWxcIlxuICAgICAgW2xpbmtdPVwibGlua1wiXG4gICAgICBbbGlua1RhcmdldF09XCJsaW5rVGFyZ2V0XCJcbiAgICAgIFtyb3V0ZV09XCJyb3V0ZVwiXG4gICAgICBbcm91dGVQYXRoXT1cInJvdXRlUGF0aFwiXG4gICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJyb3V0ZXJMaW5rQWN0aXZlID8/ICcnXCJcbiAgICAgIFtyb3V0ZXJMaW5rRXh0cmFzXT1cInJvdXRlckxpbmtFeHRyYXNcIlxuICAgICAgKGxpbmtTZWxlY3QpPVwib25MaW5rU2VsZWN0KClcIj48L2RzZnItbGluaz5cbiAgPC9maWdjYXB0aW9uPlxuXG4gIDxkc2ZyLXRyYW5zY3JpcHRpb25cbiAgICAqbmdJZj1cInRyYW5zY3JpcHRpb25Db250ZW50XCJcbiAgICBbaGVhZGluZ109XCJ0cmFuc2NyaXB0aW9uSGVhZGluZ1wiXG4gICAgW2NvbnRlbnRdPVwidHJhbnNjcmlwdGlvbkNvbnRlbnRcIj48L2RzZnItdHJhbnNjcmlwdGlvbj5cbiAgPCEtLSBAc2luY2UgMS42IGFqb3V0IGR1IHNsb3QgJ3RyYW5zY3JpcHRpb24nIC0tPlxuICA8bmctY29udGVudCAqbmdJZj1cIiF0cmFuc2NyaXB0aW9uQ29udGVudFwiIHNlbGVjdD1cIlt0cmFuc2NyaXB0aW9uXVwiPjwvbmctY29udGVudD5cbjwvZmlndXJlPlxuIl19