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).

73 lines 22.5 kB
import { CommonModule } from '@angular/common'; import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { DsfrButtonComponent } from '../../components'; import { DsfrFormCheckboxComponent, DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective, DsfrFormInputComponent, } from '../../forms'; import { DsfrFormSelectComponent } from '../../forms/form-select'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/forms"; export class DsfrNameComponent { constructor() { /** * Permet d'afficher l'option "Je n'ai pas de prénom". */ this.noFirstName = false; /** * Permet d'afficher un bouton qui ajoute un nouveau champ de de saisi pour un prénom additionnel. */ this.addFirstName = false; /** * Notifie que l'utilisateur a cliqué sur le bouton d'ajout de prénom. */ this.addFirstNameSelect = new EventEmitter(); /** * Notifie la suppression d'un prénom additionnel (le tableau 'firstnames' devrait être mis à jour en conséquence). */ this.deleteFirstNameSelect = new EventEmitter(); } /** @internal */ onAddFirstNameInput() { this.addFirstNameSelect.emit(); } /** @internal */ onDeleteFirstNameInput(index) { this.deleteFirstNameSelect.emit(index); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrNameComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DsfrNameComponent, isStandalone: true, selector: "dsfr-name", inputs: { legend: "legend", lastName: "lastName", usualName: "usualName", firstNames: "firstNames", noFirstName: "noFirstName", addFirstName: "addFirstName", country: "country" }, outputs: { addFirstNameSelect: "addFirstNameSelect", deleteFirstNameSelect: "deleteFirstNameSelect" }, ngImport: i0, template: "<dsfr-fieldset legend=\"Nom\" [legendSrOnly]=\"true\">\n <ng-container *ngIf=\"country\">\n <dsfr-form-select\n *fieldsetElement\n [label]=\"country.label || 'Pays'\"\n [placeHolder]=\"country.placeHolder || 'S\u00E9lectionner une option'\"\n [options]=\"country.options ?? []\"\n [(ngModel)]=\"country.value\"></dsfr-form-select>\n </ng-container>\n <dsfr-form-input\n *fieldsetElement\n [name]=\"lastName.name || 'family-name'\"\n [spellcheck]=\"false\"\n [label]=\"lastName.label || 'Nom'\"\n [autocomplete]=\"'family-name'\"\n [(ngModel)]=\"lastName.value\"></dsfr-form-input>\n <ng-container *ngIf=\"usualName\">\n <dsfr-form-input\n *fieldsetElement\n [name]=\"usualName.name || 'married-name'\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'family-name'\"\n [label]=\"usualName.label || 'Nom d\\'usage'\"\n [hint]=\"usualName.hint || 'Ancien nom...'\"\n [(ngModel)]=\"usualName.value\"></dsfr-form-input>\n </ng-container>\n <ng-container *ngIf=\"!noFirstName\">\n <ng-container *ngFor=\"let item of firstNames; let index = index\">\n <dsfr-form-input\n *fieldsetElement\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"noFirstName\">\n <dsfr-fieldset *fieldsetElement legend=\"Pr\u00E9nom(s)\" [legendSrOnly]=\"true\">\n <ng-container *ngFor=\"let item of firstNames; let index = index\">\n <ng-container *ngIf=\"index === 0\">\n <dsfr-form-input\n *fieldsetElement\n [disabled]=\"item.disabled || noFirstNameModel === true\"\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n <ng-container *ngIf=\"index > 0\">\n <dsfr-form-input\n *fieldsetElement\n [disabled]=\"item.disabled || noFirstNameModel === true\"\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n inputWrapMode=\"action\"\n [buttonIcon]=\"index !== 0 ? 'fr-icon-delete-line' : undefined\"\n buttonVariant=\"tertiary\"\n (buttonSelect)=\"onDeleteFirstNameInput(index)\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"addFirstName\">\n <dsfr-button\n *fieldsetElement\n label=\"Ajouter un pr\u00E9nom\"\n iconPosition=\"left\"\n variant=\"tertiary\"\n size=\"SM\"\n icon=\"fr-icon-add-line\"\n [disabled]=\"noFirstNameModel === true\"\n (click)=\"onAddFirstNameInput()\"></dsfr-button>\n </ng-container>\n\n <dsfr-form-checkbox\n *fieldsetElement\n [small]=\"true\"\n name=\"firstname-disabled\"\n label=\"Je n'ai pas de pr\u00E9nom\"\n [(ngModel)]=\"noFirstNameModel\"></dsfr-form-checkbox>\n </dsfr-fieldset>\n </ng-container>\n</dsfr-fieldset>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DsfrFormFieldsetComponent, selector: "dsfr-fieldset, dsfr-form-fieldset", inputs: ["inline"] }, { kind: "component", type: DsfrFormInputComponent, selector: "dsfr-form-input", inputs: ["rows", "labelSrOnly", "width", "textarea"] }, { kind: "component", type: DsfrFormCheckboxComponent, selector: "dsfr-form-checkbox", inputs: ["labelSrOnly", "ariaInvalid", "small", "message", "messageSeverity", "error", "valid", "indeterminate"] }, { kind: "component", type: DsfrButtonComponent, selector: "dsfr-button", inputs: ["label", "type", "tooltipMessage", "variant", "buttonSize", "icon", "iconPosition", "disabled", "uppercase", "loader", "ariaLabel", "invertedOutlineContrast", "id", "buttonId", "ariaControls", "ariaPressed", "ariaHasPopup", "ariaExpanded", "tabIndex", "customClass", "buttonRole", "labelSrOnly", "size"] }, { kind: "component", type: DsfrFormSelectComponent, selector: "dsfr-form-select", inputs: ["placeholder", "required", "ariaLabel", "ariaInvalid", "error", "valid", "message", "messageSeverity", "labelSrOnly", "placeHolder", "options", "compareWith"], outputs: ["selectChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: DsfrFormFieldsetElementDirective, selector: "[fieldsetElement]", inputs: ["fieldsetElement"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrNameComponent, decorators: [{ type: Component, args: [{ selector: 'dsfr-name', encapsulation: ViewEncapsulation.None, standalone: true, imports: [ CommonModule, DsfrFormFieldsetComponent, DsfrFormInputComponent, DsfrFormCheckboxComponent, DsfrButtonComponent, DsfrFormSelectComponent, FormsModule, DsfrFormFieldsetElementDirective, ], template: "<dsfr-fieldset legend=\"Nom\" [legendSrOnly]=\"true\">\n <ng-container *ngIf=\"country\">\n <dsfr-form-select\n *fieldsetElement\n [label]=\"country.label || 'Pays'\"\n [placeHolder]=\"country.placeHolder || 'S\u00E9lectionner une option'\"\n [options]=\"country.options ?? []\"\n [(ngModel)]=\"country.value\"></dsfr-form-select>\n </ng-container>\n <dsfr-form-input\n *fieldsetElement\n [name]=\"lastName.name || 'family-name'\"\n [spellcheck]=\"false\"\n [label]=\"lastName.label || 'Nom'\"\n [autocomplete]=\"'family-name'\"\n [(ngModel)]=\"lastName.value\"></dsfr-form-input>\n <ng-container *ngIf=\"usualName\">\n <dsfr-form-input\n *fieldsetElement\n [name]=\"usualName.name || 'married-name'\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'family-name'\"\n [label]=\"usualName.label || 'Nom d\\'usage'\"\n [hint]=\"usualName.hint || 'Ancien nom...'\"\n [(ngModel)]=\"usualName.value\"></dsfr-form-input>\n </ng-container>\n <ng-container *ngIf=\"!noFirstName\">\n <ng-container *ngFor=\"let item of firstNames; let index = index\">\n <dsfr-form-input\n *fieldsetElement\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"noFirstName\">\n <dsfr-fieldset *fieldsetElement legend=\"Pr\u00E9nom(s)\" [legendSrOnly]=\"true\">\n <ng-container *ngFor=\"let item of firstNames; let index = index\">\n <ng-container *ngIf=\"index === 0\">\n <dsfr-form-input\n *fieldsetElement\n [disabled]=\"item.disabled || noFirstNameModel === true\"\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n <ng-container *ngIf=\"index > 0\">\n <dsfr-form-input\n *fieldsetElement\n [disabled]=\"item.disabled || noFirstNameModel === true\"\n [name]=\"item.name || 'given-name' + index\"\n [spellcheck]=\"false\"\n [autocomplete]=\"'given-name'\"\n [label]=\"item.label || 'Pr\u00E9nom'\"\n inputWrapMode=\"action\"\n [buttonIcon]=\"index !== 0 ? 'fr-icon-delete-line' : undefined\"\n buttonVariant=\"tertiary\"\n (buttonSelect)=\"onDeleteFirstNameInput(index)\"\n [(ngModel)]=\"item.value\"></dsfr-form-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"addFirstName\">\n <dsfr-button\n *fieldsetElement\n label=\"Ajouter un pr\u00E9nom\"\n iconPosition=\"left\"\n variant=\"tertiary\"\n size=\"SM\"\n icon=\"fr-icon-add-line\"\n [disabled]=\"noFirstNameModel === true\"\n (click)=\"onAddFirstNameInput()\"></dsfr-button>\n </ng-container>\n\n <dsfr-form-checkbox\n *fieldsetElement\n [small]=\"true\"\n name=\"firstname-disabled\"\n label=\"Je n'ai pas de pr\u00E9nom\"\n [(ngModel)]=\"noFirstNameModel\"></dsfr-form-checkbox>\n </dsfr-fieldset>\n </ng-container>\n</dsfr-fieldset>\n" }] }], propDecorators: { legend: [{ type: Input }], lastName: [{ type: Input, args: [{ required: true }] }], usualName: [{ type: Input }], firstNames: [{ type: Input, args: [{ required: true }] }], noFirstName: [{ type: Input }], addFirstName: [{ type: Input }], country: [{ type: Input }], addFirstNameSelect: [{ type: Output }], deleteFirstNameSelect: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvcGF0dGVybnMvbmFtZS9uYW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9wYXR0ZXJucy9uYW1lL25hbWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLGdDQUFnQyxFQUNoQyxzQkFBc0IsR0FDdkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFvQmxFLE1BQU0sT0FBTyxpQkFBaUI7SUFoQjlCO1FBcUNFOztXQUVHO1FBQ00sZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFN0I7O1dBRUc7UUFDTSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQU85Qjs7V0FFRztRQUNPLHVCQUFrQixHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhFOztXQUVHO1FBQ08sMEJBQXFCLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7S0FjNUU7SUFUQyxnQkFBZ0I7SUFDaEIsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDOytHQXpEVSxpQkFBaUI7bUdBQWpCLGlCQUFpQixnV0M5QjlCLGc2R0F1RkEsMkNEbkVJLFlBQVksZ1FBQ1oseUJBQXlCLGtHQUN6QixzQkFBc0Isa0hBQ3RCLHlCQUF5QixpTEFDekIsbUJBQW1CLGtYQUNuQix1QkFBdUIsZ1FBQ3ZCLFdBQVcsK1ZBQ1gsZ0NBQWdDOzs0RkFHdkIsaUJBQWlCO2tCQWhCN0IsU0FBUzsrQkFDRSxXQUFXLGlCQUVOLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1oseUJBQXlCO3dCQUN6QixzQkFBc0I7d0JBQ3RCLHlCQUF5Qjt3QkFDekIsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLFdBQVc7d0JBQ1gsZ0NBQWdDO3FCQUNqQzs4QkFNUSxNQUFNO3NCQUFkLEtBQUs7Z0JBS3FCLFFBQVE7c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUtoQixTQUFTO3NCQUFqQixLQUFLO2dCQUtxQixVQUFVO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFLaEIsV0FBVztzQkFBbkIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBS0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEc2ZyQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBEc2ZyRm9ybUNoZWNrYm94Q29tcG9uZW50LFxuICBEc2ZyRm9ybUZpZWxkc2V0Q29tcG9uZW50LFxuICBEc2ZyRm9ybUZpZWxkc2V0RWxlbWVudERpcmVjdGl2ZSxcbiAgRHNmckZvcm1JbnB1dENvbXBvbmVudCxcbn0gZnJvbSAnLi4vLi4vZm9ybXMnO1xuaW1wb3J0IHsgRHNmckZvcm1TZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9mb3Jtcy9mb3JtLXNlbGVjdCc7XG5pbXBvcnQgeyBEc2ZySW5wdXRUZXh0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9pbnB1dC5tb2RlbCc7XG5pbXBvcnQgeyBEc2ZyU2VsZWN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9zZWxlY3QubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkc2ZyLW5hbWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmFtZS5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRHNmckZvcm1GaWVsZHNldENvbXBvbmVudCxcbiAgICBEc2ZyRm9ybUlucHV0Q29tcG9uZW50LFxuICAgIERzZnJGb3JtQ2hlY2tib3hDb21wb25lbnQsXG4gICAgRHNmckJ1dHRvbkNvbXBvbmVudCxcbiAgICBEc2ZyRm9ybVNlbGVjdENvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEc2ZyRm9ybUZpZWxkc2V0RWxlbWVudERpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRHNmck5hbWVDb21wb25lbnQge1xuICAvKipcbiAgICogTMOpZ2VuZGUgZHUgZmllbGRzZXQuXG4gICAqL1xuICBASW5wdXQoKSBsZWdlbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YSBkdSBjaGFtcCBuYW1lLlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgbGFzdE5hbWU6IERzZnJJbnB1dFRleHQ7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkJ2luZGlxdWVyIHVuIG5vbSBkJ3VzYWdlIChvcHRpb25uZWwpLlxuICAgKi9cbiAgQElucHV0KCkgdXN1YWxOYW1lOiBEc2ZySW5wdXRUZXh0O1xuXG4gIC8qKlxuICAgKiBEYXRhIGR1IGNoYW1wIGZpcnN0bmFtZS5cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGZpcnN0TmFtZXM6IERzZnJJbnB1dFRleHRbXTtcblxuICAvKipcbiAgICogUGVybWV0IGQnYWZmaWNoZXIgbCdvcHRpb24gXCJKZSBuJ2FpIHBhcyBkZSBwcsOpbm9tXCIuXG4gICAqL1xuICBASW5wdXQoKSBub0ZpcnN0TmFtZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQZXJtZXQgZCdhZmZpY2hlciB1biBib3V0b24gcXVpIGFqb3V0ZSB1biBub3V2ZWF1IGNoYW1wIGRlIGRlIHNhaXNpIHBvdXIgdW4gcHLDqW5vbSBhZGRpdGlvbm5lbC5cbiAgICovXG4gIEBJbnB1dCgpIGFkZEZpcnN0TmFtZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEYXRhIGR1IHNlbGVjdGV1ciBkZSBwYXlzIChvcHRpb25uZWwpLlxuICAgKi9cbiAgQElucHV0KCkgY291bnRyeTogRHNmclNlbGVjdDtcblxuICAvKipcbiAgICogTm90aWZpZSBxdWUgbCd1dGlsaXNhdGV1ciBhIGNsaXF1w6kgc3VyIGxlIGJvdXRvbiBkJ2Fqb3V0IGRlIHByw6lub20uXG4gICAqL1xuICBAT3V0cHV0KCkgYWRkRmlyc3ROYW1lU2VsZWN0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogTm90aWZpZSBsYSBzdXBwcmVzc2lvbiBkJ3VuIHByw6lub20gYWRkaXRpb25uZWwgKGxlIHRhYmxlYXUgJ2ZpcnN0bmFtZXMnIGRldnJhaXQgw6p0cmUgbWlzIMOgIGpvdXIgZW4gY29uc8OpcXVlbmNlKS5cbiAgICovXG4gIEBPdXRwdXQoKSBkZWxldGVGaXJzdE5hbWVTZWxlY3Q6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm9GaXJzdE5hbWVNb2RlbDogYm9vbGVhbjtcblxuICAvKiogQGludGVybmFsICovXG4gIG9uQWRkRmlyc3ROYW1lSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRGaXJzdE5hbWVTZWxlY3QuZW1pdCgpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBvbkRlbGV0ZUZpcnN0TmFtZUlucHV0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGV0ZUZpcnN0TmFtZVNlbGVjdC5lbWl0KGluZGV4KTtcbiAgfVxufVxuIiwiPGRzZnItZmllbGRzZXQgbGVnZW5kPVwiTm9tXCIgW2xlZ2VuZFNyT25seV09XCJ0cnVlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb3VudHJ5XCI+XG4gICAgPGRzZnItZm9ybS1zZWxlY3RcbiAgICAgICpmaWVsZHNldEVsZW1lbnRcbiAgICAgIFtsYWJlbF09XCJjb3VudHJ5LmxhYmVsIHx8ICdQYXlzJ1wiXG4gICAgICBbcGxhY2VIb2xkZXJdPVwiY291bnRyeS5wbGFjZUhvbGRlciB8fCAnU8OpbGVjdGlvbm5lciB1bmUgb3B0aW9uJ1wiXG4gICAgICBbb3B0aW9uc109XCJjb3VudHJ5Lm9wdGlvbnMgPz8gW11cIlxuICAgICAgWyhuZ01vZGVsKV09XCJjb3VudHJ5LnZhbHVlXCI+PC9kc2ZyLWZvcm0tc2VsZWN0PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRzZnItZm9ybS1pbnB1dFxuICAgICpmaWVsZHNldEVsZW1lbnRcbiAgICBbbmFtZV09XCJsYXN0TmFtZS5uYW1lIHx8ICdmYW1pbHktbmFtZSdcIlxuICAgIFtzcGVsbGNoZWNrXT1cImZhbHNlXCJcbiAgICBbbGFiZWxdPVwibGFzdE5hbWUubGFiZWwgfHwgJ05vbSdcIlxuICAgIFthdXRvY29tcGxldGVdPVwiJ2ZhbWlseS1uYW1lJ1wiXG4gICAgWyhuZ01vZGVsKV09XCJsYXN0TmFtZS52YWx1ZVwiPjwvZHNmci1mb3JtLWlucHV0PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidXN1YWxOYW1lXCI+XG4gICAgPGRzZnItZm9ybS1pbnB1dFxuICAgICAgKmZpZWxkc2V0RWxlbWVudFxuICAgICAgW25hbWVdPVwidXN1YWxOYW1lLm5hbWUgfHwgJ21hcnJpZWQtbmFtZSdcIlxuICAgICAgW3NwZWxsY2hlY2tdPVwiZmFsc2VcIlxuICAgICAgW2F1dG9jb21wbGV0ZV09XCInZmFtaWx5LW5hbWUnXCJcbiAgICAgIFtsYWJlbF09XCJ1c3VhbE5hbWUubGFiZWwgfHwgJ05vbSBkXFwndXNhZ2UnXCJcbiAgICAgIFtoaW50XT1cInVzdWFsTmFtZS5oaW50IHx8ICdBbmNpZW4gbm9tLi4uJ1wiXG4gICAgICBbKG5nTW9kZWwpXT1cInVzdWFsTmFtZS52YWx1ZVwiPjwvZHNmci1mb3JtLWlucHV0PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFub0ZpcnN0TmFtZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlyc3ROYW1lczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgIDxkc2ZyLWZvcm0taW5wdXRcbiAgICAgICAgKmZpZWxkc2V0RWxlbWVudFxuICAgICAgICBbbmFtZV09XCJpdGVtLm5hbWUgfHwgJ2dpdmVuLW5hbWUnICsgaW5kZXhcIlxuICAgICAgICBbc3BlbGxjaGVja109XCJmYWxzZVwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiJ2dpdmVuLW5hbWUnXCJcbiAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWwgfHwgJ1Byw6lub20nXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCI+PC9kc2ZyLWZvcm0taW5wdXQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9GaXJzdE5hbWVcIj5cbiAgICA8ZHNmci1maWVsZHNldCAqZmllbGRzZXRFbGVtZW50IGxlZ2VuZD1cIlByw6lub20ocylcIiBbbGVnZW5kU3JPbmx5XT1cInRydWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlyc3ROYW1lczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZGV4ID09PSAwXCI+XG4gICAgICAgICAgPGRzZnItZm9ybS1pbnB1dFxuICAgICAgICAgICAgKmZpZWxkc2V0RWxlbWVudFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgfHwgbm9GaXJzdE5hbWVNb2RlbCA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICBbbmFtZV09XCJpdGVtLm5hbWUgfHwgJ2dpdmVuLW5hbWUnICsgaW5kZXhcIlxuICAgICAgICAgICAgW3NwZWxsY2hlY2tdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F1dG9jb21wbGV0ZV09XCInZ2l2ZW4tbmFtZSdcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWwgfHwgJ1Byw6lub20nXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiPjwvZHNmci1mb3JtLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZGV4ID4gMFwiPlxuICAgICAgICAgIDxkc2ZyLWZvcm0taW5wdXRcbiAgICAgICAgICAgICpmaWVsZHNldEVsZW1lbnRcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkIHx8IG5vRmlyc3ROYW1lTW9kZWwgPT09IHRydWVcIlxuICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5uYW1lIHx8ICdnaXZlbi1uYW1lJyArIGluZGV4XCJcbiAgICAgICAgICAgIFtzcGVsbGNoZWNrXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiJ2dpdmVuLW5hbWUnXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsIHx8ICdQcsOpbm9tJ1wiXG4gICAgICAgICAgICBpbnB1dFdyYXBNb2RlPVwiYWN0aW9uXCJcbiAgICAgICAgICAgIFtidXR0b25JY29uXT1cImluZGV4ICE9PSAwID8gJ2ZyLWljb24tZGVsZXRlLWxpbmUnIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIGJ1dHRvblZhcmlhbnQ9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAoYnV0dG9uU2VsZWN0KT1cIm9uRGVsZXRlRmlyc3ROYW1lSW5wdXQoaW5kZXgpXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiPjwvZHNmci1mb3JtLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWRkRmlyc3ROYW1lXCI+XG4gICAgICAgIDxkc2ZyLWJ1dHRvblxuICAgICAgICAgICpmaWVsZHNldEVsZW1lbnRcbiAgICAgICAgICBsYWJlbD1cIkFqb3V0ZXIgdW4gcHLDqW5vbVwiXG4gICAgICAgICAgaWNvblBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgdmFyaWFudD1cInRlcnRpYXJ5XCJcbiAgICAgICAgICBzaXplPVwiU01cIlxuICAgICAgICAgIGljb249XCJmci1pY29uLWFkZC1saW5lXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibm9GaXJzdE5hbWVNb2RlbCA9PT0gdHJ1ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQWRkRmlyc3ROYW1lSW5wdXQoKVwiPjwvZHNmci1idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGRzZnItZm9ybS1jaGVja2JveFxuICAgICAgICAqZmllbGRzZXRFbGVtZW50XG4gICAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICAgICAgbmFtZT1cImZpcnN0bmFtZS1kaXNhYmxlZFwiXG4gICAgICAgIGxhYmVsPVwiSmUgbidhaSBwYXMgZGUgcHLDqW5vbVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwibm9GaXJzdE5hbWVNb2RlbFwiPjwvZHNmci1mb3JtLWNoZWNrYm94PlxuICAgIDwvZHNmci1maWVsZHNldD5cbiAgPC9uZy1jb250YWluZXI+XG48L2RzZnItZmllbGRzZXQ+XG4iXX0=