@dsivd/prestations-ng 17.0.0-beta.2 → 17.0.0-beta.20
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/CHANGELOG.md +80 -0
- package/ESLINT_MIGRATION_GUIDE.md +2 -1
- package/UPGRADING_V17.md +385 -38
- package/dsivd-prestations-ng-17.0.0-beta.20.tgz +0 -0
- package/esm2022/abstract-page-component.mjs +10 -6
- package/esm2022/directives/currency-formatter.directive.mjs +4 -4
- package/esm2022/directives/formatter.module.mjs +5 -5
- package/esm2022/directives/iban-formatter.directive.mjs +4 -4
- package/esm2022/directives/ide-formatter.directive.mjs +4 -4
- package/esm2022/directives/ndc-formatter.directive.mjs +4 -4
- package/esm2022/foehn-address/foehn-address.module.mjs +5 -5
- package/esm2022/foehn-address/foehn-display-address.component.mjs +4 -4
- package/esm2022/foehn-address/foehn-input-address.component.mjs +9 -5
- package/esm2022/foehn-address/foehn-input-foreign-locality.component.mjs +4 -4
- package/esm2022/foehn-address/foehn-input-foreign-street.component.mjs +6 -7
- package/esm2022/foehn-agenda/foehn-agenda-navigation/foehn-agenda-navigation.component.mjs +5 -5
- package/esm2022/foehn-agenda/foehn-agenda-timeslot-panel/foehn-agenda-timeslot-panel.component.mjs +6 -6
- package/esm2022/foehn-agenda/foehn-agenda.component.mjs +4 -4
- package/esm2022/foehn-agenda/foehn-agenda.module.mjs +5 -5
- package/esm2022/foehn-autocomplete/foehn-autocomplete.component.mjs +4 -4
- package/esm2022/foehn-autocomplete/foehn-autocomplete.module.mjs +5 -5
- package/esm2022/foehn-boolean/foehn-boolean-checkbox.component.mjs +4 -4
- package/esm2022/foehn-boolean/foehn-boolean-radio.component.mjs +4 -4
- package/esm2022/foehn-boolean/foehn-boolean.module.mjs +5 -5
- package/esm2022/foehn-breadcrumb/breadcrumb-event.service.mjs +24 -17
- package/esm2022/foehn-breadcrumb/foehn-breadcrumb.component.mjs +4 -4
- package/esm2022/foehn-breadcrumb/foehn-breadcrumb.module.mjs +5 -5
- package/esm2022/foehn-checkables/foehn-checkable-group.component.mjs +36 -34
- package/esm2022/foehn-checkables/foehn-checkables.module.mjs +5 -5
- package/esm2022/foehn-checkables/foehn-checkbox.component.mjs +4 -4
- package/esm2022/foehn-checkables/foehn-radio.component.mjs +4 -4
- package/esm2022/foehn-checkables/foehn-select.component.mjs +4 -4
- package/esm2022/foehn-confirm-modal/foehn-confirm-modal.component.mjs +5 -5
- package/esm2022/foehn-confirm-modal/foehn-confirm-modal.module.mjs +5 -5
- package/esm2022/foehn-confirm-modal/foehn-confirm-modal.service.mjs +4 -4
- package/esm2022/foehn-date-picker/foehn-date-picker.component.mjs +5 -5
- package/esm2022/foehn-date-picker/foehn-date-picker.module.mjs +5 -5
- package/esm2022/foehn-date-picker-button/foehn-date-picker-button.component.mjs +4 -4
- package/esm2022/foehn-date-picker-button/foehn-date-picker-button.module.mjs +5 -5
- package/esm2022/foehn-debug-summary/foehn-debug-summary.component.mjs +4 -4
- package/esm2022/foehn-debug-summary/foehn-debug-summary.component.module.mjs +5 -5
- package/esm2022/foehn-decision-electronique/foehn-decision-electronique.component.mjs +4 -4
- package/esm2022/foehn-decision-electronique/foehn-decision-electronique.module.mjs +5 -5
- package/esm2022/foehn-dropdown-menu/foehn-dropdown-menu.component.mjs +5 -5
- package/esm2022/foehn-dropdown-menu/foehn-dropdown-menu.module.mjs +5 -5
- package/esm2022/foehn-feedback-notification/foehn-feedback-notification.component.mjs +90 -0
- package/esm2022/foehn-feedback-notification/foehn-feedback-notification.module.mjs +32 -0
- package/esm2022/foehn-footer/foehn-footer.component.mjs +5 -5
- package/esm2022/foehn-footer/foehn-footer.module.mjs +5 -5
- package/esm2022/foehn-form/foehn-form.component.mjs +4 -4
- package/esm2022/foehn-form/foehn-form.module.mjs +5 -5
- package/esm2022/foehn-form/register-ng-model.service.mjs +4 -4
- package/esm2022/foehn-growl/foehn-growl.component.mjs +4 -4
- package/esm2022/foehn-growl/foehn-growl.module.mjs +5 -5
- package/esm2022/foehn-growl/growl-broker.service.mjs +4 -4
- package/esm2022/foehn-header/foehn-header.component.mjs +4 -4
- package/esm2022/foehn-header/foehn-header.module.mjs +5 -5
- package/esm2022/foehn-header/foehn-skip-link.component.mjs +4 -4
- package/esm2022/foehn-help-modal/foehn-help-modal.component.mjs +5 -5
- package/esm2022/foehn-help-modal/foehn-help-modal.module.mjs +5 -5
- package/esm2022/foehn-icons/abstract-icon-component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-calendar.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-check-square-o.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-check.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-chevron-down.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-chevron-left.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-chevron-right.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-chevron-up.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-clock.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-comment-dots.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-edit.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-external-link-alt.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-file-pdf.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-info-circle.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-lock.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-map-marker.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-minus-circle.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-pencil.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-plus-circle.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-plus-square.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-search.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-times.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-trash-alt.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-unlock-alt.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icon-user.component.mjs +4 -4
- package/esm2022/foehn-icons/foehn-icons.module.mjs +5 -5
- package/esm2022/foehn-input/foehn-input-email.component.mjs +4 -4
- package/esm2022/foehn-input/foehn-input-hidden.component.mjs +4 -4
- package/esm2022/foehn-input/foehn-input-number.component.mjs +4 -4
- package/esm2022/foehn-input/foehn-input-password.component.mjs +4 -4
- package/esm2022/foehn-input/foehn-input-phone.component.mjs +4 -4
- package/esm2022/foehn-input/foehn-input-prefixed-text.component.mjs +4 -4
- package/esm2022/foehn-input/foehn-input-string.component.mjs +4 -4
- package/esm2022/foehn-input/foehn-input-text.component.mjs +4 -4
- package/esm2022/foehn-input/foehn-input-textarea.component.mjs +4 -4
- package/esm2022/foehn-input/foehn-input.component.mjs +4 -4
- package/esm2022/foehn-input/foehn-input.module.mjs +5 -5
- package/esm2022/foehn-input-date/foehn-input-date.component.mjs +4 -4
- package/esm2022/foehn-input-date-time/foehn-input-date-time.component.mjs +4 -4
- package/esm2022/foehn-input-time/foehn-input-time.component.mjs +6 -6
- package/esm2022/foehn-list/foehn-list.component.mjs +5 -5
- package/esm2022/foehn-list/foehn-list.module.mjs +5 -5
- package/esm2022/foehn-menu-prestation/abstract-list-item-detail-page.component.mjs +4 -4
- package/esm2022/foehn-menu-prestation/abstract-menu-page.component.mjs +4 -4
- package/esm2022/foehn-menu-prestation/abstract-page-from-menu.component.mjs +4 -4
- package/esm2022/foehn-menu-prestation/foehn-error-pill/foehn-error-pill.component.mjs +6 -5
- package/esm2022/foehn-menu-prestation/foehn-list-summary/foehn-list-summary.component.mjs +6 -6
- package/esm2022/foehn-menu-prestation/foehn-menu-items/foehn-menu-item/foehn-menu-item.component.mjs +4 -4
- package/esm2022/foehn-menu-prestation/foehn-menu-items/foehn-menu-item-transmit/foehn-menu-item-transmit.component.mjs +4 -4
- package/esm2022/foehn-menu-prestation/foehn-menu-prestation.module.mjs +5 -5
- package/esm2022/foehn-misc/foehn-abbr.component.mjs +4 -4
- package/esm2022/foehn-misc/foehn-misc.module.mjs +5 -5
- package/esm2022/foehn-modal/foehn-modal.component.mjs +5 -5
- package/esm2022/foehn-modal/foehn-modal.module.mjs +5 -5
- package/esm2022/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.component.mjs +6 -6
- package/esm2022/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.module.mjs +5 -5
- package/esm2022/foehn-nav13/foehn-input-nav13.component.mjs +4 -4
- package/esm2022/foehn-nav13/foehn-input-nav13.module.mjs +5 -5
- package/esm2022/foehn-navigation/abstract-foehn-navigation.component.mjs +4 -4
- package/esm2022/foehn-navigation/foehn-navigation/foehn-navigation.component.mjs +5 -5
- package/esm2022/foehn-navigation/foehn-navigation.module.mjs +5 -5
- package/esm2022/foehn-navigation/foehn-navigation.service.mjs +4 -4
- package/esm2022/foehn-navigation/foehn-simple-navigation/foehn-simple-navigation.component.mjs +5 -5
- package/esm2022/foehn-notfound/foehn-notfound.component.mjs +4 -4
- package/esm2022/foehn-notfound/foehn-notfound.module.mjs +5 -5
- package/esm2022/foehn-page/foehn-page-counter.component.mjs +4 -4
- package/esm2022/foehn-page/foehn-page-expiration-timer/demande-expiration-interceptor.mjs +4 -4
- package/esm2022/foehn-page/foehn-page-expiration-timer/demande-expiration.service.mjs +4 -4
- package/esm2022/foehn-page/foehn-page-expiration-timer/foehn-page-expiration-timer.component.mjs +4 -4
- package/esm2022/foehn-page/foehn-page-expiration-timer/interval.helper.mjs +2 -2
- package/esm2022/foehn-page/foehn-page-modal.component.mjs +4 -4
- package/esm2022/foehn-page/foehn-page-modal.service.mjs +4 -4
- package/esm2022/foehn-page/foehn-page.component.mjs +5 -5
- package/esm2022/foehn-page/foehn-page.module.mjs +5 -5
- package/esm2022/foehn-page/foehn-page.service.mjs +4 -4
- package/esm2022/foehn-page/foehn-transmit-waiting-modal/demande-transmit-interceptor.mjs +4 -4
- package/esm2022/foehn-page/foehn-transmit-waiting-modal/foehn-transmit-waiting-modal.component.mjs +4 -4
- package/esm2022/foehn-page/foehn-transmit-waiting-modal/foehn-transmit-waiting-modal.service.mjs +4 -4
- package/esm2022/foehn-recap-section/foehn-recap-section.component.mjs +4 -4
- package/esm2022/foehn-recap-section/foehn-recap-section.module.mjs +5 -5
- package/esm2022/foehn-remaining-alerts-summary/foehn-remaining-alerts-summary.component.mjs +4 -4
- package/esm2022/foehn-remaining-alerts-summary/foehn-remaining-alerts-summary.module.mjs +5 -5
- package/esm2022/foehn-status-progress-bar/foehn-status-progress-bar.component.mjs +4 -4
- package/esm2022/foehn-status-progress-bar/foehn-status-progress-bar.module.mjs +5 -5
- package/esm2022/foehn-table/foehn-table.component.mjs +9 -5
- package/esm2022/foehn-table/foehn-table.module.mjs +5 -5
- package/esm2022/foehn-upload/abstract-foehn-uploader.component.mjs +4 -4
- package/esm2022/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.service.mjs +6 -19
- package/esm2022/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.component.mjs +4 -4
- package/esm2022/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.module.mjs +5 -5
- package/esm2022/foehn-upload/foehn-multi-upload/foehn-multi-upload.component.mjs +4 -4
- package/esm2022/foehn-upload/foehn-multi-upload/foehn-multi-upload.module.mjs +5 -5
- package/esm2022/foehn-upload/foehn-multi-upload/multi-upload.service.mjs +6 -19
- package/esm2022/foehn-upload/foehn-multi-upload/pending-upload.service.mjs +8 -6
- package/esm2022/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.mjs +20 -47
- package/esm2022/foehn-upload/foehn-picture-upload/foehn-picture-upload.module.mjs +5 -5
- package/esm2022/foehn-upload/foehn-upload-progress-bar/foehn-upload-progress-bar.component.mjs +4 -4
- package/esm2022/foehn-upload/foehn-upload-progress-bar/foehn-upload-progress-bar.module.mjs +5 -5
- package/esm2022/foehn-upload/foehn-upload-progress-bar/upload-progress.service.mjs +4 -4
- package/esm2022/foehn-upload/page-upload-limit.service.mjs +4 -4
- package/esm2022/foehn-upload/uploader.helper.mjs +5 -13
- package/esm2022/foehn-user-connected-as/foehn-user-connected-as.component.mjs +4 -4
- package/esm2022/foehn-user-connected-as/foehn-user-connected-as.module.mjs +5 -5
- package/esm2022/foehn-validation-alert-summary/foehn-validation-alert-summary.component.mjs +4 -4
- package/esm2022/foehn-validation-alert-summary/foehn-validation-alert-summary.module.mjs +5 -5
- package/esm2022/foehn-validation-alerts/foehn-validation-alerts.component.mjs +4 -4
- package/esm2022/foehn-validation-alerts/foehn-validation-alerts.module.mjs +5 -5
- package/esm2022/gesdem/gesdem-error-handler.service.mjs +16 -13
- package/esm2022/gesdem/gesdem-event.service.mjs +4 -4
- package/esm2022/gesdem/gesdem-handler.service.mjs +29 -16
- package/esm2022/gesdem-action-recovery/gesdem-action-recovery-login/gesdem-action-recovery-login.component.mjs +4 -4
- package/esm2022/gesdem-action-recovery/gesdem-action-recovery-registration/gesdem-action-recovery-registration.component.mjs +31 -12
- package/esm2022/gesdem-action-recovery/gesdem-action-recovery.module.mjs +5 -5
- package/esm2022/gesdem-action-recovery/gesdem-action-recovery.service.mjs +4 -4
- package/esm2022/gesdem-confirmation/gesdem-confirmation.component.mjs +20 -15
- package/esm2022/gesdem-confirmation/gesdem-confirmation.module.mjs +12 -8
- package/esm2022/gesdem-error/gesdem-error.component.mjs +8 -6
- package/esm2022/gesdem-error/gesdem-error.module.mjs +5 -5
- package/esm2022/pipes/currency.pipe.mjs +4 -4
- package/esm2022/pipes/date.pipe.mjs +4 -4
- package/esm2022/pipes/formatIde.pipe.mjs +4 -4
- package/esm2022/pipes/pipes.module.mjs +5 -5
- package/esm2022/prestations-ng-core.module.mjs +5 -5
- package/esm2022/public_api.mjs +4 -1
- package/esm2022/sdk-appinfo/application-info.mjs +7 -1
- package/esm2022/sdk-appinfo/application-info.service.mjs +24 -6
- package/esm2022/sdk-currency/currency.helper.mjs +4 -4
- package/esm2022/sdk-date/date.helper.mjs +4 -4
- package/esm2022/sdk-dictionary/default-dictionary.mjs +19 -5
- package/esm2022/sdk-dictionary/sdk-dictionary.module.mjs +5 -5
- package/esm2022/sdk-dictionary/sdk-dictionary.pipe.mjs +4 -4
- package/esm2022/sdk-dictionary/sdk-dictionary.service.mjs +4 -4
- package/esm2022/sdk-drafts/drafts-container.component.mjs +5 -5
- package/esm2022/sdk-drafts/drafts.module.mjs +5 -5
- package/esm2022/sdk-drafts/drafts.service.mjs +4 -4
- package/esm2022/sdk-epayment/sdk-epayment.component.mjs +4 -4
- package/esm2022/sdk-epayment/sdk-epayment.module.mjs +5 -5
- package/esm2022/sdk-epayment/sdk-epayment.service.mjs +4 -4
- package/esm2022/sdk-events-logger/sdk-events-logger.service.mjs +4 -4
- package/esm2022/sdk-recaptcha/grecaptcha/grecaptcha.component.mjs +4 -4
- package/esm2022/sdk-recaptcha/recaptcha.service.mjs +8 -16
- package/esm2022/sdk-recaptcha/sdk-recaptcha.component.mjs +4 -4
- package/esm2022/sdk-recaptcha/sdk-recaptcha.module.mjs +5 -5
- package/esm2022/sdk-redirect/iam-expired-interceptor.service.mjs +12 -11
- package/esm2022/sdk-redirect/redirect.component.mjs +32 -17
- package/esm2022/sdk-redirect/sdk-redirect.module.mjs +5 -5
- package/esm2022/sdk-session-info/session-info-with-application.service.mjs +4 -4
- package/esm2022/sdk-session-info/session-info.service.mjs +4 -4
- package/esm2022/sdk-statistics/sdk-statistics.service.mjs +4 -4
- package/esm2022/sdk-support-alert/support-alert-container.component.mjs +5 -5
- package/esm2022/sdk-support-alert/support-alert.component.mjs +12 -14
- package/esm2022/sdk-support-alert/support-alert.module.mjs +5 -5
- package/esm2022/sdk-support-alert/support-alert.service.mjs +4 -4
- package/esm2022/supported-browser.mjs +2 -2
- package/esm2022/validation/validation-handler.service.mjs +4 -4
- package/fesm2022/dsivd-prestations-ng.mjs +1304 -1153
- package/fesm2022/dsivd-prestations-ng.mjs.map +1 -1
- package/foehn-address/foehn-input-address.component.d.ts +2 -1
- package/foehn-breadcrumb/breadcrumb-event.service.d.ts +3 -1
- package/foehn-checkables/foehn-checkable-group.component.d.ts +2 -1
- package/foehn-feedback-notification/foehn-feedback-notification.component.d.ts +30 -0
- package/foehn-feedback-notification/foehn-feedback-notification.module.d.ts +11 -0
- package/foehn-table/foehn-table.component.d.ts +3 -1
- package/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.service.d.ts +1 -4
- package/foehn-upload/foehn-multi-upload/multi-upload.service.d.ts +1 -4
- package/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.d.ts +2 -4
- package/gesdem/gesdem-error-handler.service.d.ts +1 -0
- package/gesdem/gesdem-handler.service.d.ts +2 -2
- package/gesdem-action-recovery/gesdem-action-recovery-registration/gesdem-action-recovery-registration.component.d.ts +3 -1
- package/gesdem-confirmation/gesdem-confirmation.component.d.ts +2 -0
- package/gesdem-confirmation/gesdem-confirmation.module.d.ts +2 -1
- package/gesdem-error/gesdem-error.component.d.ts +1 -0
- package/package.json +1 -1
- package/public_api.d.ts +2 -0
- package/schematics/utility/foehn2-bootstrap5-migration.js +19 -2
- package/sdk-appinfo/application-info.d.ts +4 -2
- package/sdk-recaptcha/recaptcha.service.d.ts +1 -3
- package/sdk-redirect/redirect.component.d.ts +4 -2
- package/dsivd-prestations-ng-17.0.0-beta.2.tgz +0 -0
|
@@ -626,8 +626,8 @@ export class FoehnAutocompleteComponent extends FoehnCheckableGroupComponent {
|
|
|
626
626
|
escapeRegexp(value) {
|
|
627
627
|
return value.replace(this.REGEX_TO_ESCAPE_REGEX, '\\$&');
|
|
628
628
|
}
|
|
629
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
630
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.
|
|
629
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FoehnAutocompleteComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
630
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: { searchValueMinCharsCount: "searchValueMinCharsCount", allowCustomValue: "allowCustomValue", isSuggestionListDynamic: "isSuggestionListDynamic", customValueModelGenerator: "customValueModelGenerator", itemHeightInSuggestionListInPx: "itemHeightInSuggestionListInPx", elementSuggestionLabel: "elementSuggestionLabel", caseSensitiveSearch: "caseSensitiveSearch", disabled: "disabled" }, outputs: { userSearchInput: "userSearchInput" }, providers: [
|
|
631
631
|
{
|
|
632
632
|
provide: FoehnInputComponent,
|
|
633
633
|
useExisting: forwardRef(() => FoehnAutocompleteComponent),
|
|
@@ -635,7 +635,7 @@ export class FoehnAutocompleteComponent extends FoehnCheckableGroupComponent {
|
|
|
635
635
|
}
|
|
636
636
|
], viewQueries: [{ propertyName: "virtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "suggestionsList", first: true, predicate: ["suggestionsList"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["entryComponent"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!--\n Accessible autocomplete widget following the listbox combobox pattern.\n ref: https://www.w3.org/TR/wai-aria-practices-1.1/examples/combobox/aria1.1pattern/listbox-combo.html\n-->\n<div\n class=\"form-group autocomplete-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.aria-expanded]=\"shouldDisplayListbox()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n class=\"form-label\"\n [attr.for]=\"buildChildId()\"\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'visually-hidden' : labelStyleModifier\"\n [attr.id]=\"buildChildId() + 'Label'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <div *ngIf=\"!elements\">Chargement...</div>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"visually-hidden\">\n Utilisez les fl\u00E8ches haut et bas pour naviguer dans la liste, puis la\n touche Entrer pour s\u00E9lectionner une option.\n </div>\n\n <!-- Give screen reader users the total of results when then input changes. -->\n <div\n class=\"visually-hidden\"\n aria-live=\"polite\"\n role=\"status\"\n aria-atomic=\"true\"\n *ngIf=\"displayedElements && shouldDisplayListbox()\"\n >\n Nombre de r\u00E9sultats: {{ displayedElements.length }}\n <!-- Trick to have NVDA re-reading this properly -->\n <span>{{ notificationMessageUpdated ? ',' : ',,' }}</span>\n </div>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay()\"\n class=\"form-control autocomplete\"\n type=\"text\"\n role=\"textbox\"\n [name]=\"name || label\"\n [attr.id]=\"buildChildId()\"\n [attr.placeholder]=\"placeholder || null\"\n [attr.disabled]=\"disabledSubject | async\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-required]=\"required || null\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.autocomplete]=\"'off'\"\n [attr.aria-activedescendant]=\"getActiveDescendantId()\"\n [attr.aria-owns]=\"\n shouldDisplayListbox() ? buildChildId() + 'Listbox' : null\n \"\n [attr.list]=\"buildChildId() + 'list'\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"showSuggestionsWhenInputHasFocusAndIsEmpty($event)\"\n (input)=\"handleSearchInputChange(entryComponent.value)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeyDown($event)\"\n (click)=\"onInputClick()\"\n autocomplete=\"off\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n *ngIf=\"displayClearButton() | async\"\n class=\"autocomplete-clear-button btn\"\n (click)=\"onClear()\"\n [id]=\"buildChildId() + 'Clear'\"\n >\n <foehn-icon-times\n class=\"autocomplete-clear-button-icon\"\n [title]=\"'foehn-input.clear-button.label' | fromDictionary\"\n ></foehn-icon-times>\n </button>\n\n <div\n class=\"form-group suggestions-list-container\"\n *ngIf=\"shouldDisplayListbox()\"\n >\n <cdk-virtual-scroll-viewport\n [itemSize]=\"itemHeightInSuggestionListInPx\"\n [style.height.px]=\"VIEW_PORT_HEIGHT\"\n >\n <ul\n [attr.id]=\"buildChildId() + 'Listbox'\"\n [attr.aria-labelledby]=\"buildChildId() + 'Label'\"\n role=\"listbox\"\n class=\"suggestions-list\"\n #suggestionsList\n >\n <li\n tabindex=\"-1\"\n role=\"option\"\n class=\"suggestion\"\n *cdkVirtualFor=\"\n let element of displayedElements;\n index as i\n \"\n [attr.id]=\"buildChildId() + 'Option' + i\"\n (click)=\"onClickSuggestion(element)\"\n (mousedown)=\"onListOptionMouseDown($event)\"\n (focus)=\"onListOptionFocus()\"\n (blur)=\"onListOptionBlur()\"\n [style.min-height.px]=\"itemHeightInSuggestionListInPx\"\n [attr.label-value]=\"getLabel(element)\"\n >\n <!-- Ensures that screen readers don't consider any spaces around the emphasis -->\n <span [innerHtml]=\"getLabelWithEmphasis(element)\"></span>\n </li>\n </ul>\n </cdk-virtual-scroll-viewport>\n </div>\n</div>\n", styles: ["div.suggestions-list-container{position:relative;width:100%}cdk-virtual-scroll-viewport{width:100%;position:absolute;top:0;left:0;z-index:10;background:#fff;overflow-y:auto;box-shadow:0 4px 8px #0003,0 6px 20px #00000030;list-style:none;margin:inherit;padding:inherit}ul.suggestions-list{list-style:none;margin:0;padding:0}li.suggestion{width:100%;padding:.5em;font-size:1em}li.suggestion:hover,.suggestion-selected{background-color:var(--vd-info)}li.suggestion:hover{cursor:pointer;background-color:#dfdfdf}input.autocomplete::-ms-clear{display:none}input.autocomplete{padding-right:30px}.autocomplete-form-group{position:relative}.autocomplete-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.autocomplete-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .autocomplete-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .autocomplete-clear-button.btn:hover .svg-inline--fa{color:#000!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FoehnIconTimesComponent, selector: "foehn-icon-times" }, { kind: "component", type: i3.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.SdkDictionaryPipe, name: "fromDictionary" }] }); }
|
|
637
637
|
}
|
|
638
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
638
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FoehnAutocompleteComponent, decorators: [{
|
|
639
639
|
type: Component,
|
|
640
640
|
args: [{ selector: 'foehn-autocomplete', providers: [
|
|
641
641
|
{
|
|
@@ -672,4 +672,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImpor
|
|
|
672
672
|
}], disabled: [{
|
|
673
673
|
type: Input
|
|
674
674
|
}] } });
|
|
675
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCw0RUFBNEU7QUFDNUUsT0FBTyxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUtMLE1BQU0sRUFHTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGVBQWUsRUFDZixhQUFhLEVBRWIsRUFBRSxFQUNGLE9BQU8sRUFFVixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDSCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixLQUFLLEVBQ0wsR0FBRyxFQUNOLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBRTNFLCtDQUErQztBQUMvQyxTQUFTLGFBQWEsQ0FBQyxLQUFhO0lBQ2hDLHlGQUF5RjtJQUN6RixJQUFJLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLE9BQU8sS0FBSyxDQUFDLFNB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QUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztnQkFDekQsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKLGlGQU1VLHdCQUF3QixnVENsRnZDLDBvS0E2SUE7OzJGRC9EYSwwQkFBMEI7a0JBWnRDLFNBQVM7K0JBQ0ksb0JBQW9CLGFBR25CO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDJCQUEyQixDQUFDOzRCQUN6RCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjsyRUFPRCxxQkFBcUI7c0JBRHBCLFNBQVM7dUJBQUMsd0JBQXdCO2dCQUluQyxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUk1QixZQUFZO3NCQURYLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk3Qyx3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBU04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBT04sdUJBQXVCO3NCQUR0QixLQUFLO2dCQVdOLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFJTiw4QkFBOEI7c0JBRDdCLEtBQUs7Z0JBUU4sc0JBQXNCO3NCQURyQixLQUFLO2dCQUlOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFPTixlQUFlO3NCQURkLE1BQU07Z0JBdUVILFFBQVE7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8vIFRoaXMgY29tcG9uZW50IHVzZXMgc29tZSBFUzcgZmVhdHVyZXMgdGhhdCBhcmUgbm90IHBvbHlmaWxsZWQgYnkgQW5ndWxhci5cbmltcG9ydCAnY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzJztcblxuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZSxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBvZixcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvblxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIGZpbHRlcixcbiAgICBmaXJzdCxcbiAgICBtYXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGb2VobkNoZWNrYWJsZUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9laG4tY2hlY2thYmxlcy9mb2Vobi1jaGVja2FibGUtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IEZvZWhuSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9mb2Vobi1pbnB1dC9mb2Vobi1pbnB1dC5jb21wb25lbnQnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gbm9ybWFsaXplVXRmOCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBTb21lIGJyb3dzZXJzIHN1Y2ggYXMgSUUxMSBkb24ndCBzdXBwb3J0IHRoZSBmZWF0dXJlLiBBZGQgdGhlIHBvbHlmaWxsIGlmIHlvdSB3YW50IGl0LlxuICAgIGlmICh0eXBlb2YgdmFsdWUubm9ybWFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYWNjZW50c1xuICAgIHJldHVybiB2YWx1ZS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaCh2YWx1ZTogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlU2VhcmNoOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2FzZVNlbnNpdGl2ZVNlYXJjaCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplVXRmOCh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBub3JtYWxpemVVdGY4KHZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gc3RyaXBIdG1sVGFncyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKDwoW14+XSspPikvZ2ksICcnKTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmb2Vobi1hdXRvY29tcGxldGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb2Vobi1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZvZWhuLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZvZWhuSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb2VobkF1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb2VobkF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICAgIGV4dGVuZHMgRm9laG5DaGVja2FibGVHcm91cENvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xue1xuICAgIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KVxuICAgIHZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgQFZpZXdDaGlsZCgnc3VnZ2VzdGlvbnNMaXN0JylcbiAgICBzdWdnZXN0aW9uc0xpc3Q6IGFueTtcblxuICAgIEBWaWV3Q2hpbGQoJ2VudHJ5Q29tcG9uZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBpbnB1dEVsZW1lbnQ6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEFsbG93IHRvIHByb3ZpZGUgY3VzdG9tIHZhbHVlcyB0byB0aGUgYXV0b2NvbXBsZXRlLlxuICAgICAqXG4gICAgICogQSBjdXN0b20gdmFsdWUgaXMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBpbiB0aGUgYGVsZW1lbnRzYCBzZXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd0N1c3RvbVZhbHVlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgaWYgc3VnZ2VzdGlvbiBlbGVtZW50cyBsaXN0IGlzIGJlaW5nIHJldHJpZXZlZCBkeW5hbWljYWxseSB3aGlsZSB1c2VyIGlucHV0cyBpbiBzZWFyY2ggZmllbGQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1N1Z2dlc3Rpb25MaXN0RHluYW1pYyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQWxsb3cgdG8gcHJvdmlkZSBhIGdlbmVyYXRvciB0byBjcmVhdGUgdGhlIG1vZGVsIHdpdGggY3VzdG9tIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHR5cGUgb2YgdGhlIG1vZGVsIGlzIGFuIG9iamVjdCBhbmQgbm90IGp1c3RcbiAgICAgKiBhIHN0cmluZy4gVXNlIHRoaXMgaXMgYGFsbG93Q3VzdG9tVmFsdWVgIGlzIHRydWUgYW5kIGBlbGVtZW50VmFsdWVgXG4gICAgICogaXMgYSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGN1c3RvbVZhbHVlTW9kZWxHZW5lcmF0b3I6IChpbnB1dDogc3RyaW5nKSA9PiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1IZWlnaHRJblN1Z2dlc3Rpb25MaXN0SW5QeCA9IDQwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN1Z2dlc3Rpb24gbGFiZWwgdXNlZCBpbiB0aGUgZGlzcGxheWVkIGxpc3QuIENhbiBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uXG4gICAgICogZmFsbGJhY2sgb24gJ2VsZW1lbnRMYWJlbCdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGVsZW1lbnRTdWdnZXN0aW9uTGFiZWw6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgY2FzZVNlbnNpdGl2ZVNlYXJjaCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIGNoYW5nZXMgc2VhcmNoIGlucHV0IHZhbHVlXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgdXNlclNlYXJjaElucHV0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBpbnB1dFZhbHVlOiBzdHJpbmc7XG4gICAgc2VhcmNoVmFsdWU6IHN0cmluZztcbiAgICBpbnB1dEhhc0ZvY3VzOiBib29sZWFuO1xuICAgIGhpZGVTdWdnZXN0aW9ucyA9IHRydWU7XG4gICAgY3VycmVudEJsdXJUaW1lcjogYW55O1xuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICBWSUVXX1BPUlRfSEVJR0hUOiBudW1iZXI7XG5cbiAgICBkaXNwbGF5ZWRFbGVtZW50czogYW55W107XG4gICAgbm90aWZpY2F0aW9uTWVzc2FnZVVwZGF0ZWQ6IGJvb2xlYW47XG5cbiAgICBkaXNhYmxlZFN1YmplY3Q6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICAgIHByaXZhdGUgcGVuZGluZ0Rpc2FibGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgZWxlbWVudHNMb2FkZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIGN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSAtMTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE5CX0lURU1TX1ZJU0lCTEUgPSA1O1xuXG4gICAgcHJpdmF0ZSBmaWx0ZXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIGZpbHRlclN1YmNyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBsaXN0SGFzRm9jdXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBhY3RpdmVEZXNjZW5kYW50SWQ6IHN0cmluZztcblxuICAgIHByaXZhdGUgb25Jbml0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBtb2RlbENoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgZWxlbWVudHNMb2FkZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTUyA9ICdzdWdnZXN0aW9uLXNlbGVjdGVkJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IEVYQ0xVREVfSFRNTF9UQUdTX1JFR0VYID0gJygoPz1bXj5dKjwpfCg/IVtePF0qPikpJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IFNVR0dFU1RJT05fQ1VTVE9NX0FUVFJJQlVURV9MQUJFTF9WQUxVRSA9ICdsYWJlbC12YWx1ZSc7XG4gICAgLy8gSW5zcGlyZWQgZnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMjZXNjYXBpbmdcbiAgICBwcml2YXRlIHJlYWRvbmx5IFJFR0VYX1RPX0VTQ0FQRV9SRUdFWCA9IC9bLiorP14ke30oKXxbXFxdXFxcXF0vZztcblxuICAgIHByaXZhdGUgdXNlclNlYXJjaElucHV0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSB1c2VyU2VhcmNoSW5wdXRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBzZWxlY3RWYWx1ZVRvRGlzcGxheU9uRWxlbWVudHNMb2FkZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHpvbmU6IE5nWm9uZSkge1xuICAgICAgICBzdXBlcih6b25lKTtcbiAgICAgICAgdGhpcy5maWx0ZXJTdWJjcmlwdGlvbiA9IHRoaXMuZmlsdGVyU3ViamVjdFxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuZmlsdGVyRWxlbWVudHMuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgLy8gTmVlZCB0byBzdWJzY3JpYmUgb24gRXZlbnRFbWl0dGVyICdlbGVtZW50c0xvYWRlZCcgb3RoZXJ3aXNlIGVsZW1lbnRzIHdpdGggSFRNTCBkb2VzIG5vdCB3b3JrLi4uXG4gICAgICAgIHRoaXMuZWxlbWVudHNMb2FkZWRTdWJzY3JpcHRpb24gPSB0aGlzLmVsZW1lbnRzTG9hZGVkXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKG1hcChlbGVtcyA9PiAhIWVsZW1zKSlcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUobG9hZGVkID0+IHRoaXMuZWxlbWVudHNMb2FkZWRTdWJqZWN0Lm5leHQobG9hZGVkKSk7XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlZFN1YmplY3QgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0Rpc2FibGVkU3ViamVjdC5hc09ic2VydmFibGUoKSxcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNMb2FkZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgIF0pLnBpcGUobWFwKChbZGlzYWJsZWRdKSA9PiAoZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbCkpKTtcblxuICAgICAgICB0aGlzLlZJRVdfUE9SVF9IRUlHSFQgPVxuICAgICAgICAgICAgdGhpcy5pdGVtSGVpZ2h0SW5TdWdnZXN0aW9uTGlzdEluUHggKiB0aGlzLk5CX0lURU1TX1ZJU0lCTEU7XG4gICAgfVxuXG4gICAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nRGlzYWJsZWRTdWJqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0Rpc2FibGVkU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudHMoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzcGxheWVkRWxlbWVudHModGhpcy5lbGVtZW50cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlTWluQ2hhcnNDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBgU2Fpc2lzc2V6IGF1IG1vaW5zICR7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnRcbiAgICAgICAgICAgIH0gY2FyYWN0w6hyZSR7dGhpcy5zZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnQgPiAxID8gJ3MnIDogJyd9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25Jbml0U3Vic2NyaXB0aW9uID0gdGhpcy5vbkluaXRTdWJqZWN0XG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEhhY2sgdG8gcmVmcmVzaCB0aGUgZGF0YSBvbmNlIHRoZSBsaXN0IGlzIGRvd25sb2FkZWQuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVOZ01vZGVsKHRoaXMubW9kZWxfKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdoZW4gdGhlIG1vZGVsIGNoYW5nZXMsIHNlbGVjdCB0aGUgcmlnaHQgdmFsdWUgdG8gZGlzcGxheS5cbiAgICAgICAgdGhpcy5tYXRjaFZhbHVlT25Nb2RlbENoYW5nZVN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgIHRoaXMudXNlclNlYXJjaElucHV0U3Vic2NyaXB0aW9uID0gdGhpcy51c2VyU2VhcmNoSW5wdXRTdWJqZWN0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byB0cmlnZ2VyIHNlYXJjaGVkIGlucHV0IGlmIGl0IGhhcyBub3QgY2hhbmdlZFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IHdlIG9ubHkgY2F0Y2ggdGhlIGxhdGVzdCBvZiBtdWx0aXBsZVxuICAgICAgICAgICAgICAgIC8vIHF1aWNrIHVwZGF0ZXMsIGFuZCB0byBtYWtlIHN1cmUgdGhlIHVzZXJJbnB1dCBpcyBmaXJlZCB3aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCBpcyBkb25lIHVwZGF0aW5nLlxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU2VhcmNoSW5wdXQuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLmZpbHRlclN1YmNyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm9uSW5pdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5tb2RlbENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5lbGVtZW50c0xvYWRlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy51c2VyU2VhcmNoSW5wdXRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0VmFsdWVUb0Rpc3BsYXlPbkVsZW1lbnRzTG9hZGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIC8vIEhhbmRsZSBjaGFuZ2Ugb24gdGhlIGR5bmFtaWMgZWxlbWVudHMgaW5wdXQuXG4gICAgICAgIHRoaXMub25EeW5hbWljRWxlbWVudHNDaGFuZ2UoY2hhbmdlcy5lbGVtZW50cyk7XG4gICAgfVxuXG4gICAgb25JbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlclN1YmplY3QubmV4dCgpO1xuICAgICAgICB0aGlzLmlucHV0SGFzRm9jdXMgPSB0cnVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodGhpcy5pc0VtcHR5KHRoaXMuc2VhcmNoVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnQgPT09IDApIHx8XG4gICAgICAgICAgICAoIXRoaXMuaXNFbXB0eSh0aGlzLnNlYXJjaFZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50IDw9IHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNsZWFyT25CbHVyVGltZW91dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbnB1dENsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oaWRlU3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXb3JrYXJvdW5kIGZvciBJRTExIHRoYXQgbG9zZXMgZm9jdXMgb24gaW5wdXQgd2hlbiBzY3JvbGxiYXIgaXMgY2xpY2tlZFxuICAgIC8vIC0tPiBwdXQgYmFjayBmb2N1cyBvbiBpbnB1dCBhbmQgY2FuY2VsIHN1Z2dlc3Rpb25zIGhpZGluZyB0aW1lclxuICAgIHNldEZvY3VzT25JbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLmNsZWFyT25CbHVyVGltZW91dCgpO1xuICAgIH1cblxuICAgIG9uSW5wdXRCbHVyKCk6IHZvaWQge1xuICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIG9uQ2xpY2tTdWdnZXN0aW9uLiBTZXR0aW5nIGlucHV0SGFzRm9jdXMgdG8gZmFsc2UgbWFrZXMgc3VnZ2VzdGlvbnMgZGlzYXBwZWFyZWRcbiAgICAgICAgLy8gYW5kIG9uQ2xpY2tTdWdnZXN0aW9uIGlzIG5ldmVyIGNhbGxlZC4gU2V0dGluZyBhIHRpbWVvdXQgaGVyZSBhdm9pZCB0aGlzIHByb2JsZW0uXG4gICAgICAgIHRoaXMuY3VycmVudEJsdXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gRG9uJ3QgY2xvc2UgdGhlIGxpc3QgaWYgdGhlIGxpc3QgaGFzIHRoZSBmb2N1cy4gVGhpcyBpcyBkb25lIHRvIGFsbG93IFZvaWNlT3ZlciB1c2VycyBvbiBpT1MgdG9cbiAgICAgICAgICAgIC8vIHNlbGVjdCBhbiBvcHRpb24gd2l0aCB0aGVpciBmaW5nZXIuIFNhbWUgaWYgZm9jdXMgaXMgc2V0IG9uIGxpc3Qgc2Nyb2xsIGJhclxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF0aGlzLmxpc3RIYXNGb2N1cyAmJlxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuY2xhc3NOYW1lICE9PVxuICAgICAgICAgICAgICAgICAgICAnZm9ybS1ncm91cCBhdXRvY29tcGxldGUtZm9ybS1ncm91cCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRIYXNGb2N1cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbktleURvd24oa2V5RXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgLy8gVGhlIGlucHV0IG1pZ2h0IG5vdCBiZSBtYXJrZWQgYXMgZm9jdXNlZCBpbiBjYXNlIHRoZSB1c2VyIHNlbGVjdHMgYSB2YWx1ZSBmcm9tIHRoZSBsaXN0LlxuICAgICAgICB0aGlzLmlucHV0SGFzRm9jdXMgPSB0cnVlO1xuICAgICAgICBjb25zdCBwcm9wYWdhdGUgPSB0aGlzLm9uS2V5RG93bklubmVyKGtleUV2ZW50KTtcbiAgICAgICAgaWYgKHByb3BhZ2F0ZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGFnYXRlO1xuICAgIH1cblxuICAgIG9uS2V5RG93bklubmVyKGtleUV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIElFIGRvZXNuJ3Qgc3VwcG9ydCBrZXlFdmVudC5jb2RlLCBhbmQgaGFzIGRpZmZlcmVudCB2YWx1ZXNcbiAgICAgICAgLy8gaW4ga2V5RXZlbnQua2V5IChEb3duIGluc3RlYWQgb2YgQXJyb3dEb3duIGZvciBpbnN0YW5jZSksIGhlbmNlIHRoZSBtdWx0aS1zdXBwb3J0LlxuICAgICAgICBjb25zdCBpZTExQ29tcGF0aWJsZUNvZGUgPSBrZXlFdmVudC5jb2RlIHx8IGtleUV2ZW50LmtleTtcbiAgICAgICAgc3dpdGNoIChpZTExQ29tcGF0aWJsZUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3VnZ2VzdGlvbnNEaXNwbGF5ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3ROZXh0RWxlbWVudCh0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1VwJzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dEVsZW1lbnQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAnU3BhY2ViYXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFNlbGVjdGVkRWxlbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEZpcnN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IGJlZm9yZSBmb3JtIHN1Ym1pdCwgY2FsbHMgY2hlY2tBbmRTZXRJbnB1dFZhbHVlIGJlY2F1c2UgZm9jdXNvdXQgaXMgY2FsbGVkIHRvbyBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAobmV3IHZhbHVlIGlzIGFscmVhZHkgbG9zdCkuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gYXV0b2NvbXBsZXRlIHdpdGhvdXQgbmVlZCB0byBzZWxlY3QgaXQgbWFudWFsbHlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZFNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRTZXRJbnB1dFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgIGNhc2UgJ1JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9uc0Rpc3BsYXllZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG9uTGlzdE9wdGlvbk1vdXNlRG93bihldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFNhZmFyaSB0cmlnZ2VycyBmb2N1c091dCBiZWZvcmUgY2xpY2ssIGJ1dCBpZiB5b3VcbiAgICAgICAgLy8gcHJldmVudERlZmF1bHQgb24gbW91c2VEb3duLCB5b3UgY2FuIHN0b3AgdGhhdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgICAgLy8gSWYgdGhpcyBpcyByZW1vdmVkLCBjbGlja2luZyBvbiBhbiBvcHRpb24gaW4gU2FmYXJpIHdpbGwgdHJpZ2dlclxuICAgICAgICAvLyBgaGFuZGxlT3B0aW9uQmx1cmAsIHdoaWNoIGNsb3NlcyB0aGUgbWVudSwgYW5kIHRoZSBjbGljayB3aWxsXG4gICAgICAgIC8vIHRyaWdnZXIgb24gdGhlIGVsZW1lbnQgdW5kZXJuZWF0aCBpbnN0ZWFkLlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uTGlzdE9wdGlvbkZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxpc3RIYXNGb2N1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25MaXN0T3B0aW9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saXN0SGFzRm9jdXMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmaWx0ZXJFbGVtZW50cyhoaWRlU3VnZ2VzdGlvbnM6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlO1xuXG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc0VtcHR5KHRoaXMuc2VhcmNoVmFsdWUpIHx8XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCA8IHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREaXNwbGF5ZWRFbGVtZW50cyh0aGlzLmVsZW1lbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdWdnZXN0aW9uc0Rpc3BsYXllZCh0cnVlLCBbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN1Z2dlc3Rpb25zRGlzcGxheWVkKFxuICAgICAgICAgICAgICAgIGhpZGVTdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZTogYW55KSA9PiB0aGlzLm1hdGNoUmVzdWx0KGUpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFN1Z2dlc3Rpb25MYWJlbChlbGVtZW50OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFN1Z2dlc3Rpb25MYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVsZW1lbnRTdWdnZXN0aW9uTGFiZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROZXN0ZWRQcm9wZXJ0eShlbGVtZW50LCB0aGlzLmVsZW1lbnRTdWdnZXN0aW9uTGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRTdWdnZXN0aW9uTGFiZWwoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZ2V0TGFiZWxXaXRoRW1waGFzaXMoZWxlbTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGxhYmVsID0gdGhpcy5nZXRTdWdnZXN0aW9uTGFiZWwoZWxlbSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRW1wdHkodGhpcy5zZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1JlZ2V4cENoYXJzVG9Fc2NhcGUgPSBSZWdFeHAoXG4gICAgICAgICAgICAgICAgdGhpcy5SRUdFWF9UT19FU0NBUEVfUkVHRVguc291cmNlXG4gICAgICAgICAgICApLnRlc3QodGhpcy5zZWFyY2hWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCByZWdleFNlYXJjaFZhbHVlID0gaGFzUmVnZXhwQ2hhcnNUb0VzY2FwZVxuICAgICAgICAgICAgICAgID8gdGhpcy5lc2NhcGVSZWdleHAoXG4gICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhc2VTZW5zaXRpdmVTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBub3JtYWxpemVTZWFyY2godGhpcy5zZWFyY2hWYWx1ZSwgdGhpcy5jYXNlU2Vuc2l0aXZlU2VhcmNoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4U3RyID0gYCR7cmVnZXhTZWFyY2hWYWx1ZX0ke3RoaXMuRVhDTFVERV9IVE1MX1RBR1NfUkVHRVh9YDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBub3JtYWxpemVTZWFyY2goXG4gICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlU2VhcmNoXG4gICAgICAgICAgICApLnNlYXJjaChyZWdleFN0cik7XG4gICAgICAgICAgICBpZiAoc3RhcnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsYWJlbCA9IGAke1xuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID4gMCA/IGxhYmVsLnN1YnN0cmluZygwLCBzdGFydEluZGV4KSA6ICcnXG4gICAgICAgICAgICAgICAgfTxiPiR7bGFiZWwuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ICsgdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICApfTwvYj4ke1xuICAgICAgICAgICAgICAgICAgICBsYWJlbC5sZW5ndGggPiBzdGFydEluZGV4ICsgdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbGFiZWwuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCArIHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG5cbiAgICBvbkNsZWFyKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5vbkNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UobnVsbCk7XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maWx0ZXJFbGVtZW50cygpO1xuICAgIH1cblxuICAgIGRpc3BsYXlDbGVhckJ1dHRvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIG9mKCEhdGhpcy5pbnB1dFZhbHVlICYmICF0aGlzLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBvbkNsaWNrU3VnZ2VzdGlvbihlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZ2V0TGFiZWwoZWxlbWVudCkpO1xuICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuXG4gICAgICAgIC8vIEZvcmNlIHRoZSBmb2N1cyBvbiB0aGUgaW5wdXQgdG8gZW5zdXJlIHRoYXQgVm9pY2VPdmVyIGRvZXNuJ3Qgc2V0IHRoZSBmb2N1cyBvbiBhbm90aGVyIGZpZWxkIG9uIHRoZSBwYWdlLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNPbklucHV0KCk7XG4gICAgICAgICAgICAvLyBUaGUgaW5wdXQgc2hvdWxkbid0IGJlIG1hcmtlZCBhcyBmb2N1c2VkIGFzIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgbGlzdC5cbiAgICAgICAgICAgIHRoaXMuaW5wdXRIYXNGb2N1cyA9IGZhbHNlO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlMaXN0Ym94KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpc1Zpc2libGUgPVxuICAgICAgICAgICAgdGhpcy5pbnB1dEhhc0ZvY3VzICYmXG4gICAgICAgICAgICAhdGhpcy5oaWRlU3VnZ2VzdGlvbnMgJiZcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkRWxlbWVudHMgJiZcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkRWxlbWVudHMubGVuZ3RoID4gMDtcbiAgICAgICAgaWYgKCFpc1Zpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1Zpc2libGU7XG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlRGVzY2VuZGFudElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3VsZERpc3BsYXlMaXN0Ym94KCkgJiYgdGhpcy5hY3RpdmVEZXNjZW5kYW50SWRcbiAgICAgICAgICAgID8gdGhpcy5hY3RpdmVEZXNjZW5kYW50SWRcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBzaG93U3VnZ2VzdGlvbnNXaGVuSW5wdXRIYXNGb2N1c0FuZElzRW1wdHkodmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5pbnB1dEhhc0ZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJFbGVtZW50cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclNlYXJjaElucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHluYW1pY0VsZW1lbnRzQ2hhbmdlKGNoYW5nZTogU2ltcGxlQ2hhbmdlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1N1Z2dlc3Rpb25MaXN0RHluYW1pYykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UgJiYgIWNoYW5nZS5maXJzdENoYW5nZSAmJiAhIXRoaXMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudHMoKVxuICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN1Z2dlc3Rpb25zRGlzcGxheWVkKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZTogYW55KSA9PiB0aGlzLm1hdGNoUmVzdWx0KGUpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhck9uQmx1clRpbWVvdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRCbHVyVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmN1cnJlbnRCbHVyVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Qmx1clRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2VsZWN0ZWRFbGVtZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5nZXRTZWxlY3RlZEVsZW1lbnQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbnB1dFZhbHVlKFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBoaWRlU3VnZ2VzdGlvbnM6IGJvb2xlYW4gPSB0cnVlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmIChoaWRlU3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICBuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMgPSBoaWRlU3VnZ2VzdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmVyaWZpZXMgaWYgdmFsdWUgaW4gaW5wdXQgbWF0Y2hlcyBhIHZhbHVlIGZyb20gc3VnZ2VzdGlvbnMuIElmIG5vdCwgZW1wdHkgdGhlIGlucHV0IGlmIHRoZSBjdXN0b20gdmFsdWVcbiAgICAgKiBvcHRpb24gaXMgbm90IHNldC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEhdGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0VsZW1lbnQgPSB0aGlzLmVsZW1lbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYTogYW55KSA9PiB0aGlzLmdldExhYmVsKGEpID09PSB0aGlzLmlucHV0VmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGluZ0VsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldFZhbHVlKG1hdGNoaW5nRWxlbWVudFswXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYW51YWxseVVwZGF0ZVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93Q3VzdG9tVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdNb2RlbCA9IHRoaXMuZ2V0Q3VzdG9tVmFsdWUodGhpcy5pbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hbnVhbGx5VXBkYXRlVmFsdWUobmV3TW9kZWwpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFudWFsbHlVcGRhdGVWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdWdnZXN0aW9uc0Rpc3BsYXllZChcbiAgICAgICAgaGlkZVN1Z2dlc3Rpb25zOiBib29sZWFuLFxuICAgICAgICBkaXNwbGF5ZWRFbGVtZW50czogYW55W11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXREaXNwbGF5ZWRFbGVtZW50cyhkaXNwbGF5ZWRFbGVtZW50cyk7XG4gICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gaGlkZVN1Z2dlc3Rpb25zO1xuICAgICAgICB0aGlzLm5vdGlmeVNjcmVlblJlYWRlclVzZXJzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREaXNwbGF5ZWRFbGVtZW50cyhmaWx0ZXJlZEVsZW1lbnRzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50SWQgPSBudWxsO1xuICAgICAgICB0aGlzLmRpc3BsYXllZEVsZW1lbnRzID0gZmlsdGVyZWRFbGVtZW50cztcblxuICAgICAgICB0aGlzLnJlc2l6ZURpc3BsYXlWaWV3UG9ydChmaWx0ZXJlZEVsZW1lbnRzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2l6ZURpc3BsYXlWaWV3UG9ydChmaWx0ZXJlZEVsZW1lbnRzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEhZmlsdGVyZWRFbGVtZW50cykge1xuICAgICAgICAgICAgaWYgKGZpbHRlcmVkRWxlbWVudHMubGVuZ3RoIDwgdGhpcy5OQl9JVEVNU19WSVNJQkxFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5WSUVXX1BPUlRfSEVJR0hUID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtSGVpZ2h0SW5TdWdnZXN0aW9uTGlzdEluUHggKlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoISF0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgTUFYX0hFSUdIVCA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuTkJfSVRFTVNfVklTSUJMRSAqIHRoaXMuaXRlbUhlaWdodEluU3VnZ2VzdGlvbkxpc3RJblB4O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLlZJRVdfUE9SVF9IRUlHSFQgPCBNQVhfSEVJR0hUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuVklFV19QT1JUX0hFSUdIVCA9IE1BWF9IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZEVsZW1lbnQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U3VnZ2VzdGlvbkxpc3QoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXhTdHIgaW4gc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaGFzT3duUHJvcGVydHkoaW5kZXhTdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzdWdnZXN0aW9uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGFzc05hbWUuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TVUdHRVNUSU9OX0NVU1RPTV9BVFRSSUJVVEVfTEFCRUxfVkFMVUVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0TmV4dEVsZW1lbnQoZG93bjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9uc0Rpc3BsYXllZCgpKSB7XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U3VnZ2VzdGlvbkxpc3QoKTtcbiAgICAgICAgICAgIGxldCBuZXdJdGVtU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGRvd24gPyAxIDogLTE7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXhTdHIgaW4gc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaGFzT3duUHJvcGVydHkoaW5kZXhTdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzdWdnZXN0aW9uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXg6IG51bWJlciA9IGluZGV4ICsgc3RlcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudEl0ZW1TZWxlY3RlZCA9IGl0ZW0uY2xhc3NOYW1lLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTU1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEl0ZW1TZWxlY3RlZCAmJiBuZXh0SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld0l0ZW1TZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SW5kZXggPCBzdWdnZXN0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHN1Z2dlc3Rpb25zW25leHRJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN1Z2dlc3Rpb25zW3N1Z2dlc3Rpb25zLmxlbmd0aCAtIDFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIG5vIGl0ZW0gd2FzIHNlbGVjdGVkIGJlZm9yZSwgc2VsZWN0IGZpcnN0IG9uZVxuICAgICAgICAgICAgaWYgKCFuZXdJdGVtU2VsZWN0ZWQgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKChuZXdJdGVtU2VsZWN0ZWQgPSBzdWdnZXN0aW9uc1swXSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNYW5hZ2UgZ2xvYmFsIGl0ZW0gc2VsZWN0ZWQgaW5kZXhcbiAgICAgICAgICAgICAgICBjb25zdCBNQVhfSU5ERVggPSB0aGlzLmRpc3BsYXllZEVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbUdsb2JhbEluZGV4ICs9IHN0ZXA7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA+IE1BWF9JTkRFWCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSBNQVhfSU5ERVg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTY3JvbGxzIGRvd24gb3IgdXAgaWYgbmV3SXRlbVNlbGVjdGVkIGlzIG5vdCB2aXNpYmxlXG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uc05hdGl2ZUVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Zpc2libGUoc3VnZ2VzdGlvbnNOYXRpdmVFbGVtZW50LCBuZXdJdGVtU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG9JbmRleChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbUdsb2JhbEluZGV4XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3VnZ2VzdGlvbkxpc3QoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zTmF0aXZlRWxlbWVudCA9IHRoaXMuc3VnZ2VzdGlvbnNMaXN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vIENvbnZlcnRzIHRoZSBzdWdnZXN0aW9ucyB0byBhbiBhcnJheSB0byB3b3JrIGNvbnNpc3RlbnRseSBhY3Jvc3MgYnJvd3NlcnMuXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChzdWdnZXN0aW9uc05hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZWxlY3RJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xuICAgICAgICBpdGVtLmNsYXNzTmFtZSA9IGl0ZW0uY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICBgICR7dGhpcy5TVUdHRVNUSU9OX1NFTEVDVEVEX0NMQVNTfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICApO1xuICAgICAgICBpdGVtLmF0dHJpYnV0ZXNbJ2FyaWEtc2VsZWN0ZWQnXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0SXRlbShpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpdGVtLmNsYXNzTmFtZS5pbmNsdWRlcyh0aGlzLlNVR0dFU1RJT05fU0VMRUNURURfQ0xBU1MpKSB7XG4gICAgICAgICAgICBpdGVtLmNsYXNzTmFtZSArPSBgICR7dGhpcy5TVUdHRVNUSU9OX1NFTEVDVEVEX0NMQVNTfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtLmF0dHJpYnV0ZXNbJ2FyaWEtc2VsZWN0ZWQnXSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50SWQgPSBpdGVtLmlkO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWaXNpYmxlKHBhcmVudDogYW55LCBlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZWxlbWVudE9mZnNldFRvcCA9XG4gICAgICAgICAgICBlbGVtZW50Lm9mZnNldFRvcCArXG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCk7XG4gICAgICAgIC8vIGVsZW1lbnQgaXMgYmVsb3cgdmlzaWJsZSBhcmVhXG4gICAgICAgIGNvbnN0IGlzQmVsb3cgPVxuICAgICAgICAgICAgZWxlbWVudE9mZnNldFRvcCA8IHBhcmVudC5vZmZzZXRIZWlnaHQgKyBwYXJlbnQuc2Nyb2xsVG9wO1xuICAgICAgICAvLyBlbGVtZW50IGlzIGFib3ZlIHZpc2libGUgYXJlYVxuICAgICAgICBjb25zdCBpc0Fib3ZlID0gZWxlbWVudE9mZnNldFRvcCA+IHBhcmVudC5zY3JvbGxUb3A7XG4gICAgICAgIHJldHVybiBpc0JlbG93ICYmIGlzQWJvdmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWdnZXN0aW9uc0Rpc3BsYXllZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNMaXN0ICYmXG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zTGlzdC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpcnN0U3VnZ2VzdGlvbigpOiBzdHJpbmcge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zTGlzdCAmJlxuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0xpc3QubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdWdnZXN0aW9uc0xpc3QubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5pbm5lclRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlTY3JlZW5SZWFkZXJVc2VycygpOiB2b2lkIHtcbiAgICAgICAgLy8gRm9yY2VzIE5WREEgdG8gcmUtcmVhZCB0aGUgY29udGVudCBvZiB0aGUgc2Mtb25seSBub3RpZmljYXRpb24uXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uTWVzc2FnZVVwZGF0ZWQgPSAhdGhpcy5ub3RpZmljYXRpb25NZXNzYWdlVXBkYXRlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1hdGNoaW5nVmFsdWUoZWxlbWVudHM6IGFueSwgZWxlbVRvQ29tcGFyZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgLy8gTG9vayBmb3IgYSBwb3RlbnRpYWwgbWF0Y2hpbmcgdmFsdWUgaW4gdGhlIHNldFxuICAgICAgICBjb25zdCBtYXRjaGluZ0VsZW1lbnQgPSBlbGVtZW50cy5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLmFyZVZhbHVlc0VxdWFscyh2YWx1ZSwgZWxlbVRvQ29tcGFyZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudG9TdHJpbmcoKSA9PT0gZWxlbVRvQ29tcGFyZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE1hcCB3aXRoIHRoZSBsYWJlbC5cbiAgICAgICAgY29uc3QgbWF0Y2hpbmdWYWx1ZUxhYmVsID0gdGhpcy5nZXRMYWJlbChtYXRjaGluZ0VsZW1lbnRbMF0pO1xuXG4gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoZSB2YWx1ZSBpZiBjdXN0b20gdmFsdWVzIGFyZSBhbGxvd2VkIGFuZCB0aGVyZSdzIG5vIG1hdGNoLlxuICAgICAgICByZXR1cm4gdGhpcy5hbGxvd0N1c3RvbVZhbHVlXG4gICAgICAgICAgICA/IG1hdGNoaW5nVmFsdWVMYWJlbCB8fCB0aGlzLmdldE1vZGVsVmFsdWVEaXNwbGF5VmFsdWUoKVxuICAgICAgICAgICAgOiBtYXRjaGluZ1ZhbHVlTGFiZWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXRjaFJlc3VsdDxUPihlbGVtZW50OiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gbm9ybWFsaXplU2VhcmNoKFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgIHRoaXMuY2FzZVNlbnNpdGl2ZVNlYXJjaFxuICAgICAgICApO1xuICAgICAgICBsZXQgbGFiZWwgPSBub3JtYWxpemVTZWFyY2goXG4gICAgICAgICAgICB0aGlzLmdldExhYmVsKGVsZW1lbnQpLFxuICAgICAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlU2VhcmNoXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhYmVsID0gc3RyaXBIdG1sVGFncyhsYWJlbCk7XG4gICAgICAgIHJldHVybiBsYWJlbC5pbmNsdWRlcyhzZWFyY2hWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYW51YWxseVVwZGF0ZVZhbHVlKG5ld1ZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFuZXdWYWx1ZSB8fFxuICAgICAgICAgICAgIXRoaXMubW9kZWwgfHxcbiAgICAgICAgICAgICF0aGlzLmFyZVZhbHVlc0VxdWFscyhuZXdWYWx1ZSwgdGhpcy5tb2RlbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCB0byBkbyBvbiB0b3Agb2YgdGhlIHVwZGF0ZU5nTW9kZWwgYXNcbiAgICAgICAgICAgIC8vIHVwZGF0ZU5nTW9kZWwgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIG90aGVyIHNvdXJjZXMuXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZU5nTW9kZWwobmV3VmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VzdG9tVmFsdWUodmFsdWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmICghdGhpcy5jdXN0b21WYWx1ZU1vZGVsR2VuZXJhdG9yIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVZhbHVlTW9kZWxHZW5lcmF0b3IodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9kZWxWYWx1ZURpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMubW9kZWwgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHRoaXMubW9kZWxcbiAgICAgICAgICAgIDogdGhpcy5nZXRMYWJlbCh0aGlzLm1vZGVsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdFZhbHVlVG9EaXNwbGF5KHZhbHVlOiBhbnksIGVsZW1lbnRzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdmFsdWUuXG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJFbGVtZW50cyh0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1Ub0NvbXBhcmUgPSB2YWx1ZSA/IHZhbHVlIDogdGhpcy5kZWZhdWx0RWxlbWVudFZhbHVlO1xuXG4gICAgICAgIGlmIChlbGVtVG9Db21wYXJlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmdldE1hdGNoaW5nVmFsdWUoZWxlbWVudHMsIGVsZW1Ub0NvbXBhcmUpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJFbGVtZW50cyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWF0Y2hWYWx1ZU9uTW9kZWxDaGFuZ2VTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzU3VnZ2VzdGlvbkxpc3REeW5hbWljKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFZhbHVlVG9EaXNwbGF5T25FbGVtZW50c0xvYWRlZFN1YnNjcmlwdGlvbiA9XG4gICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuYXNPYnNlcnZhYmxlKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHNMb2FkZWQuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoW3ZhbHVlLCBlbGVtZW50c10pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFZhbHVlVG9EaXNwbGF5KHZhbHVlLCBlbGVtZW50cylcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5tb2RlbENoYW5nZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudHMoKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKGVsZW1lbnRzOiBhbnkpID0+ICEhZWxlbWVudHMpKVxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlLHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlbGVtZW50czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFZhbHVlVG9EaXNwbGF5KHZhbHVlLCBlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXNjYXBlUmVnZXhwKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSh0aGlzLlJFR0VYX1RPX0VTQ0FQRV9SRUdFWCwgJ1xcXFwkJicpO1xuICAgIH1cbn1cbiIsIjwhLS1cbiAgICBBY2Nlc3NpYmxlIGF1dG9jb21wbGV0ZSB3aWRnZXQgZm9sbG93aW5nIHRoZSBsaXN0Ym94IGNvbWJvYm94IHBhdHRlcm4uXG4gICAgcmVmOiBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMS9leGFtcGxlcy9jb21ib2JveC9hcmlhMS4xcGF0dGVybi9saXN0Ym94LWNvbWJvLmh0bWxcbi0tPlxuPGRpdlxuICAgIGNsYXNzPVwiZm9ybS1ncm91cCBhdXRvY29tcGxldGUtZm9ybS1ncm91cFwiXG4gICAgW2NsYXNzLmhhcy1kYW5nZXJdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgIFtjbGFzcy52ZC1mb3JtLWdyb3VwLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJzaG91bGREaXNwbGF5TGlzdGJveCgpXCJcbiAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIidsaXN0Ym94J1wiXG4gICAgW2F0dHIuaWRdPVwiYnVpbGRJZCgnQ29udGFpbmVyJylcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuPlxuICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImZvcm0tbGFiZWxcIlxuICAgICAgICBbYXR0ci5mb3JdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICAqbmdJZj1cIiEhbGFiZWxcIlxuICAgICAgICBbbmdDbGFzc109XCJpc0xhYmVsU3JPbmx5ID8gJ3Zpc3VhbGx5LWhpZGRlbicgOiBsYWJlbFN0eWxlTW9kaWZpZXJcIlxuICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKSArICdMYWJlbCdcIlxuICAgID5cbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJsYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIXJlcXVpcmVkICYmICFoaWRlTm90UmVxdWlyZWRFeHRyYUxhYmVsXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7ICdmb2Vobi1pbnB1dC5vcHRpb25hbCcgfCBmcm9tRGljdGlvbmFyeSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9sYWJlbD5cblxuICAgIDxmb2Vobi12YWxpZGF0aW9uLWFsZXJ0cyBbY29tcG9uZW50XT1cInRoaXNcIj48L2ZvZWhuLXZhbGlkYXRpb24tYWxlcnRzPlxuXG4gICAgPGRpdiAqbmdJZj1cIiFlbGVtZW50c1wiPkNoYXJnZW1lbnQuLi48L2Rpdj5cblxuICAgIDxzbWFsbFxuICAgICAgICAqbmdJZj1cImhlbHBUZXh0XCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnSGVscCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiaGVscFRleHRcIlxuICAgID48L3NtYWxsPlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPGRpdiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPlxuICAgICAgICBVdGlsaXNleiBsZXMgZmzDqGNoZXMgaGF1dCBldCBiYXMgcG91ciBuYXZpZ3VlciBkYW5zIGxhIGxpc3RlLCBwdWlzIGxhXG4gICAgICAgIHRvdWNoZSBFbnRyZXIgcG91ciBzw6lsZWN0aW9ubmVyIHVuZSBvcHRpb24uXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEdpdmUgc2NyZWVuIHJlYWRlciB1c2VycyB0aGUgdG90YWwgb2YgcmVzdWx0cyB3aGVuIHRoZW4gaW5wdXQgY2hhbmdlcy4gLS0+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgICBhcmlhLWF0b21pYz1cInRydWVcIlxuICAgICAgICAqbmdJZj1cImRpc3BsYXllZEVsZW1lbnRzICYmIHNob3VsZERpc3BsYXlMaXN0Ym94KClcIlxuICAgID5cbiAgICAgICAgTm9tYnJlIGRlIHLDqXN1bHRhdHM6IHt7IGRpc3BsYXllZEVsZW1lbnRzLmxlbmd0aCB9fVxuICAgICAgICA8IS0tIFRyaWNrIHRvIGhhdmUgTlZEQSByZS1yZWFkaW5nIHRoaXMgcHJvcGVybHkgLS0+XG4gICAgICAgIDxzcGFuPnt7IG5vdGlmaWNhdGlvbk1lc3NhZ2VVcGRhdGVkID8gJywnIDogJywsJyB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxpbnB1dFxuICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGF1dG9jb21wbGV0ZVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICBbbmFtZV09XCJuYW1lIHx8IGxhYmVsXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCBudWxsXCJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWRTdWJqZWN0IHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImdldERlc2NyaWJlZEJ5KClcIlxuICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkIHx8IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KCkgfHwgbnVsbFwiXG4gICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCInb2ZmJ1wiXG4gICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJnZXRBY3RpdmVEZXNjZW5kYW50SWQoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtb3duc109XCJcbiAgICAgICAgICAgIHNob3VsZERpc3BsYXlMaXN0Ym94KCkgPyBidWlsZENoaWxkSWQoKSArICdMaXN0Ym94JyA6IG51bGxcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIubGlzdF09XCJidWlsZENoaWxkSWQoKSArICdsaXN0J1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNob3dTdWdnZXN0aW9uc1doZW5JbnB1dEhhc0ZvY3VzQW5kSXNFbXB0eSgkZXZlbnQpXCJcbiAgICAgICAgKGlucHV0KT1cImhhbmRsZVNlYXJjaElucHV0Q2hhbmdlKGVudHJ5Q29tcG9uZW50LnZhbHVlKVwiXG4gICAgICAgIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxuICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwib25JbnB1dENsaWNrKClcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAjZW50cnlDb21wb25lbnRcbiAgICAvPlxuXG4gICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJhdXRvY29tcGxldGUtY2xlYXItYnV0dG9uIGJ0blwiXG4gICAgICAgIChjbGljayk9XCJvbkNsZWFyKClcIlxuICAgICAgICBbaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnQ2xlYXInXCJcbiAgICA+XG4gICAgICAgIDxmb2Vobi1pY29uLXRpbWVzXG4gICAgICAgICAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1jbGVhci1idXR0b24taWNvblwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ2ZvZWhuLWlucHV0LmNsZWFyLWJ1dHRvbi5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVwiXG4gICAgICAgID48L2ZvZWhuLWljb24tdGltZXM+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cCBzdWdnZXN0aW9ucy1saXN0LWNvbnRhaW5lclwiXG4gICAgICAgICpuZ0lmPVwic2hvdWxkRGlzcGxheUxpc3Rib3goKVwiXG4gICAgPlxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICBbaXRlbVNpemVdPVwiaXRlbUhlaWdodEluU3VnZ2VzdGlvbkxpc3RJblB4XCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiVklFV19QT1JUX0hFSUdIVFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgpICsgJ0xpc3Rib3gnXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYnVpbGRDaGlsZElkKCkgKyAnTGFiZWwnXCJcbiAgICAgICAgICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9ucy1saXN0XCJcbiAgICAgICAgICAgICAgICAjc3VnZ2VzdGlvbnNMaXN0XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50IG9mIGRpc3BsYXllZEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgaVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKSArICdPcHRpb24nICsgaVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrU3VnZ2VzdGlvbihlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25MaXN0T3B0aW9uTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25MaXN0T3B0aW9uRm9jdXMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uTGlzdE9wdGlvbkJsdXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cIml0ZW1IZWlnaHRJblN1Z2dlc3Rpb25MaXN0SW5QeFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmxhYmVsLXZhbHVlXT1cImdldExhYmVsKGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRW5zdXJlcyB0aGF0IHNjcmVlbiByZWFkZXJzIGRvbid0IGNvbnNpZGVyIGFueSBzcGFjZXMgYXJvdW5kIHRoZSBlbXBoYXNpcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJnZXRMYWJlbFdpdGhFbXBoYXNpcyhlbGVtZW50KVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
675
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCw0RUFBNEU7QUFDNUUsT0FBTyxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUtMLE1BQU0sRUFHTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGVBQWUsRUFDZixhQUFhLEVBRWIsRUFBRSxFQUNGLE9BQU8sRUFFVixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDSCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixLQUFLLEVBQ0wsR0FBRyxFQUNOLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBRTNFLCtDQUErQztBQUMvQyxTQUFTLGFBQWEsQ0FBQyxLQUFhO0lBQ2hDLHlGQUF5RjtJQUN6RixJQUFJLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLE9BQU8sS0FBSyxDQUFDLFNB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QUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztnQkFDekQsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKLGlGQU1VLHdCQUF3QixnVENsRnZDLDBvS0E2SUE7OzRGRC9EYSwwQkFBMEI7a0JBWnRDLFNBQVM7K0JBQ0ksb0JBQW9CLGFBR25CO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDJCQUEyQixDQUFDOzRCQUN6RCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjsyRUFPRCxxQkFBcUI7c0JBRHBCLFNBQVM7dUJBQUMsd0JBQXdCO2dCQUluQyxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUk1QixZQUFZO3NCQURYLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk3Qyx3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBU04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBT04sdUJBQXVCO3NCQUR0QixLQUFLO2dCQVdOLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFJTiw4QkFBOEI7c0JBRDdCLEtBQUs7Z0JBUU4sc0JBQXNCO3NCQURyQixLQUFLO2dCQUlOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFPTixlQUFlO3NCQURkLE1BQU07Z0JBdUVILFFBQVE7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8vIFRoaXMgY29tcG9uZW50IHVzZXMgc29tZSBFUzcgZmVhdHVyZXMgdGhhdCBhcmUgbm90IHBvbHlmaWxsZWQgYnkgQW5ndWxhci5cbmltcG9ydCAnY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzJztcblxuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZSxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBvZixcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvblxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIGZpbHRlcixcbiAgICBmaXJzdCxcbiAgICBtYXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGb2VobkNoZWNrYWJsZUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9laG4tY2hlY2thYmxlcy9mb2Vobi1jaGVja2FibGUtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IEZvZWhuSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9mb2Vobi1pbnB1dC9mb2Vobi1pbnB1dC5jb21wb25lbnQnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gbm9ybWFsaXplVXRmOCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBTb21lIGJyb3dzZXJzIHN1Y2ggYXMgSUUxMSBkb24ndCBzdXBwb3J0IHRoZSBmZWF0dXJlLiBBZGQgdGhlIHBvbHlmaWxsIGlmIHlvdSB3YW50IGl0LlxuICAgIGlmICh0eXBlb2YgdmFsdWUubm9ybWFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYWNjZW50c1xuICAgIHJldHVybiB2YWx1ZS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaCh2YWx1ZTogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlU2VhcmNoOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2FzZVNlbnNpdGl2ZVNlYXJjaCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplVXRmOCh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBub3JtYWxpemVVdGY4KHZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gc3RyaXBIdG1sVGFncyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKDwoW14+XSspPikvZ2ksICcnKTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmb2Vobi1hdXRvY29tcGxldGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb2Vobi1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZvZWhuLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZvZWhuSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb2VobkF1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb2VobkF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICAgIGV4dGVuZHMgRm9laG5DaGVja2FibGVHcm91cENvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xue1xuICAgIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KVxuICAgIHZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgQFZpZXdDaGlsZCgnc3VnZ2VzdGlvbnNMaXN0JylcbiAgICBzdWdnZXN0aW9uc0xpc3Q6IGFueTtcblxuICAgIEBWaWV3Q2hpbGQoJ2VudHJ5Q29tcG9uZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBpbnB1dEVsZW1lbnQ6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEFsbG93IHRvIHByb3ZpZGUgY3VzdG9tIHZhbHVlcyB0byB0aGUgYXV0b2NvbXBsZXRlLlxuICAgICAqXG4gICAgICogQSBjdXN0b20gdmFsdWUgaXMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBpbiB0aGUgYGVsZW1lbnRzYCBzZXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd0N1c3RvbVZhbHVlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgaWYgc3VnZ2VzdGlvbiBlbGVtZW50cyBsaXN0IGlzIGJlaW5nIHJldHJpZXZlZCBkeW5hbWljYWxseSB3aGlsZSB1c2VyIGlucHV0cyBpbiBzZWFyY2ggZmllbGQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1N1Z2dlc3Rpb25MaXN0RHluYW1pYyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQWxsb3cgdG8gcHJvdmlkZSBhIGdlbmVyYXRvciB0byBjcmVhdGUgdGhlIG1vZGVsIHdpdGggY3VzdG9tIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHR5cGUgb2YgdGhlIG1vZGVsIGlzIGFuIG9iamVjdCBhbmQgbm90IGp1c3RcbiAgICAgKiBhIHN0cmluZy4gVXNlIHRoaXMgaXMgYGFsbG93Q3VzdG9tVmFsdWVgIGlzIHRydWUgYW5kIGBlbGVtZW50VmFsdWVgXG4gICAgICogaXMgYSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGN1c3RvbVZhbHVlTW9kZWxHZW5lcmF0b3I6IChpbnB1dDogc3RyaW5nKSA9PiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1IZWlnaHRJblN1Z2dlc3Rpb25MaXN0SW5QeCA9IDQwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN1Z2dlc3Rpb24gbGFiZWwgdXNlZCBpbiB0aGUgZGlzcGxheWVkIGxpc3QuIENhbiBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uXG4gICAgICogZmFsbGJhY2sgb24gJ2VsZW1lbnRMYWJlbCdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGVsZW1lbnRTdWdnZXN0aW9uTGFiZWw6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgY2FzZVNlbnNpdGl2ZVNlYXJjaCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIGNoYW5nZXMgc2VhcmNoIGlucHV0IHZhbHVlXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgdXNlclNlYXJjaElucHV0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBpbnB1dFZhbHVlOiBzdHJpbmc7XG4gICAgc2VhcmNoVmFsdWU6IHN0cmluZztcbiAgICBpbnB1dEhhc0ZvY3VzOiBib29sZWFuO1xuICAgIGhpZGVTdWdnZXN0aW9ucyA9IHRydWU7XG4gICAgY3VycmVudEJsdXJUaW1lcjogYW55O1xuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICBWSUVXX1BPUlRfSEVJR0hUOiBudW1iZXI7XG5cbiAgICBkaXNwbGF5ZWRFbGVtZW50czogYW55W107XG4gICAgbm90aWZpY2F0aW9uTWVzc2FnZVVwZGF0ZWQ6IGJvb2xlYW47XG5cbiAgICBkaXNhYmxlZFN1YmplY3Q6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICAgIHByaXZhdGUgcGVuZGluZ0Rpc2FibGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgZWxlbWVudHNMb2FkZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIGN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSAtMTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE5CX0lURU1TX1ZJU0lCTEUgPSA1O1xuXG4gICAgcHJpdmF0ZSBmaWx0ZXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIGZpbHRlclN1YmNyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBsaXN0SGFzRm9jdXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBhY3RpdmVEZXNjZW5kYW50SWQ6IHN0cmluZztcblxuICAgIHByaXZhdGUgb25Jbml0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBtb2RlbENoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgZWxlbWVudHNMb2FkZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTUyA9ICdzdWdnZXN0aW9uLXNlbGVjdGVkJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IEVYQ0xVREVfSFRNTF9UQUdTX1JFR0VYID0gJygoPz1bXj5dKjwpfCg/IVtePF0qPikpJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IFNVR0dFU1RJT05fQ1VTVE9NX0FUVFJJQlVURV9MQUJFTF9WQUxVRSA9ICdsYWJlbC12YWx1ZSc7XG4gICAgLy8gSW5zcGlyZWQgZnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMjZXNjYXBpbmdcbiAgICBwcml2YXRlIHJlYWRvbmx5IFJFR0VYX1RPX0VTQ0FQRV9SRUdFWCA9IC9bLiorP14ke30oKXxbXFxdXFxcXF0vZztcblxuICAgIHByaXZhdGUgdXNlclNlYXJjaElucHV0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSB1c2VyU2VhcmNoSW5wdXRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBzZWxlY3RWYWx1ZVRvRGlzcGxheU9uRWxlbWVudHNMb2FkZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHpvbmU6IE5nWm9uZSkge1xuICAgICAgICBzdXBlcih6b25lKTtcbiAgICAgICAgdGhpcy5maWx0ZXJTdWJjcmlwdGlvbiA9IHRoaXMuZmlsdGVyU3ViamVjdFxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuZmlsdGVyRWxlbWVudHMuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgLy8gTmVlZCB0byBzdWJzY3JpYmUgb24gRXZlbnRFbWl0dGVyICdlbGVtZW50c0xvYWRlZCcgb3RoZXJ3aXNlIGVsZW1lbnRzIHdpdGggSFRNTCBkb2VzIG5vdCB3b3JrLi4uXG4gICAgICAgIHRoaXMuZWxlbWVudHNMb2FkZWRTdWJzY3JpcHRpb24gPSB0aGlzLmVsZW1lbnRzTG9hZGVkXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKG1hcChlbGVtcyA9PiAhIWVsZW1zKSlcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUobG9hZGVkID0+IHRoaXMuZWxlbWVudHNMb2FkZWRTdWJqZWN0Lm5leHQobG9hZGVkKSk7XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlZFN1YmplY3QgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0Rpc2FibGVkU3ViamVjdC5hc09ic2VydmFibGUoKSxcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNMb2FkZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgIF0pLnBpcGUobWFwKChbZGlzYWJsZWRdKSA9PiAoZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbCkpKTtcblxuICAgICAgICB0aGlzLlZJRVdfUE9SVF9IRUlHSFQgPVxuICAgICAgICAgICAgdGhpcy5pdGVtSGVpZ2h0SW5TdWdnZXN0aW9uTGlzdEluUHggKiB0aGlzLk5CX0lURU1TX1ZJU0lCTEU7XG4gICAgfVxuXG4gICAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nRGlzYWJsZWRTdWJqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0Rpc2FibGVkU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudHMoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzcGxheWVkRWxlbWVudHModGhpcy5lbGVtZW50cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlTWluQ2hhcnNDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBgU2Fpc2lzc2V6IGF1IG1vaW5zICR7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnRcbiAgICAgICAgICAgIH0gY2FyYWN0w6hyZSR7dGhpcy5zZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnQgPiAxID8gJ3MnIDogJyd9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25Jbml0U3Vic2NyaXB0aW9uID0gdGhpcy5vbkluaXRTdWJqZWN0XG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEhhY2sgdG8gcmVmcmVzaCB0aGUgZGF0YSBvbmNlIHRoZSBsaXN0IGlzIGRvd25sb2FkZWQuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVOZ01vZGVsKHRoaXMubW9kZWxfKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdoZW4gdGhlIG1vZGVsIGNoYW5nZXMsIHNlbGVjdCB0aGUgcmlnaHQgdmFsdWUgdG8gZGlzcGxheS5cbiAgICAgICAgdGhpcy5tYXRjaFZhbHVlT25Nb2RlbENoYW5nZVN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgIHRoaXMudXNlclNlYXJjaElucHV0U3Vic2NyaXB0aW9uID0gdGhpcy51c2VyU2VhcmNoSW5wdXRTdWJqZWN0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byB0cmlnZ2VyIHNlYXJjaGVkIGlucHV0IGlmIGl0IGhhcyBub3QgY2hhbmdlZFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IHdlIG9ubHkgY2F0Y2ggdGhlIGxhdGVzdCBvZiBtdWx0aXBsZVxuICAgICAgICAgICAgICAgIC8vIHF1aWNrIHVwZGF0ZXMsIGFuZCB0byBtYWtlIHN1cmUgdGhlIHVzZXJJbnB1dCBpcyBmaXJlZCB3aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCBpcyBkb25lIHVwZGF0aW5nLlxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU2VhcmNoSW5wdXQuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLmZpbHRlclN1YmNyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm9uSW5pdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5tb2RlbENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5lbGVtZW50c0xvYWRlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy51c2VyU2VhcmNoSW5wdXRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0VmFsdWVUb0Rpc3BsYXlPbkVsZW1lbnRzTG9hZGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIC8vIEhhbmRsZSBjaGFuZ2Ugb24gdGhlIGR5bmFtaWMgZWxlbWVudHMgaW5wdXQuXG4gICAgICAgIHRoaXMub25EeW5hbWljRWxlbWVudHNDaGFuZ2UoY2hhbmdlcy5lbGVtZW50cyk7XG4gICAgfVxuXG4gICAgb25JbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlclN1YmplY3QubmV4dCgpO1xuICAgICAgICB0aGlzLmlucHV0SGFzRm9jdXMgPSB0cnVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodGhpcy5pc0VtcHR5KHRoaXMuc2VhcmNoVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnQgPT09IDApIHx8XG4gICAgICAgICAgICAoIXRoaXMuaXNFbXB0eSh0aGlzLnNlYXJjaFZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50IDw9IHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNsZWFyT25CbHVyVGltZW91dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbnB1dENsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oaWRlU3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXb3JrYXJvdW5kIGZvciBJRTExIHRoYXQgbG9zZXMgZm9jdXMgb24gaW5wdXQgd2hlbiBzY3JvbGxiYXIgaXMgY2xpY2tlZFxuICAgIC8vIC0tPiBwdXQgYmFjayBmb2N1cyBvbiBpbnB1dCBhbmQgY2FuY2VsIHN1Z2dlc3Rpb25zIGhpZGluZyB0aW1lclxuICAgIHNldEZvY3VzT25JbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLmNsZWFyT25CbHVyVGltZW91dCgpO1xuICAgIH1cblxuICAgIG9uSW5wdXRCbHVyKCk6IHZvaWQge1xuICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIG9uQ2xpY2tTdWdnZXN0aW9uLiBTZXR0aW5nIGlucHV0SGFzRm9jdXMgdG8gZmFsc2UgbWFrZXMgc3VnZ2VzdGlvbnMgZGlzYXBwZWFyZWRcbiAgICAgICAgLy8gYW5kIG9uQ2xpY2tTdWdnZXN0aW9uIGlzIG5ldmVyIGNhbGxlZC4gU2V0dGluZyBhIHRpbWVvdXQgaGVyZSBhdm9pZCB0aGlzIHByb2JsZW0uXG4gICAgICAgIHRoaXMuY3VycmVudEJsdXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gRG9uJ3QgY2xvc2UgdGhlIGxpc3QgaWYgdGhlIGxpc3QgaGFzIHRoZSBmb2N1cy4gVGhpcyBpcyBkb25lIHRvIGFsbG93IFZvaWNlT3ZlciB1c2VycyBvbiBpT1MgdG9cbiAgICAgICAgICAgIC8vIHNlbGVjdCBhbiBvcHRpb24gd2l0aCB0aGVpciBmaW5nZXIuIFNhbWUgaWYgZm9jdXMgaXMgc2V0IG9uIGxpc3Qgc2Nyb2xsIGJhclxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF0aGlzLmxpc3RIYXNGb2N1cyAmJlxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuY2xhc3NOYW1lICE9PVxuICAgICAgICAgICAgICAgICAgICAnZm9ybS1ncm91cCBhdXRvY29tcGxldGUtZm9ybS1ncm91cCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRIYXNGb2N1cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbktleURvd24oa2V5RXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgLy8gVGhlIGlucHV0IG1pZ2h0IG5vdCBiZSBtYXJrZWQgYXMgZm9jdXNlZCBpbiBjYXNlIHRoZSB1c2VyIHNlbGVjdHMgYSB2YWx1ZSBmcm9tIHRoZSBsaXN0LlxuICAgICAgICB0aGlzLmlucHV0SGFzRm9jdXMgPSB0cnVlO1xuICAgICAgICBjb25zdCBwcm9wYWdhdGUgPSB0aGlzLm9uS2V5RG93bklubmVyKGtleUV2ZW50KTtcbiAgICAgICAgaWYgKHByb3BhZ2F0ZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGFnYXRlO1xuICAgIH1cblxuICAgIG9uS2V5RG93bklubmVyKGtleUV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIElFIGRvZXNuJ3Qgc3VwcG9ydCBrZXlFdmVudC5jb2RlLCBhbmQgaGFzIGRpZmZlcmVudCB2YWx1ZXNcbiAgICAgICAgLy8gaW4ga2V5RXZlbnQua2V5IChEb3duIGluc3RlYWQgb2YgQXJyb3dEb3duIGZvciBpbnN0YW5jZSksIGhlbmNlIHRoZSBtdWx0aS1zdXBwb3J0LlxuICAgICAgICBjb25zdCBpZTExQ29tcGF0aWJsZUNvZGUgPSBrZXlFdmVudC5jb2RlIHx8IGtleUV2ZW50LmtleTtcbiAgICAgICAgc3dpdGNoIChpZTExQ29tcGF0aWJsZUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3VnZ2VzdGlvbnNEaXNwbGF5ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3ROZXh0RWxlbWVudCh0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1VwJzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dEVsZW1lbnQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAnU3BhY2ViYXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFNlbGVjdGVkRWxlbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEZpcnN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IGJlZm9yZSBmb3JtIHN1Ym1pdCwgY2FsbHMgY2hlY2tBbmRTZXRJbnB1dFZhbHVlIGJlY2F1c2UgZm9jdXNvdXQgaXMgY2FsbGVkIHRvbyBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAobmV3IHZhbHVlIGlzIGFscmVhZHkgbG9zdCkuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gYXV0b2NvbXBsZXRlIHdpdGhvdXQgbmVlZCB0byBzZWxlY3QgaXQgbWFudWFsbHlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZFNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRTZXRJbnB1dFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgIGNhc2UgJ1JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9uc0Rpc3BsYXllZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG9uTGlzdE9wdGlvbk1vdXNlRG93bihldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFNhZmFyaSB0cmlnZ2VycyBmb2N1c091dCBiZWZvcmUgY2xpY2ssIGJ1dCBpZiB5b3VcbiAgICAgICAgLy8gcHJldmVudERlZmF1bHQgb24gbW91c2VEb3duLCB5b3UgY2FuIHN0b3AgdGhhdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgICAgLy8gSWYgdGhpcyBpcyByZW1vdmVkLCBjbGlja2luZyBvbiBhbiBvcHRpb24gaW4gU2FmYXJpIHdpbGwgdHJpZ2dlclxuICAgICAgICAvLyBgaGFuZGxlT3B0aW9uQmx1cmAsIHdoaWNoIGNsb3NlcyB0aGUgbWVudSwgYW5kIHRoZSBjbGljayB3aWxsXG4gICAgICAgIC8vIHRyaWdnZXIgb24gdGhlIGVsZW1lbnQgdW5kZXJuZWF0aCBpbnN0ZWFkLlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uTGlzdE9wdGlvbkZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxpc3RIYXNGb2N1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25MaXN0T3B0aW9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saXN0SGFzRm9jdXMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmaWx0ZXJFbGVtZW50cyhoaWRlU3VnZ2VzdGlvbnM6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlO1xuXG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc0VtcHR5KHRoaXMuc2VhcmNoVmFsdWUpIHx8XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCA8IHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREaXNwbGF5ZWRFbGVtZW50cyh0aGlzLmVsZW1lbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdWdnZXN0aW9uc0Rpc3BsYXllZCh0cnVlLCBbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN1Z2dlc3Rpb25zRGlzcGxheWVkKFxuICAgICAgICAgICAgICAgIGhpZGVTdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZTogYW55KSA9PiB0aGlzLm1hdGNoUmVzdWx0KGUpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFN1Z2dlc3Rpb25MYWJlbChlbGVtZW50OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFN1Z2dlc3Rpb25MYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVsZW1lbnRTdWdnZXN0aW9uTGFiZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROZXN0ZWRQcm9wZXJ0eShlbGVtZW50LCB0aGlzLmVsZW1lbnRTdWdnZXN0aW9uTGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRTdWdnZXN0aW9uTGFiZWwoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZ2V0TGFiZWxXaXRoRW1waGFzaXMoZWxlbTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGxhYmVsID0gdGhpcy5nZXRTdWdnZXN0aW9uTGFiZWwoZWxlbSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRW1wdHkodGhpcy5zZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1JlZ2V4cENoYXJzVG9Fc2NhcGUgPSBSZWdFeHAoXG4gICAgICAgICAgICAgICAgdGhpcy5SRUdFWF9UT19FU0NBUEVfUkVHRVguc291cmNlXG4gICAgICAgICAgICApLnRlc3QodGhpcy5zZWFyY2hWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCByZWdleFNlYXJjaFZhbHVlID0gaGFzUmVnZXhwQ2hhcnNUb0VzY2FwZVxuICAgICAgICAgICAgICAgID8gdGhpcy5lc2NhcGVSZWdleHAoXG4gICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhc2VTZW5zaXRpdmVTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBub3JtYWxpemVTZWFyY2godGhpcy5zZWFyY2hWYWx1ZSwgdGhpcy5jYXNlU2Vuc2l0aXZlU2VhcmNoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4U3RyID0gYCR7cmVnZXhTZWFyY2hWYWx1ZX0ke3RoaXMuRVhDTFVERV9IVE1MX1RBR1NfUkVHRVh9YDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBub3JtYWxpemVTZWFyY2goXG4gICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlU2VhcmNoXG4gICAgICAgICAgICApLnNlYXJjaChyZWdleFN0cik7XG4gICAgICAgICAgICBpZiAoc3RhcnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsYWJlbCA9IGAke1xuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID4gMCA/IGxhYmVsLnN1YnN0cmluZygwLCBzdGFydEluZGV4KSA6ICcnXG4gICAgICAgICAgICAgICAgfTxiPiR7bGFiZWwuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ICsgdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICApfTwvYj4ke1xuICAgICAgICAgICAgICAgICAgICBsYWJlbC5sZW5ndGggPiBzdGFydEluZGV4ICsgdGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbGFiZWwuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCArIHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG5cbiAgICBvbkNsZWFyKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5vbkNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UobnVsbCk7XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maWx0ZXJFbGVtZW50cygpO1xuICAgIH1cblxuICAgIGRpc3BsYXlDbGVhckJ1dHRvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIG9mKCEhdGhpcy5pbnB1dFZhbHVlICYmICF0aGlzLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBvbkNsaWNrU3VnZ2VzdGlvbihlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZ2V0TGFiZWwoZWxlbWVudCkpO1xuICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuXG4gICAgICAgIC8vIEZvcmNlIHRoZSBmb2N1cyBvbiB0aGUgaW5wdXQgdG8gZW5zdXJlIHRoYXQgVm9pY2VPdmVyIGRvZXNuJ3Qgc2V0IHRoZSBmb2N1cyBvbiBhbm90aGVyIGZpZWxkIG9uIHRoZSBwYWdlLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNPbklucHV0KCk7XG4gICAgICAgICAgICAvLyBUaGUgaW5wdXQgc2hvdWxkbid0IGJlIG1hcmtlZCBhcyBmb2N1c2VkIGFzIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgbGlzdC5cbiAgICAgICAgICAgIHRoaXMuaW5wdXRIYXNGb2N1cyA9IGZhbHNlO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLmNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlMaXN0Ym94KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpc1Zpc2libGUgPVxuICAgICAgICAgICAgdGhpcy5pbnB1dEhhc0ZvY3VzICYmXG4gICAgICAgICAgICAhdGhpcy5oaWRlU3VnZ2VzdGlvbnMgJiZcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkRWxlbWVudHMgJiZcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkRWxlbWVudHMubGVuZ3RoID4gMDtcbiAgICAgICAgaWYgKCFpc1Zpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1Zpc2libGU7XG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlRGVzY2VuZGFudElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3VsZERpc3BsYXlMaXN0Ym94KCkgJiYgdGhpcy5hY3RpdmVEZXNjZW5kYW50SWRcbiAgICAgICAgICAgID8gdGhpcy5hY3RpdmVEZXNjZW5kYW50SWRcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBzaG93U3VnZ2VzdGlvbnNXaGVuSW5wdXRIYXNGb2N1c0FuZElzRW1wdHkodmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5pbnB1dEhhc0ZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJFbGVtZW50cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclNlYXJjaElucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHluYW1pY0VsZW1lbnRzQ2hhbmdlKGNoYW5nZTogU2ltcGxlQ2hhbmdlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1N1Z2dlc3Rpb25MaXN0RHluYW1pYykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UgJiYgIWNoYW5nZS5maXJzdENoYW5nZSAmJiAhIXRoaXMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudHMoKVxuICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN1Z2dlc3Rpb25zRGlzcGxheWVkKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZTogYW55KSA9PiB0aGlzLm1hdGNoUmVzdWx0KGUpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhck9uQmx1clRpbWVvdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRCbHVyVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmN1cnJlbnRCbHVyVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Qmx1clRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2VsZWN0ZWRFbGVtZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5nZXRTZWxlY3RlZEVsZW1lbnQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbnB1dFZhbHVlKFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBoaWRlU3VnZ2VzdGlvbnM6IGJvb2xlYW4gPSB0cnVlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmIChoaWRlU3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICBuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMgPSBoaWRlU3VnZ2VzdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmVyaWZpZXMgaWYgdmFsdWUgaW4gaW5wdXQgbWF0Y2hlcyBhIHZhbHVlIGZyb20gc3VnZ2VzdGlvbnMuIElmIG5vdCwgZW1wdHkgdGhlIGlucHV0IGlmIHRoZSBjdXN0b20gdmFsdWVcbiAgICAgKiBvcHRpb24gaXMgbm90IHNldC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNoZWNrQW5kU2V0SW5wdXRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEhdGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0VsZW1lbnQgPSB0aGlzLmVsZW1lbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoYTogYW55KSA9PiB0aGlzLmdldExhYmVsKGEpID09PSB0aGlzLmlucHV0VmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGluZ0VsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldFZhbHVlKG1hdGNoaW5nRWxlbWVudFswXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYW51YWxseVVwZGF0ZVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93Q3VzdG9tVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdNb2RlbCA9IHRoaXMuZ2V0Q3VzdG9tVmFsdWUodGhpcy5pbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hbnVhbGx5VXBkYXRlVmFsdWUobmV3TW9kZWwpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFudWFsbHlVcGRhdGVWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdWdnZXN0aW9uc0Rpc3BsYXllZChcbiAgICAgICAgaGlkZVN1Z2dlc3Rpb25zOiBib29sZWFuLFxuICAgICAgICBkaXNwbGF5ZWRFbGVtZW50czogYW55W11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXREaXNwbGF5ZWRFbGVtZW50cyhkaXNwbGF5ZWRFbGVtZW50cyk7XG4gICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zID0gaGlkZVN1Z2dlc3Rpb25zO1xuICAgICAgICB0aGlzLm5vdGlmeVNjcmVlblJlYWRlclVzZXJzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREaXNwbGF5ZWRFbGVtZW50cyhmaWx0ZXJlZEVsZW1lbnRzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50SWQgPSBudWxsO1xuICAgICAgICB0aGlzLmRpc3BsYXllZEVsZW1lbnRzID0gZmlsdGVyZWRFbGVtZW50cztcblxuICAgICAgICB0aGlzLnJlc2l6ZURpc3BsYXlWaWV3UG9ydChmaWx0ZXJlZEVsZW1lbnRzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2l6ZURpc3BsYXlWaWV3UG9ydChmaWx0ZXJlZEVsZW1lbnRzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEhZmlsdGVyZWRFbGVtZW50cykge1xuICAgICAgICAgICAgaWYgKGZpbHRlcmVkRWxlbWVudHMubGVuZ3RoIDwgdGhpcy5OQl9JVEVNU19WSVNJQkxFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5WSUVXX1BPUlRfSEVJR0hUID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtSGVpZ2h0SW5TdWdnZXN0aW9uTGlzdEluUHggKlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoISF0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgTUFYX0hFSUdIVCA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuTkJfSVRFTVNfVklTSUJMRSAqIHRoaXMuaXRlbUhlaWdodEluU3VnZ2VzdGlvbkxpc3RJblB4O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLlZJRVdfUE9SVF9IRUlHSFQgPCBNQVhfSEVJR0hUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuVklFV19QT1JUX0hFSUdIVCA9IE1BWF9IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZEVsZW1lbnQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnNMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U3VnZ2VzdGlvbkxpc3QoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXhTdHIgaW4gc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaGFzT3duUHJvcGVydHkoaW5kZXhTdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzdWdnZXN0aW9uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGFzc05hbWUuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TVUdHRVNUSU9OX0NVU1RPTV9BVFRSSUJVVEVfTEFCRUxfVkFMVUVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0TmV4dEVsZW1lbnQoZG93bjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9uc0Rpc3BsYXllZCgpKSB7XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U3VnZ2VzdGlvbkxpc3QoKTtcbiAgICAgICAgICAgIGxldCBuZXdJdGVtU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGRvd24gPyAxIDogLTE7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXhTdHIgaW4gc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaGFzT3duUHJvcGVydHkoaW5kZXhTdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzdWdnZXN0aW9uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXg6IG51bWJlciA9IGluZGV4ICsgc3RlcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudEl0ZW1TZWxlY3RlZCA9IGl0ZW0uY2xhc3NOYW1lLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU1VHR0VTVElPTl9TRUxFQ1RFRF9DTEFTU1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEl0ZW1TZWxlY3RlZCAmJiBuZXh0SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld0l0ZW1TZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SW5kZXggPCBzdWdnZXN0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHN1Z2dlc3Rpb25zW25leHRJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN1Z2dlc3Rpb25zW3N1Z2dlc3Rpb25zLmxlbmd0aCAtIDFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIG5vIGl0ZW0gd2FzIHNlbGVjdGVkIGJlZm9yZSwgc2VsZWN0IGZpcnN0IG9uZVxuICAgICAgICAgICAgaWYgKCFuZXdJdGVtU2VsZWN0ZWQgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKChuZXdJdGVtU2VsZWN0ZWQgPSBzdWdnZXN0aW9uc1swXSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNYW5hZ2UgZ2xvYmFsIGl0ZW0gc2VsZWN0ZWQgaW5kZXhcbiAgICAgICAgICAgICAgICBjb25zdCBNQVhfSU5ERVggPSB0aGlzLmRpc3BsYXllZEVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbUdsb2JhbEluZGV4ICs9IHN0ZXA7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA+IE1BWF9JTkRFWCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSBNQVhfSU5ERVg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTY3JvbGxzIGRvd24gb3IgdXAgaWYgbmV3SXRlbVNlbGVjdGVkIGlzIG5vdCB2aXNpYmxlXG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uc05hdGl2ZUVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Zpc2libGUoc3VnZ2VzdGlvbnNOYXRpdmVFbGVtZW50LCBuZXdJdGVtU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG9JbmRleChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbUdsb2JhbEluZGV4XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3VnZ2VzdGlvbkxpc3QoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zTmF0aXZlRWxlbWVudCA9IHRoaXMuc3VnZ2VzdGlvbnNMaXN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vIENvbnZlcnRzIHRoZSBzdWdnZXN0aW9ucyB0byBhbiBhcnJheSB0byB3b3JrIGNvbnNpc3RlbnRseSBhY3Jvc3MgYnJvd3NlcnMuXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChzdWdnZXN0aW9uc05hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZWxlY3RJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xuICAgICAgICBpdGVtLmNsYXNzTmFtZSA9IGl0ZW0uY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICBgICR7dGhpcy5TVUdHRVNUSU9OX1NFTEVDVEVEX0NMQVNTfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICApO1xuICAgICAgICBpdGVtLmF0dHJpYnV0ZXNbJ2FyaWEtc2VsZWN0ZWQnXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0SXRlbShpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpdGVtLmNsYXNzTmFtZS5pbmNsdWRlcyh0aGlzLlNVR0dFU1RJT05fU0VMRUNURURfQ0xBU1MpKSB7XG4gICAgICAgICAgICBpdGVtLmNsYXNzTmFtZSArPSBgICR7dGhpcy5TVUdHRVNUSU9OX1NFTEVDVEVEX0NMQVNTfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtLmF0dHJpYnV0ZXNbJ2FyaWEtc2VsZWN0ZWQnXSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50SWQgPSBpdGVtLmlkO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWaXNpYmxlKHBhcmVudDogYW55LCBlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZWxlbWVudE9mZnNldFRvcCA9XG4gICAgICAgICAgICBlbGVtZW50Lm9mZnNldFRvcCArXG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCk7XG4gICAgICAgIC8vIGVsZW1lbnQgaXMgYmVsb3cgdmlzaWJsZSBhcmVhXG4gICAgICAgIGNvbnN0IGlzQmVsb3cgPVxuICAgICAgICAgICAgZWxlbWVudE9mZnNldFRvcCA8IHBhcmVudC5vZmZzZXRIZWlnaHQgKyBwYXJlbnQuc2Nyb2xsVG9wO1xuICAgICAgICAvLyBlbGVtZW50IGlzIGFib3ZlIHZpc2libGUgYXJlYVxuICAgICAgICBjb25zdCBpc0Fib3ZlID0gZWxlbWVudE9mZnNldFRvcCA+IHBhcmVudC5zY3JvbGxUb3A7XG4gICAgICAgIHJldHVybiBpc0JlbG93ICYmIGlzQWJvdmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWdnZXN0aW9uc0Rpc3BsYXllZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNMaXN0ICYmXG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zTGlzdC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpcnN0U3VnZ2VzdGlvbigpOiBzdHJpbmcge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zTGlzdCAmJlxuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9uc0xpc3QubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdWdnZXN0aW9uc0xpc3QubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5pbm5lclRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlTY3JlZW5SZWFkZXJVc2VycygpOiB2b2lkIHtcbiAgICAgICAgLy8gRm9yY2VzIE5WREEgdG8gcmUtcmVhZCB0aGUgY29udGVudCBvZiB0aGUgc2Mtb25seSBub3RpZmljYXRpb24uXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uTWVzc2FnZVVwZGF0ZWQgPSAhdGhpcy5ub3RpZmljYXRpb25NZXNzYWdlVXBkYXRlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1hdGNoaW5nVmFsdWUoZWxlbWVudHM6IGFueSwgZWxlbVRvQ29tcGFyZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgLy8gTG9vayBmb3IgYSBwb3RlbnRpYWwgbWF0Y2hpbmcgdmFsdWUgaW4gdGhlIHNldFxuICAgICAgICBjb25zdCBtYXRjaGluZ0VsZW1lbnQgPSBlbGVtZW50cy5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLmFyZVZhbHVlc0VxdWFscyh2YWx1ZSwgZWxlbVRvQ29tcGFyZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudG9TdHJpbmcoKSA9PT0gZWxlbVRvQ29tcGFyZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE1hcCB3aXRoIHRoZSBsYWJlbC5cbiAgICAgICAgY29uc3QgbWF0Y2hpbmdWYWx1ZUxhYmVsID0gdGhpcy5nZXRMYWJlbChtYXRjaGluZ0VsZW1lbnRbMF0pO1xuXG4gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoZSB2YWx1ZSBpZiBjdXN0b20gdmFsdWVzIGFyZSBhbGxvd2VkIGFuZCB0aGVyZSdzIG5vIG1hdGNoLlxuICAgICAgICByZXR1cm4gdGhpcy5hbGxvd0N1c3RvbVZhbHVlXG4gICAgICAgICAgICA/IG1hdGNoaW5nVmFsdWVMYWJlbCB8fCB0aGlzLmdldE1vZGVsVmFsdWVEaXNwbGF5VmFsdWUoKVxuICAgICAgICAgICAgOiBtYXRjaGluZ1ZhbHVlTGFiZWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXRjaFJlc3VsdDxUPihlbGVtZW50OiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gbm9ybWFsaXplU2VhcmNoKFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgIHRoaXMuY2FzZVNlbnNpdGl2ZVNlYXJjaFxuICAgICAgICApO1xuICAgICAgICBsZXQgbGFiZWwgPSBub3JtYWxpemVTZWFyY2goXG4gICAgICAgICAgICB0aGlzLmdldExhYmVsKGVsZW1lbnQpLFxuICAgICAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlU2VhcmNoXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhYmVsID0gc3RyaXBIdG1sVGFncyhsYWJlbCk7XG4gICAgICAgIHJldHVybiBsYWJlbC5pbmNsdWRlcyhzZWFyY2hWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYW51YWxseVVwZGF0ZVZhbHVlKG5ld1ZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFuZXdWYWx1ZSB8fFxuICAgICAgICAgICAgIXRoaXMubW9kZWwgfHxcbiAgICAgICAgICAgICF0aGlzLmFyZVZhbHVlc0VxdWFscyhuZXdWYWx1ZSwgdGhpcy5tb2RlbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCB0byBkbyBvbiB0b3Agb2YgdGhlIHVwZGF0ZU5nTW9kZWwgYXNcbiAgICAgICAgICAgIC8vIHVwZGF0ZU5nTW9kZWwgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIG90aGVyIHNvdXJjZXMuXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZU5nTW9kZWwobmV3VmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VzdG9tVmFsdWUodmFsdWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmICghdGhpcy5jdXN0b21WYWx1ZU1vZGVsR2VuZXJhdG9yIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVZhbHVlTW9kZWxHZW5lcmF0b3IodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9kZWxWYWx1ZURpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMubW9kZWwgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHRoaXMubW9kZWxcbiAgICAgICAgICAgIDogdGhpcy5nZXRMYWJlbCh0aGlzLm1vZGVsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdFZhbHVlVG9EaXNwbGF5KHZhbHVlOiBhbnksIGVsZW1lbnRzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdmFsdWUuXG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJFbGVtZW50cyh0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1Ub0NvbXBhcmUgPSB2YWx1ZSA/IHZhbHVlIDogdGhpcy5kZWZhdWx0RWxlbWVudFZhbHVlO1xuXG4gICAgICAgIGlmIChlbGVtVG9Db21wYXJlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmdldE1hdGNoaW5nVmFsdWUoZWxlbWVudHMsIGVsZW1Ub0NvbXBhcmUpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJFbGVtZW50cyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWF0Y2hWYWx1ZU9uTW9kZWxDaGFuZ2VTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzU3VnZ2VzdGlvbkxpc3REeW5hbWljKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFZhbHVlVG9EaXNwbGF5T25FbGVtZW50c0xvYWRlZFN1YnNjcmlwdGlvbiA9XG4gICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuYXNPYnNlcnZhYmxlKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHNMb2FkZWQuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoW3ZhbHVlLCBlbGVtZW50c10pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFZhbHVlVG9EaXNwbGF5KHZhbHVlLCBlbGVtZW50cylcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5tb2RlbENoYW5nZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudHMoKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKGVsZW1lbnRzOiBhbnkpID0+ICEhZWxlbWVudHMpKVxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlLHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlbGVtZW50czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFZhbHVlVG9EaXNwbGF5KHZhbHVlLCBlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXNjYXBlUmVnZXhwKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSh0aGlzLlJFR0VYX1RPX0VTQ0FQRV9SRUdFWCwgJ1xcXFwkJicpO1xuICAgIH1cbn1cbiIsIjwhLS1cbiAgICBBY2Nlc3NpYmxlIGF1dG9jb21wbGV0ZSB3aWRnZXQgZm9sbG93aW5nIHRoZSBsaXN0Ym94IGNvbWJvYm94IHBhdHRlcm4uXG4gICAgcmVmOiBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMS9leGFtcGxlcy9jb21ib2JveC9hcmlhMS4xcGF0dGVybi9saXN0Ym94LWNvbWJvLmh0bWxcbi0tPlxuPGRpdlxuICAgIGNsYXNzPVwiZm9ybS1ncm91cCBhdXRvY29tcGxldGUtZm9ybS1ncm91cFwiXG4gICAgW2NsYXNzLmhhcy1kYW5nZXJdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgIFtjbGFzcy52ZC1mb3JtLWdyb3VwLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJzaG91bGREaXNwbGF5TGlzdGJveCgpXCJcbiAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIidsaXN0Ym94J1wiXG4gICAgW2F0dHIuaWRdPVwiYnVpbGRJZCgnQ29udGFpbmVyJylcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuPlxuICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImZvcm0tbGFiZWxcIlxuICAgICAgICBbYXR0ci5mb3JdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICAqbmdJZj1cIiEhbGFiZWxcIlxuICAgICAgICBbbmdDbGFzc109XCJpc0xhYmVsU3JPbmx5ID8gJ3Zpc3VhbGx5LWhpZGRlbicgOiBsYWJlbFN0eWxlTW9kaWZpZXJcIlxuICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKSArICdMYWJlbCdcIlxuICAgID5cbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJsYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIXJlcXVpcmVkICYmICFoaWRlTm90UmVxdWlyZWRFeHRyYUxhYmVsXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7ICdmb2Vobi1pbnB1dC5vcHRpb25hbCcgfCBmcm9tRGljdGlvbmFyeSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9sYWJlbD5cblxuICAgIDxmb2Vobi12YWxpZGF0aW9uLWFsZXJ0cyBbY29tcG9uZW50XT1cInRoaXNcIj48L2ZvZWhuLXZhbGlkYXRpb24tYWxlcnRzPlxuXG4gICAgPGRpdiAqbmdJZj1cIiFlbGVtZW50c1wiPkNoYXJnZW1lbnQuLi48L2Rpdj5cblxuICAgIDxzbWFsbFxuICAgICAgICAqbmdJZj1cImhlbHBUZXh0XCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnSGVscCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiaGVscFRleHRcIlxuICAgID48L3NtYWxsPlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPGRpdiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPlxuICAgICAgICBVdGlsaXNleiBsZXMgZmzDqGNoZXMgaGF1dCBldCBiYXMgcG91ciBuYXZpZ3VlciBkYW5zIGxhIGxpc3RlLCBwdWlzIGxhXG4gICAgICAgIHRvdWNoZSBFbnRyZXIgcG91ciBzw6lsZWN0aW9ubmVyIHVuZSBvcHRpb24uXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEdpdmUgc2NyZWVuIHJlYWRlciB1c2VycyB0aGUgdG90YWwgb2YgcmVzdWx0cyB3aGVuIHRoZW4gaW5wdXQgY2hhbmdlcy4gLS0+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgICBhcmlhLWF0b21pYz1cInRydWVcIlxuICAgICAgICAqbmdJZj1cImRpc3BsYXllZEVsZW1lbnRzICYmIHNob3VsZERpc3BsYXlMaXN0Ym94KClcIlxuICAgID5cbiAgICAgICAgTm9tYnJlIGRlIHLDqXN1bHRhdHM6IHt7IGRpc3BsYXllZEVsZW1lbnRzLmxlbmd0aCB9fVxuICAgICAgICA8IS0tIFRyaWNrIHRvIGhhdmUgTlZEQSByZS1yZWFkaW5nIHRoaXMgcHJvcGVybHkgLS0+XG4gICAgICAgIDxzcGFuPnt7IG5vdGlmaWNhdGlvbk1lc3NhZ2VVcGRhdGVkID8gJywnIDogJywsJyB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxpbnB1dFxuICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGF1dG9jb21wbGV0ZVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICBbbmFtZV09XCJuYW1lIHx8IGxhYmVsXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCBudWxsXCJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWRTdWJqZWN0IHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImdldERlc2NyaWJlZEJ5KClcIlxuICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkIHx8IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KCkgfHwgbnVsbFwiXG4gICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCInb2ZmJ1wiXG4gICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJnZXRBY3RpdmVEZXNjZW5kYW50SWQoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtb3duc109XCJcbiAgICAgICAgICAgIHNob3VsZERpc3BsYXlMaXN0Ym94KCkgPyBidWlsZENoaWxkSWQoKSArICdMaXN0Ym94JyA6IG51bGxcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIubGlzdF09XCJidWlsZENoaWxkSWQoKSArICdsaXN0J1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNob3dTdWdnZXN0aW9uc1doZW5JbnB1dEhhc0ZvY3VzQW5kSXNFbXB0eSgkZXZlbnQpXCJcbiAgICAgICAgKGlucHV0KT1cImhhbmRsZVNlYXJjaElucHV0Q2hhbmdlKGVudHJ5Q29tcG9uZW50LnZhbHVlKVwiXG4gICAgICAgIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxuICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwib25JbnB1dENsaWNrKClcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAjZW50cnlDb21wb25lbnRcbiAgICAvPlxuXG4gICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJhdXRvY29tcGxldGUtY2xlYXItYnV0dG9uIGJ0blwiXG4gICAgICAgIChjbGljayk9XCJvbkNsZWFyKClcIlxuICAgICAgICBbaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnQ2xlYXInXCJcbiAgICA+XG4gICAgICAgIDxmb2Vobi1pY29uLXRpbWVzXG4gICAgICAgICAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1jbGVhci1idXR0b24taWNvblwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ2ZvZWhuLWlucHV0LmNsZWFyLWJ1dHRvbi5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVwiXG4gICAgICAgID48L2ZvZWhuLWljb24tdGltZXM+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cCBzdWdnZXN0aW9ucy1saXN0LWNvbnRhaW5lclwiXG4gICAgICAgICpuZ0lmPVwic2hvdWxkRGlzcGxheUxpc3Rib3goKVwiXG4gICAgPlxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICBbaXRlbVNpemVdPVwiaXRlbUhlaWdodEluU3VnZ2VzdGlvbkxpc3RJblB4XCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiVklFV19QT1JUX0hFSUdIVFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgpICsgJ0xpc3Rib3gnXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYnVpbGRDaGlsZElkKCkgKyAnTGFiZWwnXCJcbiAgICAgICAgICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9ucy1saXN0XCJcbiAgICAgICAgICAgICAgICAjc3VnZ2VzdGlvbnNMaXN0XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50IG9mIGRpc3BsYXllZEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgaVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKSArICdPcHRpb24nICsgaVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrU3VnZ2VzdGlvbihlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25MaXN0T3B0aW9uTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25MaXN0T3B0aW9uRm9jdXMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uTGlzdE9wdGlvbkJsdXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cIml0ZW1IZWlnaHRJblN1Z2dlc3Rpb25MaXN0SW5QeFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmxhYmVsLXZhbHVlXT1cImdldExhYmVsKGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRW5zdXJlcyB0aGF0IHNjcmVlbiByZWFkZXJzIGRvbid0IGNvbnNpZGVyIGFueSBzcGFjZXMgYXJvdW5kIHRoZSBlbXBoYXNpcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJnZXRMYWJlbFdpdGhFbXBoYXNpcyhlbGVtZW50KVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -8,21 +8,21 @@ import { SdkDictionaryModule } from '../sdk-dictionary/sdk-dictionary.module';
|
|
|
8
8
|
import { FoehnAutocompleteComponent } from './foehn-autocomplete.component';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
export class FoehnAutocompleteModule {
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
12
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FoehnAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
12
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.10", ngImport: i0, type: FoehnAutocompleteModule, declarations: [FoehnAutocompleteComponent], imports: [CommonModule,
|
|
13
13
|
FoehnIconsModule,
|
|
14
14
|
FoehnValidationAlertsModule,
|
|
15
15
|
FormsModule,
|
|
16
16
|
ScrollingModule,
|
|
17
17
|
SdkDictionaryModule], exports: [FoehnAutocompleteComponent] }); }
|
|
18
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.
|
|
18
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FoehnAutocompleteModule, imports: [CommonModule,
|
|
19
19
|
FoehnIconsModule,
|
|
20
20
|
FoehnValidationAlertsModule,
|
|
21
21
|
FormsModule,
|
|
22
22
|
ScrollingModule,
|
|
23
23
|
SdkDictionaryModule] }); }
|
|
24
24
|
}
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FoehnAutocompleteModule, decorators: [{
|
|
26
26
|
type: NgModule,
|
|
27
27
|
args: [{
|
|
28
28
|
imports: [
|
|
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImpor
|
|
|
37
37
|
exports: [FoehnAutocompleteComponent]
|
|
38
38
|
}]
|
|
39
39
|
}] });
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tYXV0b2NvbXBsZXRlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQWM1RSxNQUFNLE9BQU8sdUJBQXVCOytHQUF2Qix1QkFBdUI7Z0hBQXZCLHVCQUF1QixpQkFIakIsMEJBQTBCLGFBUHJDLFlBQVk7WUFDWixnQkFBZ0I7WUFDaEIsMkJBQTJCO1lBQzNCLFdBQVc7WUFDWCxlQUFlO1lBQ2YsbUJBQW1CLGFBR2IsMEJBQTBCO2dIQUUzQix1QkFBdUIsWUFWNUIsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQiwyQkFBMkI7WUFDM0IsV0FBVztZQUNYLGVBQWU7WUFDZixtQkFBbUI7OzRGQUtkLHVCQUF1QjtrQkFabkMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLDJCQUEyQjt3QkFDM0IsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLG1CQUFtQjtxQkFDdEI7b0JBQ0QsWUFBWSxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQzFDLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixDQUFDO2lCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgRm9laG5JY29uc01vZHVsZSB9IGZyb20gJy4uL2ZvZWhuLWljb25zL2ZvZWhuLWljb25zLm1vZHVsZSc7XG5pbXBvcnQgeyBGb2VoblZhbGlkYXRpb25BbGVydHNNb2R1bGUgfSBmcm9tICcuLi9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cy9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cy5tb2R1bGUnO1xuaW1wb3J0IHsgU2RrRGljdGlvbmFyeU1vZHVsZSB9IGZyb20gJy4uL3Nkay1kaWN0aW9uYXJ5L3Nkay1kaWN0aW9uYXJ5Lm1vZHVsZSc7XG5pbXBvcnQgeyBGb2VobkF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4vZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvZWhuSWNvbnNNb2R1bGUsXG4gICAgICAgIEZvZWhuVmFsaWRhdGlvbkFsZXJ0c01vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICAgICAgU2RrRGljdGlvbmFyeU1vZHVsZVxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbRm9laG5BdXRvY29tcGxldGVDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtGb2VobkF1dG9jb21wbGV0ZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgRm9laG5BdXRvY29tcGxldGVNb2R1bGUge31cbiJdfQ==
|
|
@@ -6,8 +6,8 @@ import * as i2 from "../foehn-validation-alerts/foehn-validation-alerts.componen
|
|
|
6
6
|
import * as i3 from "@angular/forms";
|
|
7
7
|
import * as i4 from "../sdk-dictionary/sdk-dictionary.pipe";
|
|
8
8
|
export class FoehnBooleanCheckboxComponent extends FoehnInputComponent {
|
|
9
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
10
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.
|
|
9
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FoehnBooleanCheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
10
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: FoehnBooleanCheckboxComponent, selector: "foehn-boolean-checkbox", providers: [
|
|
11
11
|
{
|
|
12
12
|
provide: FoehnInputComponent,
|
|
13
13
|
useExisting: forwardRef(() => FoehnBooleanCheckboxComponent),
|
|
@@ -15,7 +15,7 @@ export class FoehnBooleanCheckboxComponent extends FoehnInputComponent {
|
|
|
15
15
|
}
|
|
16
16
|
], usesInheritance: true, ngImport: i0, template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n class=\"form-group\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n [ngModel]=\"model\"\n (ngModelChange)=\"updateNgModel($event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n (change)=\"handleChange(model)\"\n #entryComponent\n />\n <label\n [ngClass]=\"\n isLabelSrOnly\n ? 'form-check-label visually-hidden'\n : 'form-check-label vd-p'\n \"\n [for]=\"buildChildId()\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.SdkDictionaryPipe, name: "fromDictionary" }] }); }
|
|
17
17
|
}
|
|
18
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FoehnBooleanCheckboxComponent, decorators: [{
|
|
19
19
|
type: Component,
|
|
20
20
|
args: [{ selector: 'foehn-boolean-checkbox', providers: [
|
|
21
21
|
{
|
|
@@ -25,4 +25,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImpor
|
|
|
25
25
|
}
|
|
26
26
|
], template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n class=\"form-group\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n [ngModel]=\"model\"\n (ngModelChange)=\"updateNgModel($event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n (change)=\"handleChange(model)\"\n #entryComponent\n />\n <label\n [ngClass]=\"\n isLabelSrOnly\n ? 'form-check-label visually-hidden'\n : 'form-check-label vd-p'\n \"\n [for]=\"buildChildId()\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n </div>\n</div>\n" }]
|
|
27
27
|
}] });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tYm9vbGVhbi1jaGVja2JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tYm9vbGVhbi9mb2Vobi1ib29sZWFuLWNoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1ib29sZWFuL2ZvZWhuLWJvb2xlYW4tY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7OztBQWEzRSxNQUFNLE9BQU8sNkJBQThCLFNBQVEsbUJBQTRCOytHQUFsRSw2QkFBNkI7bUdBQTdCLDZCQUE2QixpREFSM0I7WUFDUDtnQkFDSSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDO2dCQUM1RCxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osaURDYkwsOGtEQWtEQTs7NEZEbkNhLDZCQUE2QjtrQkFYekMsU0FBUzsrQkFDSSx3QkFBd0IsYUFFdkI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLG1CQUFtQjs0QkFDNUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsOEJBQThCLENBQUM7NEJBQzVELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZvZWhuSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9mb2Vobi1pbnB1dC9mb2Vobi1pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZvZWhuLWJvb2xlYW4tY2hlY2tib3gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb2Vobi1ib29sZWFuLWNoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRm9laG5JbnB1dENvbXBvbmVudCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvZWhuQm9vbGVhbkNoZWNrYm94Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvZWhuQm9vbGVhbkNoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgRm9laG5JbnB1dENvbXBvbmVudDxib29sZWFuPiB7fVxuIiwiPGRpdlxuICAgIFtjbGFzcy52ZC1mb3JtLWdyb3VwLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICBbYXR0ci5pZF09XCJidWlsZElkKCdDb250YWluZXInKVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4+XG4gICAgPGZvZWhuLXZhbGlkYXRpb24tYWxlcnRzIFtjb21wb25lbnRdPVwidGhpc1wiPjwvZm9laG4tdmFsaWRhdGlvbi1hbGVydHM+XG5cbiAgICA8c21hbGxcbiAgICAgICAgKm5nSWY9XCJoZWxwVGV4dFwiXG4gICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgpICsgJ0hlbHAnXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cImhlbHBUZXh0XCJcbiAgICA+PC9zbWFsbD5cblxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVOZ01vZGVsKCRldmVudClcIlxuICAgICAgICAgICAgW25hbWVdPVwiYnVpbGRDaGlsZE5hbWUoKVwiXG4gICAgICAgICAgICBbYXR0ci5uYW1lXT1cImJ1aWxkQ2hpbGROYW1lKClcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpIHx8IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImdldERlc2NyaWJlZEJ5KClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UobW9kZWwpXCJcbiAgICAgICAgICAgICNlbnRyeUNvbXBvbmVudFxuICAgICAgICAvPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgIGlzTGFiZWxTck9ubHlcbiAgICAgICAgICAgICAgICAgICAgPyAnZm9ybS1jaGVjay1sYWJlbCB2aXN1YWxseS1oaWRkZW4nXG4gICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY2hlY2stbGFiZWwgdmQtcCdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbZm9yXT1cImJ1aWxkQ2hpbGRJZCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJsYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcmVxdWlyZWQgJiYgIWhpZGVOb3RSZXF1aXJlZEV4dHJhTGFiZWxcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ2ZvZWhuLWlucHV0Lm9wdGlvbmFsJyB8IGZyb21EaWN0aW9uYXJ5IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -12,8 +12,8 @@ export class FoehnBooleanRadioComponent extends FoehnInputComponent {
|
|
|
12
12
|
this.falseLabel = 'Non';
|
|
13
13
|
this.verticalDisplay = false;
|
|
14
14
|
}
|
|
15
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
16
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.
|
|
15
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FoehnBooleanRadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
16
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: FoehnBooleanRadioComponent, selector: "foehn-boolean-radio", inputs: { trueLabel: "trueLabel", falseLabel: "falseLabel", verticalDisplay: "verticalDisplay" }, providers: [
|
|
17
17
|
{
|
|
18
18
|
provide: FoehnInputComponent,
|
|
19
19
|
useExisting: forwardRef(() => FoehnBooleanRadioComponent),
|
|
@@ -21,7 +21,7 @@ export class FoehnBooleanRadioComponent extends FoehnInputComponent {
|
|
|
21
21
|
}
|
|
22
22
|
], usesInheritance: true, ngImport: i0, template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n class=\"form-group\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset [attr.aria-describedby]=\"getDescribedBy()\">\n <legend\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'visually-hidden' : 'vd-p'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div\n class=\"d-flex\"\n [ngClass]=\"verticalDisplay ? 'flex-column' : 'flex-row'\"\n >\n <div class=\"form-check\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n [ngModel]=\"model\"\n (ngModelChange)=\"updateNgModel($event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [value]=\"true\"\n [attr.id]=\"buildChildId('True')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n (change)=\"handleChange(true)\"\n #entryComponent\n />\n <label\n class=\"form-check-label\"\n [for]=\"buildChildId('True')\"\n [innerHTML]=\"trueLabel\"\n ></label>\n </div>\n\n <div class=\"form-check\" [ngClass]=\"verticalDisplay ? '' : 'ms-2'\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n [ngModel]=\"model\"\n (ngModelChange)=\"updateNgModel($event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [value]=\"false\"\n [attr.id]=\"buildChildId('False')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n (change)=\"handleChange(false)\"\n />\n <label\n class=\"form-check-label\"\n [for]=\"buildChildId('False')\"\n [innerHTML]=\"falseLabel\"\n ></label>\n </div>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.SdkDictionaryPipe, name: "fromDictionary" }] }); }
|
|
23
23
|
}
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FoehnBooleanRadioComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
26
|
args: [{ selector: 'foehn-boolean-radio', providers: [
|
|
27
27
|
{
|
|
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImpor
|
|
|
37
37
|
}], verticalDisplay: [{
|
|
38
38
|
type: Input
|
|
39
39
|
}] } });
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tYm9vbGVhbi1yYWRpby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tYm9vbGVhbi9mb2Vobi1ib29sZWFuLXJhZGlvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1ib29sZWFuL2ZvZWhuLWJvb2xlYW4tcmFkaW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7QUFhM0UsTUFBTSxPQUFPLDBCQUEyQixTQUFRLG1CQUE0QjtJQVg1RTs7UUFhSSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR2xCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFHbkIsb0JBQWUsR0FBRyxLQUFLLENBQUM7S0FDM0I7K0dBVFksMEJBQTBCO21HQUExQiwwQkFBMEIsZ0pBUnhCO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztnQkFDekQsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKLGlEQ2JMLCs2RkFnRkE7OzRGRGpFYSwwQkFBMEI7a0JBWHRDLFNBQVM7K0JBQ0kscUJBQXFCLGFBRXBCO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDJCQUEyQixDQUFDOzRCQUN6RCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjs4QkFJRCxTQUFTO3NCQURSLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRm9laG5JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2ZvZWhuLWlucHV0L2ZvZWhuLWlucHV0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZm9laG4tYm9vbGVhbi1yYWRpbycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZvZWhuLWJvb2xlYW4tcmFkaW8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGb2VobklucHV0Q29tcG9uZW50LFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9laG5Cb29sZWFuUmFkaW9Db21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9laG5Cb29sZWFuUmFkaW9Db21wb25lbnQgZXh0ZW5kcyBGb2VobklucHV0Q29tcG9uZW50PGJvb2xlYW4+IHtcbiAgICBASW5wdXQoKVxuICAgIHRydWVMYWJlbCA9ICdPdWknO1xuXG4gICAgQElucHV0KClcbiAgICBmYWxzZUxhYmVsID0gJ05vbic7XG5cbiAgICBASW5wdXQoKVxuICAgIHZlcnRpY2FsRGlzcGxheSA9IGZhbHNlO1xufVxuIiwiPGRpdlxuICAgIFtjbGFzcy52ZC1mb3JtLWdyb3VwLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICBbYXR0ci5pZF09XCJidWlsZElkKCdDb250YWluZXInKVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4+XG4gICAgPGZpZWxkc2V0IFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ2V0RGVzY3JpYmVkQnkoKVwiPlxuICAgICAgICA8bGVnZW5kXG4gICAgICAgICAgICAqbmdJZj1cIiEhbGFiZWxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXNMYWJlbFNyT25seSA/ICd2aXN1YWxseS1oaWRkZW4nIDogJ3ZkLXAnXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJsYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcmVxdWlyZWQgJiYgIWhpZGVOb3RSZXF1aXJlZEV4dHJhTGFiZWxcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ2ZvZWhuLWlucHV0Lm9wdGlvbmFsJyB8IGZyb21EaWN0aW9uYXJ5IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGVnZW5kPlxuXG4gICAgICAgIDxmb2Vobi12YWxpZGF0aW9uLWFsZXJ0cyBbY29tcG9uZW50XT1cInRoaXNcIj48L2ZvZWhuLXZhbGlkYXRpb24tYWxlcnRzPlxuXG4gICAgICAgIDxzbWFsbFxuICAgICAgICAgICAgKm5nSWY9XCJoZWxwVGV4dFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKSArICdIZWxwJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cImhlbHBUZXh0XCJcbiAgICAgICAgPjwvc21hbGw+XG5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInZlcnRpY2FsRGlzcGxheSA/ICdmbGV4LWNvbHVtbicgOiAnZmxleC1yb3cnXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVOZ01vZGVsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJidWlsZENoaWxkTmFtZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCJidWlsZENoaWxkTmFtZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoJ1RydWUnKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKSB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgI2VudHJ5Q29tcG9uZW50XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCJidWlsZENoaWxkSWQoJ1RydWUnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidHJ1ZUxhYmVsXCJcbiAgICAgICAgICAgICAgICA+PC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiIFtuZ0NsYXNzXT1cInZlcnRpY2FsRGlzcGxheSA/ICcnIDogJ21zLTInXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTmdNb2RlbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiYnVpbGRDaGlsZE5hbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLm5hbWVdPVwiYnVpbGRDaGlsZE5hbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgnRmFsc2UnKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKSB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCJidWlsZENoaWxkSWQoJ0ZhbHNlJylcIlxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImZhbHNlTGFiZWxcIlxuICAgICAgICAgICAgICAgID48L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZmllbGRzZXQ+XG48L2Rpdj5cbiJdfQ==
|