UNPKG

@edugouvfr/ngx-dsfr-ext

Version:

NgxDsfrExt est une extension au package @edugouvfr/ngx-dsfr (portage Angular des éléments DSFR)

265 lines 37.7 kB
import { ChangeDetectorRef, Component, ContentChild, EventEmitter, Input, Output, forwardRef, inject, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { DefaultValueAccessorComponent, DsfrI18nService, DsfrSeverityConst, Language, newUniqueId, } from '@edugouvfr/ngx-dsfr'; import { DsfrSelectionModeConst } from '../../models/selection-mode.type'; import { MESSAGES_EN } from './i18n/messages.en'; import { MESSAGES_FR } from './i18n/messages.fr'; import * as i0 from "@angular/core"; export class AbstractSelectComponent extends DefaultValueAccessorComponent { /** @internal */ constructor() { super(); /** La liste prend une taille fluide selon la taille des options qu'elle contient (par défaut : taille du select) */ this.autoWidthDropdown = false; /** Hauteur maximale avant le scroll sur la liste déroulante. */ this.scrollHeight = '224px'; /** Nombre max. d'options sélectionnées affichées */ this.maxDisplayOptions = 5; /** Afficher la case à cocher tout sélectionner */ this.showSelectAll = false; /** Afficher la barre de recherche (filtre sur les options) */ this.showSearch = false; /** Afficher un bouton pour vider le champ de la barre de recherche */ this.showClearSearch = false; /** Afficher un état de chargement */ this.loading = false; /** Activer le virtual scroll */ this.virtualScroll = false; /** Surcharger la hauteur d'un item dans le cas du virtual scroll. Par défaut 32px. */ this.virtualScrollItemHeight = 32; /** * Cache le label visuellement en le laissant disponible aux lecteurs d'écran. */ this.labelSrOnly = false; /** Liste d'options sélectionnée modifiée */ this.selectionChange = new EventEmitter(); /** @internal texte pour filtrer */ this.searchText = ''; /** @internal liste des options sélectionnées */ this.selectedOptions = []; /** @internal toutes les options visibles sélectionnées */ this.isCheckedSelectAll = false; /** @internal afficher le dropdown (recherche et liste déroulante) */ this.displayDropdown = false; /** @internal liste d'options filtrées */ this.optionsFilter = []; /** @internal Sauvegarder l'index de la premiere option sélectionnée pour la gestion du focus */ this.indexFirstSelected = null; /**@internal le mode de sélection est single */ this.isSingleMode = false; /* @internal */ this.cd = inject(ChangeDetectorRef); /** @internal Afin de pouvoir utiliser le type dans l'HTML*/ this.severityConst = DsfrSeverityConst; /** @internal */ this._selectionMode = DsfrSelectionModeConst.CHECKBOX; /** @internal compareWith reprise de l'implémentation angular SelectControlValueAccessor */ this._compareWith = Object.is; this.i18n = inject(DsfrI18nService); this.i18n.extendsLabelsBundle(Language.EN, MESSAGES_EN); this.i18n.extendsLabelsBundle(Language.FR, MESSAGES_FR); } /** @internal */ get options() { return this._options; } /** @internal */ get showCheckboxes() { return this.selectionMode === DsfrSelectionModeConst.CHECKBOX; } /** @internal */ get selectionMode() { return this._selectionMode; } /** * Positionne un message d'erreur * @deprecated utiliser message et messageSeverity */ set error(value) { this.message = value; this.messageSeverity = DsfrSeverityConst.ERROR; } /** * Positionne un message de validation * @deprecated utiliser message et messageSeverity */ set valid(value) { this.message = value; this.messageSeverity = DsfrSeverityConst.SUCCESS; } /** Liste des options disponibles. */ set options(val) { this._options = val; this.optionsFilter = this.options ?? []; if (this.value && this.value.length > 0) { this.writeValue(this.value); } } /** Mode de sélection. Checkbox, multiple ou single */ set selectionMode(mode) { this.setSelectionMode(mode); } /** Personnalisation de la comparaison. Fonction à 2 arguments: val1 et val2 (les values des deux options). Si compareWith est fourni, sélection de l'option selon le retour de la fonction.*/ set compareWith(fn) { if (typeof fn !== 'function') { throw Error('`compareWith` must be a function.'); } this._compareWith = fn; } ngOnInit() { this.selectId ??= newUniqueId(); } /** @internal */ getLabelKeyOptionsSelected() { return this.selectedOptions.length === 1 ? 'multiselect.selected' : 'multiselect.selectedPlural'; } /** @internal */ setDisabledState(isDisabled) { this.disabled = isDisabled; this.cd.markForCheck(); } /** * Réinitialiser le champ de recherche @internal */ resetSearchInput() { if (this.showSearch) { this.searchText = ''; this.onSearch(); } else { this.value = this.isSingleMode ? undefined : []; this.selectedOptions = []; } } /** * Ouverture du multiselect sur arrow down * @internal */ onButtonKeyDown(e) { if ((e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') && !this.displayDropdown) { if (e.target.className.includes('fr-tag')) return; // dans le cas des clearableOptions, suppression du tag e.preventDefault(); this.toggleDropdown(); return; } if ((e.key === 'ArrowUp' || e.key === 'Enter' || e.key === 'Escape') && this.displayDropdown) { this.toggleDropdown(); return; } } /** @internal */ toggleDropdown(e) { if (e && e.target && e.target.className.includes('fr-tag ')) { return; } this.displayDropdown = !this.displayDropdown; } /** @internal */ hide() { this.displayDropdown = false; if (this.clearSearchOnHide) { this.searchText = ''; this.optionsFilter = this.options && this.options.length ? this.options : []; } } /** @internal **/ setSelectionMode(mode) { this._selectionMode = mode ? mode : DsfrSelectionModeConst.CHECKBOX; this.isSingleMode = this.selectionMode === DsfrSelectionModeConst.SINGLE; if (this.isSingleMode) { this.showSelectAll = false; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AbstractSelectComponent, isStandalone: true, selector: "ng-component", inputs: { autoWidthDropdown: "autoWidthDropdown", clearableOptions: "clearableOptions", selectId: "selectId", scrollHeight: "scrollHeight", label: "label", hint: "hint", maxDisplayOptions: "maxDisplayOptions", maxSelectedOptions: "maxSelectedOptions", showSelectAll: "showSelectAll", appendTo: "appendTo", showSearch: "showSearch", showClearSearch: "showClearSearch", placeHolder: "placeHolder", searchMessage: "searchMessage", noResultsMessage: "noResultsMessage", loading: "loading", message: "message", messageSeverity: "messageSeverity", virtualScroll: "virtualScroll", virtualScrollItemHeight: "virtualScrollItemHeight", zIndex: "zIndex", clearSearchOnHide: "clearSearchOnHide", ariaInvalid: "ariaInvalid", ariaRequired: "ariaRequired", labelSrOnly: "labelSrOnly", error: "error", valid: "valid", options: "options", selectionMode: "selectionMode", compareWith: "compareWith" }, outputs: { selectionChange: "selectionChange" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AbstractSelectComponent), multi: true, }, ], queries: [{ propertyName: "maxDisplayOptionsTemplate", first: true, predicate: ["maxDisplayOptionsTemplate"], descendants: true, static: true }, { propertyName: "selectedOptionTemplate", first: true, predicate: ["selectedOptionTemplate"], descendants: true, static: true }, { propertyName: "optionTemplate", first: true, predicate: ["optionTemplate"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [".dsfrx-multiselect{display:block;position:relative}.dsfrx-multiselect .fr-select{min-height:2.5rem;text-align:left;cursor:pointer;font-weight:400}.dsfrx-multiselect .fr-select:hover{background-color:var(--background-contrast-grey)}.dsfrx-multiselect .fr-select--disabled{pointer-events:none;color:var(--text-disabled-grey);box-shadow:inset 0 -2px 0 0 var(--border-disabled-grey);--data-uri-svg: url(\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' viewBox='0 0 24 24' ><path fill='%23929292' d='M12,13.1l5-4.9l1.4,1.4L12,15.9L5.6,9.5l1.4-1.4L12,13.1z'/></svg>\");background-image:var(--data-uri-svg)}.dsfrx-multiselect__toolbar{display:block;padding:.5rem .75rem;border-bottom:1px solid var(--background-contrast-grey)}.dsfrx-multiselect__toolbar input[type=search]::-webkit-search-cancel-button{display:none}.dsfrx-multiselect__toolbar .fr-input-wrap{flex-grow:1}.dsfrx-multiselect__toolbar .fr-btn--select-all{text-align:center;display:block;margin:0;min-width:100%;margin-bottom:.75rem}.dsfrx-multiselect__list{overflow:auto;list-style:none;background-color:var(--background-overlap-grey);margin:0;line-height:1.5rem;color:var(--text-title-grey);text-align:left;padding:0;max-height:224px}.dsfrx-multiselect__list--has-viewport{overflow:hidden}.dsfrx-multiselect__list .viewport{height:224px}.dsfrx-multiselect__list--empty p{padding:.5rem 1rem 0rem;background-color:var(--background-default-grey);margin:0}.dsfrx-multiselect--placeholder{color:var(--text-default-grey)}.dsfrx-select>.fr-label{margin-bottom:.5rem}.fr-label+.dsfrx-multiselect{margin-top:.5rem}.dsfrx-multiselect .fr-tags-group{margin:0;gap:.5rem 0}.dsfrx-multiselect .fr-tags-group li{line-height:1rem}.dsfrx-multiselect .fr-tags-group .fr-tag{margin-bottom:0}dsfr-ext-multiselect .fr-select-group--error label span,dsfr-ext-multiselect .fr-select-group--valid label span,dsfrx-treeselect .fr-select-group--error label span,dsfrx-treeselect .fr-select-group--valid label span{color:var(--text-label-grey)}@container (min-width: 500px){.dsfrx-multiselect .dsfrx-multiselect__toolbar{display:flex;padding:.5rem;justify-content:space-between;align-items:center}.dsfrx-multiselect .dsfrx-multiselect__toolbar dsfr-button{width:initial}.dsfrx-multiselect .dsfrx-multiselect__toolbar .fr-btn--select-all{margin:0;min-width:10rem;margin-right:1rem}}\n"] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractSelectComponent, decorators: [{ type: Component, args: [{ template: '', standalone: true, imports: [], providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AbstractSelectComponent), multi: true, }, ], styles: [".dsfrx-multiselect{display:block;position:relative}.dsfrx-multiselect .fr-select{min-height:2.5rem;text-align:left;cursor:pointer;font-weight:400}.dsfrx-multiselect .fr-select:hover{background-color:var(--background-contrast-grey)}.dsfrx-multiselect .fr-select--disabled{pointer-events:none;color:var(--text-disabled-grey);box-shadow:inset 0 -2px 0 0 var(--border-disabled-grey);--data-uri-svg: url(\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' viewBox='0 0 24 24' ><path fill='%23929292' d='M12,13.1l5-4.9l1.4,1.4L12,15.9L5.6,9.5l1.4-1.4L12,13.1z'/></svg>\");background-image:var(--data-uri-svg)}.dsfrx-multiselect__toolbar{display:block;padding:.5rem .75rem;border-bottom:1px solid var(--background-contrast-grey)}.dsfrx-multiselect__toolbar input[type=search]::-webkit-search-cancel-button{display:none}.dsfrx-multiselect__toolbar .fr-input-wrap{flex-grow:1}.dsfrx-multiselect__toolbar .fr-btn--select-all{text-align:center;display:block;margin:0;min-width:100%;margin-bottom:.75rem}.dsfrx-multiselect__list{overflow:auto;list-style:none;background-color:var(--background-overlap-grey);margin:0;line-height:1.5rem;color:var(--text-title-grey);text-align:left;padding:0;max-height:224px}.dsfrx-multiselect__list--has-viewport{overflow:hidden}.dsfrx-multiselect__list .viewport{height:224px}.dsfrx-multiselect__list--empty p{padding:.5rem 1rem 0rem;background-color:var(--background-default-grey);margin:0}.dsfrx-multiselect--placeholder{color:var(--text-default-grey)}.dsfrx-select>.fr-label{margin-bottom:.5rem}.fr-label+.dsfrx-multiselect{margin-top:.5rem}.dsfrx-multiselect .fr-tags-group{margin:0;gap:.5rem 0}.dsfrx-multiselect .fr-tags-group li{line-height:1rem}.dsfrx-multiselect .fr-tags-group .fr-tag{margin-bottom:0}dsfr-ext-multiselect .fr-select-group--error label span,dsfr-ext-multiselect .fr-select-group--valid label span,dsfrx-treeselect .fr-select-group--error label span,dsfrx-treeselect .fr-select-group--valid label span{color:var(--text-label-grey)}@container (min-width: 500px){.dsfrx-multiselect .dsfrx-multiselect__toolbar{display:flex;padding:.5rem;justify-content:space-between;align-items:center}.dsfrx-multiselect .dsfrx-multiselect__toolbar dsfr-button{width:initial}.dsfrx-multiselect .dsfrx-multiselect__toolbar .fr-btn--select-all{margin:0;min-width:10rem;margin-right:1rem}}\n"] }] }], ctorParameters: () => [], propDecorators: { maxDisplayOptionsTemplate: [{ type: ContentChild, args: ['maxDisplayOptionsTemplate', { static: true }] }], selectedOptionTemplate: [{ type: ContentChild, args: ['selectedOptionTemplate', { static: true }] }], optionTemplate: [{ type: ContentChild, args: ['optionTemplate', { static: true }] }], autoWidthDropdown: [{ type: Input }], clearableOptions: [{ type: Input }], selectId: [{ type: Input }], scrollHeight: [{ type: Input }], label: [{ type: Input }], hint: [{ type: Input }], maxDisplayOptions: [{ type: Input }], maxSelectedOptions: [{ type: Input }], showSelectAll: [{ type: Input }], appendTo: [{ type: Input }], showSearch: [{ type: Input }], showClearSearch: [{ type: Input }], placeHolder: [{ type: Input }], searchMessage: [{ type: Input }], noResultsMessage: [{ type: Input }], loading: [{ type: Input }], message: [{ type: Input }], messageSeverity: [{ type: Input }], virtualScroll: [{ type: Input }], virtualScrollItemHeight: [{ type: Input }], zIndex: [{ type: Input }], clearSearchOnHide: [{ type: Input }], ariaInvalid: [{ type: Input }], ariaRequired: [{ type: Input }], labelSrOnly: [{ type: Input }], selectionChange: [{ type: Output }], error: [{ type: Input }], valid: [{ type: Input }], options: [{ type: Input }], selectionMode: [{ type: Input }], compareWith: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWV4dC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL2Fic3RyYWN0LXNlbGVjdC9hYnN0cmFjdC1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixVQUFVLEVBQ1YsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsZUFBZSxFQUdmLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsV0FBVyxHQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFxQixzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBZWpELE1BQU0sT0FBZ0IsdUJBQ3BCLFNBQVEsNkJBQXNEO0lBc0k5RCxnQkFBZ0I7SUFDaEI7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQTVIVixvSEFBb0g7UUFDM0csc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBUW5DLGdFQUFnRTtRQUN2RCxpQkFBWSxHQUFXLE9BQU8sQ0FBQztRQVF4QyxvREFBb0Q7UUFDM0Msc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBSy9CLGtEQUFrRDtRQUN6QyxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUsvQiw4REFBOEQ7UUFDckQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUU1QixzRUFBc0U7UUFDN0Qsb0JBQWUs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O2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFtRU0sS0FBSztzQkFBakIsS0FBSztnQkFTTyxLQUFLO3NCQUFqQixLQUFLO2dCQU9GLE9BQU87c0JBRFYsS0FBSztnQkFXRixhQUFhO3NCQURoQixLQUFLO2dCQVFGLFdBQVc7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBEZWZhdWx0VmFsdWVBY2Nlc3NvckNvbXBvbmVudCxcbiAgRHNmckkxOG5TZXJ2aWNlLFxuICBEc2ZyT3B0aW9uLFxuICBEc2ZyU2V2ZXJpdHksXG4gIERzZnJTZXZlcml0eUNvbnN0LFxuICBMYW5ndWFnZSxcbiAgbmV3VW5pcXVlSWQsXG59IGZyb20gJ0BlZHVnb3V2ZnIvbmd4LWRzZnInO1xuaW1wb3J0IHsgRHNmclNlbGVjdGlvbk1vZGUsIERzZnJTZWxlY3Rpb25Nb2RlQ29uc3QgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VsZWN0aW9uLW1vZGUudHlwZSc7XG5pbXBvcnQgeyBNRVNTQUdFU19FTiB9IGZyb20gJy4vaTE4bi9tZXNzYWdlcy5lbic7XG5pbXBvcnQgeyBNRVNTQUdFU19GUiB9IGZyb20gJy4vaTE4bi9tZXNzYWdlcy5mcic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogJycsXG4gIHN0eWxlVXJsczogWycuL2Fic3RyYWN0LXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBYnN0cmFjdFNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNlbGVjdENvbXBvbmVudDxUPlxuICBleHRlbmRzIERlZmF1bHRWYWx1ZUFjY2Vzc29yQ29tcG9uZW50PGFueVtdIHwgYW55IHwgdW5kZWZpbmVkPlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICAvKiogVGVtcGxhdGUgcG91ciBsJ2Vuc2VtYmxlIGRlcyB2YWxldXJzIHPDqWxlY3Rpb25uw6llcyBsb3JzcXVlIG1heERpc3BsYXlPcHRpb25zIGVzdCBhdHRlaW50ICovXG4gIEBDb250ZW50Q2hpbGQoJ21heERpc3BsYXlPcHRpb25zVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtYXhEaXNwbGF5T3B0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKiBUZW1wbGF0ZSBwb3VyIGNoYXF1ZSB2YWxldXIgc8OpbGVjdGlvbm7DqWUgKi9cbiAgQENvbnRlbnRDaGlsZCgnc2VsZWN0ZWRPcHRpb25UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHNlbGVjdGVkT3B0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqIFRlbXBsYXRlIGRlcyBsYWJlbHMgZGVzIG9wdGlvbnMgKi9cbiAgQENvbnRlbnRDaGlsZCgnb3B0aW9uVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBvcHRpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogTGEgbGlzdGUgcHJlbmQgdW5lIHRhaWxsZSBmbHVpZGUgc2Vsb24gbGEgdGFpbGxlIGRlcyBvcHRpb25zIHF1J2VsbGUgY29udGllbnQgKHBhciBkw6lmYXV0IDogdGFpbGxlIGR1IHNlbGVjdCkgKi9cbiAgQElucHV0KCkgYXV0b1dpZHRoRHJvcGRvd24gPSBmYWxzZTtcblxuICAvKiogTGVzIG9wdGlvbnMgc8OpbGVjdGlvbm7DqWVzIHNvbnQgYWZmaWNow6llcyBzb3VzIGZvcm1lIGRlIHRhZ3Mgc3VwcHJpbWFibGVzICovXG4gIEBJbnB1dCgpIGNsZWFyYWJsZU9wdGlvbnM6IGJvb2xlYW47XG5cbiAgLyoqIElkIGR1IGNvbXBvc2FudCwgZ8OpbsOpcsOpIHBhciBkw6lmYXV0ICovXG4gIEBJbnB1dCgpIHNlbGVjdElkOiBzdHJpbmc7XG5cbiAgLyoqIEhhdXRldXIgbWF4aW1hbGUgYXZhbnQgbGUgc2Nyb2xsIHN1ciBsYSBsaXN0ZSBkw6lyb3VsYW50ZS4gKi9cbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0OiBzdHJpbmcgPSAnMjI0cHgnO1xuXG4gIC8qKiBMYWJlbCBkdSBjaGFtcCBkZSBzw6lsZWN0aW9uIChwcmlvcml0YWlyZSBzdXIgbGUgc2xvdCBsYWJlbCkgKi9cbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcblxuICAvKiogVGV4dGUgZGUgZGVzY3JpcHRpb24gYWRkaXRpb25uZWwgKi9cbiAgQElucHV0KCkgaGludDogc3RyaW5nO1xuXG4gIC8qKiBOb21icmUgbWF4LiBkJ29wdGlvbnMgc8OpbGVjdGlvbm7DqWVzIGFmZmljaMOpZXMgKi9cbiAgQElucHV0KCkgbWF4RGlzcGxheU9wdGlvbnMgPSA1O1xuXG4gIC8qKiBOb21icmUgbWF4LiBkJ29wdGlvbnMgc8OpbGVjdGlvbm5hYmxlcyAqL1xuICBASW5wdXQoKSBtYXhTZWxlY3RlZE9wdGlvbnM6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKiogQWZmaWNoZXIgbGEgY2FzZSDDoCBjb2NoZXIgdG91dCBzw6lsZWN0aW9ubmVyICovXG4gIEBJbnB1dCgpIHNob3dTZWxlY3RBbGwgPSBmYWxzZTtcblxuICAvKiogQXR0YWNoZXIgbCfDqWzDqW1lbnQgZGUgbGlzdGUgZMOpcm91bGFudGUgYXUgJ2JvZHknIG91IGEgdW4gY29udGFpbmVyIChyw6lmLiB2ZXJzIHVuIMOpbMOpbWVudCAjZGl2IG91IG5vbSBkZSBsYSBjbGFzc2UgZHUgcGFyZW50KSAqL1xuICBASW5wdXQoKSBhcHBlbmRUbzogJ2JvZHknIHwgSFRNTEVsZW1lbnQgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIEFmZmljaGVyIGxhIGJhcnJlIGRlIHJlY2hlcmNoZSAoZmlsdHJlIHN1ciBsZXMgb3B0aW9ucykgKi9cbiAgQElucHV0KCkgc2hvd1NlYXJjaCA9IGZhbHNlO1xuXG4gIC8qKiBBZmZpY2hlciB1biBib3V0b24gcG91ciB2aWRlciBsZSBjaGFtcCBkZSBsYSBiYXJyZSBkZSByZWNoZXJjaGUgKi9cbiAgQElucHV0KCkgc2hvd0NsZWFyU2VhcmNoID0gZmFsc2U7XG5cbiAgLyoqIFBsYWNlaG9sZGVyIHBvdXIgbGUgY2hhbXAgZGUgc8OpbGVjdGlvbiAqL1xuICBASW5wdXQoKSBwbGFjZUhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBQbGFjZWhvbGRlciBwb3VyIGxlIGNoYW1wIGRlIHJlY2hlcmNoZSAqL1xuICBASW5wdXQoKSBzZWFyY2hNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFBsYWNlaG9sZGVyIHBvdXIgbGUgY2hhbXAgZGUgcmVjaGVyY2hlICovXG4gIEBJbnB1dCgpIG5vUmVzdWx0c01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogQWZmaWNoZXIgdW4gw6l0YXQgZGUgY2hhcmdlbWVudCAqL1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgZCdpbmZvcm1hdGlvbiBsacOpIGF1IGNvbXBvc2FudFxuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXByw6lzZW50ZSBsYSBzw6l2w6lyaXTDqSBkdSBtZXNzYWdlXG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlU2V2ZXJpdHk6IERzZnJTZXZlcml0eTtcblxuICAvKiogQWN0aXZlciBsZSB2aXJ0dWFsIHNjcm9sbCAgKi9cbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBTdXJjaGFyZ2VyIGxhIGhhdXRldXIgZCd1biBpdGVtIGRhbnMgbGUgY2FzIGR1IHZpcnR1YWwgc2Nyb2xsLiBQYXIgZMOpZmF1dCAzMnB4LiAqL1xuICBASW5wdXQoKSB2aXJ0dWFsU2Nyb2xsSXRlbUhlaWdodDogbnVtYmVyID0gMzI7XG5cbiAgLyoqIFByb3ByacOpdMOpIENTUyB6LWluZGV4IGRlIGxhIGxpc3RlLCBwYXIgZMOpZmF1dCBzdXDDqXJpZXVyIGF1eCBjb21wb3NhbnRzICdsaWZ0ZWQnIERTRlIgKi9cbiAgQElucHV0KCkgekluZGV4OiBudW1iZXI7XG5cbiAgLyoqIFZpZGVyIGxlIGNoYW1wIGRlIHJlY2hlcmNoZSBsb3JzcXVlIGxhIGxpc3RlIGVzdCBjYWNow6llICovXG4gIEBJbnB1dCgpIGNsZWFyU2VhcmNoT25IaWRlOiBib29sZWFuO1xuXG4gIC8qKiDwn5GTIENvcnJlc3BvbmQgw6AgbCdhdHRyaWJ1dCBgYXJpYS1pbnZhbGlkYCAqL1xuICBASW5wdXQoKSBhcmlhSW52YWxpZDogYm9vbGVhbjtcblxuICAvKiog8J+RkyBDb3JyZXNwb25kIMOgIGwnYXR0cmlidXQgYGFyaWEtcmVxdWlyZWRgICovXG4gIEBJbnB1dCgpIGFyaWFSZXF1aXJlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2FjaGUgbGUgbGFiZWwgdmlzdWVsbGVtZW50IGVuIGxlIGxhaXNzYW50IGRpc3BvbmlibGUgYXV4IGxlY3RldXJzIGQnw6ljcmFuLlxuICAgKi9cbiAgQElucHV0KCkgbGFiZWxTck9ubHkgPSBmYWxzZTtcblxuICAvKiogTGlzdGUgZCdvcHRpb25zIHPDqWxlY3Rpb25uw6llIG1vZGlmacOpZSAqL1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXSB8IHVuZGVmaW5lZD4oKTtcblxuICAvKiogQGludGVybmFsIHRleHRlIHBvdXIgZmlsdHJlciAqL1xuICBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgLyoqIEBpbnRlcm5hbCBsaXN0ZSBkZXMgb3B0aW9ucyBzw6lsZWN0aW9ubsOpZXMgKi9cbiAgc2VsZWN0ZWRPcHRpb25zOiBUW10gPSBbXTtcblxuICAvKiogQGludGVybmFsIHRvdXRlcyBsZXMgb3B0aW9ucyB2aXNpYmxlcyBzw6lsZWN0aW9ubsOpZXMgKi9cbiAgaXNDaGVja2VkU2VsZWN0QWxsID0gZmFsc2U7XG5cbiAgLyoqIEBpbnRlcm5hbCBhZmZpY2hlciBsZSBkcm9wZG93biAocmVjaGVyY2hlIGV0IGxpc3RlIGTDqXJvdWxhbnRlKSAqL1xuICBkaXNwbGF5RHJvcGRvd24gPSBmYWxzZTtcblxuICAvKiogQGludGVybmFsIGxpc3RlIGQnb3B0aW9ucyBmaWx0csOpZXMgKi9cbiAgb3B0aW9uc0ZpbHRlcjogVFtdID0gW107XG5cbiAgLyoqIEBpbnRlcm5hbCBTYXV2ZWdhcmRlciBsJ2luZGV4IGRlIGxhIHByZW1pZXJlIG9wdGlvbiBzw6lsZWN0aW9ubsOpZSBwb3VyIGxhIGdlc3Rpb24gZHUgZm9jdXMgKi9cbiAgaW5kZXhGaXJzdFNlbGVjdGVkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKipAaW50ZXJuYWwgbGUgbW9kZSBkZSBzw6lsZWN0aW9uIGVzdCBzaW5nbGUgKi9cbiAgaXNTaW5nbGVNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyogQGludGVybmFsICovXG4gIHByb3RlY3RlZCBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqIEBpbnRlcm5hbCAgIEFmaW4gZGUgcG91dm9pciB1dGlsaXNlciBsZSB0eXBlIGRhbnMgbCdIVE1MKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNldmVyaXR5Q29uc3QgPSBEc2ZyU2V2ZXJpdHlDb25zdDtcblxuICAvKiogQGludGVybmFsICovXG4gIHByb3RlY3RlZCBfb3B0aW9uczogVFtdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIF9zZWxlY3Rpb25Nb2RlOiBEc2ZyU2VsZWN0aW9uTW9kZSA9IERzZnJTZWxlY3Rpb25Nb2RlQ29uc3QuQ0hFQ0tCT1g7XG5cbiAgLyoqIEBpbnRlcm5hbCBjb21wYXJlV2l0aCByZXByaXNlIGRlIGwnaW1wbMOpbWVudGF0aW9uIGFuZ3VsYXIgU2VsZWN0Q29udHJvbFZhbHVlQWNjZXNzb3IgKi9cbiAgcHJvdGVjdGVkIF9jb21wYXJlV2l0aDogKG8xOiBhbnksIG8yOiBhbnkpID0+IGJvb2xlYW4gPSBPYmplY3QuaXM7XG5cbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KERzZnJJMThuU2VydmljZSk7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5pMThuLmV4dGVuZHNMYWJlbHNCdW5kbGUoTGFuZ3VhZ2UuRU4sIE1FU1NBR0VTX0VOKTtcbiAgICB0aGlzLmkxOG4uZXh0ZW5kc0xhYmVsc0J1bmRsZShMYW5ndWFnZS5GUiwgTUVTU0FHRVNfRlIpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZ2V0IHNob3dDaGVja2JveGVzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09IERzZnJTZWxlY3Rpb25Nb2RlQ29uc3QuQ0hFQ0tCT1g7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGdldCBzZWxlY3Rpb25Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9ubmUgdW4gbWVzc2FnZSBkJ2VycmV1clxuICAgKiBAZGVwcmVjYXRlZCB1dGlsaXNlciBtZXNzYWdlIGV0IG1lc3NhZ2VTZXZlcml0eVxuICAgKi9cbiAgQElucHV0KCkgc2V0IGVycm9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSB2YWx1ZTtcbiAgICB0aGlzLm1lc3NhZ2VTZXZlcml0eSA9IERzZnJTZXZlcml0eUNvbnN0LkVSUk9SO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9ubmUgdW4gbWVzc2FnZSBkZSB2YWxpZGF0aW9uXG4gICAqIEBkZXByZWNhdGVkIHV0aWxpc2VyIG1lc3NhZ2UgZXQgbWVzc2FnZVNldmVyaXR5XG4gICAqL1xuICBASW5wdXQoKSBzZXQgdmFsaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMubWVzc2FnZSA9IHZhbHVlO1xuICAgIHRoaXMubWVzc2FnZVNldmVyaXR5ID0gRHNmclNldmVyaXR5Q29uc3QuU1VDQ0VTUztcbiAgfVxuXG4gIC8qKiBMaXN0ZSBkZXMgb3B0aW9ucyBkaXNwb25pYmxlcy4gKi9cbiAgQElucHV0KClcbiAgc2V0IG9wdGlvbnModmFsOiBhbnlbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX29wdGlvbnMgPSB2YWw7XG4gICAgdGhpcy5vcHRpb25zRmlsdGVyID0gdGhpcy5vcHRpb25zID8/IFtdO1xuICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNb2RlIGRlIHPDqWxlY3Rpb24uIENoZWNrYm94LCBtdWx0aXBsZSBvdSBzaW5nbGUgKi9cbiAgQElucHV0KClcbiAgc2V0IHNlbGVjdGlvbk1vZGUobW9kZTogRHNmclNlbGVjdGlvbk1vZGUpIHtcbiAgICB0aGlzLnNldFNlbGVjdGlvbk1vZGUobW9kZSk7XG4gIH1cblxuICAvKiogUGVyc29ubmFsaXNhdGlvbiBkZSBsYSBjb21wYXJhaXNvbi4gRm9uY3Rpb24gw6AgMiBhcmd1bWVudHM6IHZhbDEgZXQgdmFsMiAobGVzIHZhbHVlcyBkZXMgZGV1eCBvcHRpb25zKS5cbiAgU2kgY29tcGFyZVdpdGggZXN0IGZvdXJuaSwgc8OpbGVjdGlvbiBkZSBsJ29wdGlvbiBzZWxvbiBsZSByZXRvdXIgZGUgbGEgZm9uY3Rpb24uKi9cbiAgQElucHV0KClcbiAgc2V0IGNvbXBhcmVXaXRoKGZuOiAodjE6IGFueSwgdjI6IGFueSkgPT4gYm9vbGVhbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IEVycm9yKCdgY29tcGFyZVdpdGhgIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG4gICAgdGhpcy5fY29tcGFyZVdpdGggPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdElkID8/PSBuZXdVbmlxdWVJZCgpO1xuICB9XG5cbiAgLyoqICBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGdldExhYmVsS2V5T3B0aW9uc1NlbGVjdGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSA/ICdtdWx0aXNlbGVjdC5zZWxlY3RlZCcgOiAnbXVsdGlzZWxlY3Quc2VsZWN0ZWRQbHVyYWwnO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBcbiAgICogUsOpaW5pdGlhbGlzZXIgbGUgY2hhbXAgZGUgcmVjaGVyY2hlXG4gICBAaW50ZXJuYWxcbiAgKi9cbiAgcHVibGljIHJlc2V0U2VhcmNoSW5wdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvd1NlYXJjaCkge1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICB0aGlzLm9uU2VhcmNoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzU2luZ2xlTW9kZSA/IHVuZGVmaW5lZCA6IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3V2ZXJ0dXJlIGR1IG11bHRpc2VsZWN0IHN1ciBhcnJvdyBkb3duXG4gICAqICBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG9uQnV0dG9uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykgJiYgIXRoaXMuZGlzcGxheURyb3Bkb3duKSB7XG4gICAgICBpZiAoKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoJ2ZyLXRhZycpKSByZXR1cm47IC8vIGRhbnMgbGUgY2FzIGRlcyBjbGVhcmFibGVPcHRpb25zLCBzdXBwcmVzc2lvbiBkdSB0YWdcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKGUua2V5ID09PSAnQXJyb3dVcCcgfHwgZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICdFc2NhcGUnKSAmJiB0aGlzLmRpc3BsYXlEcm9wZG93bikge1xuICAgICAgdGhpcy50b2dnbGVEcm9wZG93bigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHRvZ2dsZURyb3Bkb3duKGU/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZSAmJiBlLnRhcmdldCAmJiAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcygnZnItdGFnICcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwbGF5RHJvcGRvd24gPSAhdGhpcy5kaXNwbGF5RHJvcGRvd247XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheURyb3Bkb3duID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuY2xlYXJTZWFyY2hPbkhpZGUpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgdGhpcy5vcHRpb25zRmlsdGVyID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPyB0aGlzLm9wdGlvbnMgOiBbXTtcbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICoqL1xuICBwcm90ZWN0ZWQgc2V0U2VsZWN0aW9uTW9kZShtb2RlOiBEc2ZyU2VsZWN0aW9uTW9kZSkge1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSBtb2RlID8gbW9kZSA6IERzZnJTZWxlY3Rpb25Nb2RlQ29uc3QuQ0hFQ0tCT1g7XG4gICAgdGhpcy5pc1NpbmdsZU1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGUgPT09IERzZnJTZWxlY3Rpb25Nb2RlQ29uc3QuU0lOR0xFO1xuICAgIGlmICh0aGlzLmlzU2luZ2xlTW9kZSkge1xuICAgICAgdGhpcy5zaG93U2VsZWN0QWxsID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIFxuICAgKiBTw6lsZWN0aW9ubmVyIG91IGTDqXNlbGVjdGlvbm5lciB0b3V0ZXMgbGVzIG9wdGlvbnNcbiAgICogU2kgbWF4U2VsZWN0ZWRPcHRpb25zIGVzdCBkw6lmaW5pLCBzw6lsZWN0aW9uIHVuaXF1ZW1lbnQgZGVzIChtYXgpIHByZW1pw6hyZXMgb3B0aW9uc1xuICAgQGludGVybmFsXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCBzZWxlY3RBbGwoKTogdm9pZDtcblxuICAvKipcbiAgICogU8OpbGVjdGlvbiBvdSBkw6lzw6lsZWN0aW9uIGQndW5lIG9wdGlvblxuICAgKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IG9uT3B0aW9uQ2xpY2soZTogYW55LCBvcHRpb246IERzZnJPcHRpb24pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBGaWx0cmVyIGxlcyBvcHRpb25zIHNlbG9uIGxhIGZvbmN0aW9uIGRlIHJlY2hlcmNoZVxuICAgKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IG9uU2VhcmNoKCk6IHZvaWQ7XG59XG4iXX0=