@myclub_se/data-access 2.15.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/index.mjs +2 -1
- package/{esm2020 → esm2022}/lib/api-models/api-bookable-item.mjs +1 -1
- package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar-application-time.mjs +1 -1
- package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar-slot-session.mjs +1 -1
- package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar.mjs +1 -1
- package/esm2022/lib/api-models/api-feature-flags.mjs +2 -0
- package/esm2022/lib/api-models/api-invoice/api-payment-attempt-create.mjs +11 -0
- package/esm2022/lib/api-models/index.mjs +57 -0
- package/esm2022/lib/authentication/authentication.interceptor.mjs +101 -0
- package/esm2022/lib/authentication/authentication.service.mjs +109 -0
- package/esm2022/lib/authentication/guards/authenticated.guard.mjs +38 -0
- package/esm2022/lib/authentication/guards/handle-grant-token.guard.mjs +31 -0
- package/esm2022/lib/data-access.module.mjs +39 -0
- package/esm2022/lib/maintenance/maintenance.interceptor.mjs +30 -0
- package/esm2022/lib/models/activity-extra-member.mjs +19 -0
- package/esm2022/lib/models/activity-invite.mjs +35 -0
- package/esm2022/lib/models/activity-location-group.mjs +27 -0
- package/esm2022/lib/models/activity-location-part.mjs +16 -0
- package/esm2022/lib/models/activity-location-tag.mjs +22 -0
- package/esm2022/lib/models/activity-location.mjs +46 -0
- package/esm2022/lib/models/activity-participant.mjs +19 -0
- package/esm2022/lib/models/activity-settings.mjs +27 -0
- package/esm2022/lib/models/activity-type.mjs +34 -0
- package/esm2022/lib/models/activity.mjs +137 -0
- package/esm2022/lib/models/auth/auth-member.mjs +13 -0
- package/{esm2020 → esm2022}/lib/models/auth/auth-section.mjs +3 -1
- package/{esm2020 → esm2022}/lib/models/auth/auth-team-section.mjs +3 -1
- package/esm2022/lib/models/auth/auth-team.mjs +13 -0
- package/esm2022/lib/models/auth/auth.mjs +25 -0
- package/{esm2020 → esm2022}/lib/models/authentication.mjs +3 -1
- package/esm2022/lib/models/bookable-group.mjs +27 -0
- package/esm2022/lib/models/bookable-item.mjs +49 -0
- package/esm2022/lib/models/bookable-part.mjs +16 -0
- package/esm2022/lib/models/bookable-tag.mjs +22 -0
- package/esm2022/lib/models/booking-calendar-application-time.mjs +86 -0
- package/esm2022/lib/models/booking-calendar-slot-session.mjs +87 -0
- package/esm2022/lib/models/booking-calendar-slot.mjs +79 -0
- package/esm2022/lib/models/booking-calendar.mjs +74 -0
- package/esm2022/lib/models/booking-settings.mjs +29 -0
- package/esm2022/lib/models/booking-slot-filter.mjs +72 -0
- package/esm2022/lib/models/calendar-event.mjs +35 -0
- package/esm2022/lib/models/calendar.mjs +15 -0
- package/esm2022/lib/models/card/card-deal.mjs +15 -0
- package/esm2022/lib/models/card/card-logo-urls.mjs +21 -0
- package/esm2022/lib/models/card/card-logo.mjs +11 -0
- package/esm2022/lib/models/card/card-member-ticket.mjs +17 -0
- package/esm2022/lib/models/card/card-theme.mjs +15 -0
- package/esm2022/lib/models/card/card-ticket-location.mjs +13 -0
- package/esm2022/lib/models/card/card-ticket.mjs +37 -0
- package/{esm2020 → esm2022}/lib/models/card/card.mjs +9 -1
- package/esm2022/lib/models/card/home-team.mjs +11 -0
- package/esm2022/lib/models/card/member-card.mjs +23 -0
- package/esm2022/lib/models/card/search-member-card.mjs +13 -0
- package/esm2022/lib/models/club-image.mjs +31 -0
- package/{esm2020 → esm2022}/lib/models/club-section.mjs +3 -1
- package/{esm2020 → esm2022}/lib/models/club.mjs +3 -1
- package/esm2022/lib/models/collection.mjs +19 -0
- package/esm2022/lib/models/contact.mjs +61 -0
- package/esm2022/lib/models/directory.mjs +38 -0
- package/esm2022/lib/models/email.mjs +11 -0
- package/esm2022/lib/models/event.mjs +47 -0
- package/{esm2020 → esm2022}/lib/models/external-link.mjs +3 -1
- package/esm2022/lib/models/feature-flags.mjs +14 -0
- package/esm2022/lib/models/file-object.mjs +23 -0
- package/esm2022/lib/models/general-image.mjs +11 -0
- package/esm2022/lib/models/group-role.mjs +17 -0
- package/esm2022/lib/models/image-urls.mjs +15 -0
- package/esm2022/lib/models/index.mjs +64 -0
- package/esm2022/lib/models/invoice/member-fee.mjs +13 -0
- package/esm2022/lib/models/invoice/member-invoice-row.mjs +31 -0
- package/esm2022/lib/models/invoice/member-invoice.mjs +45 -0
- package/esm2022/lib/models/invoice/payment-attempt.mjs +21 -0
- package/esm2022/lib/models/invoice/payment-types/credit-card.mjs +27 -0
- package/esm2022/lib/models/invoice/payment-types/giro.mjs +17 -0
- package/esm2022/lib/models/invoice/payment-types/swish.mjs +31 -0
- package/esm2022/lib/models/invoice/payment-types/zimpler.mjs +19 -0
- package/esm2022/lib/models/invoice/search-member-invoice.mjs +26 -0
- package/{esm2020 → esm2022}/lib/models/invoice/swish-qr-code.mjs +2 -1
- package/esm2022/lib/models/invoice/unpaid-member-invoice.mjs +13 -0
- package/esm2022/lib/models/member/member-attribute.mjs +44 -0
- package/esm2022/lib/models/member/member-contact.mjs +26 -0
- package/esm2022/lib/models/member/member-function.mjs +24 -0
- package/esm2022/lib/models/member/member-validation-settings.mjs +21 -0
- package/esm2022/lib/models/member/member.mjs +101 -0
- package/{esm2020 → esm2022}/lib/models/member/other-member-field.mjs +4 -1
- package/esm2022/lib/models/member/other-member.mjs +21 -0
- package/esm2022/lib/models/member/search-member.mjs +35 -0
- package/esm2022/lib/models/member-activity-invite.mjs +42 -0
- package/esm2022/lib/models/member-public-form-field-option.mjs +13 -0
- package/esm2022/lib/models/member-public-form-field.mjs +27 -0
- package/esm2022/lib/models/member-public-form.mjs +55 -0
- package/esm2022/lib/models/member-team-through.mjs +23 -0
- package/esm2022/lib/models/member-team.mjs +21 -0
- package/esm2022/lib/models/member-type.mjs +11 -0
- package/esm2022/lib/models/news.mjs +66 -0
- package/esm2022/lib/models/open-activity.mjs +117 -0
- package/esm2022/lib/models/optional-fee.mjs +16 -0
- package/esm2022/lib/models/overbooked-bookable-item.mjs +15 -0
- package/esm2022/lib/models/overbooked-location.mjs +15 -0
- package/esm2022/lib/models/partner.mjs +13 -0
- package/esm2022/lib/models/public-authentication.mjs +9 -0
- package/esm2022/lib/models/registration-qr-code.mjs +19 -0
- package/esm2022/lib/models/search-club.mjs +23 -0
- package/esm2022/lib/models/search-team.mjs +24 -0
- package/{esm2020 → esm2022}/lib/models/section.mjs +3 -1
- package/esm2022/lib/models/token.mjs +11 -0
- package/esm2022/lib/models/user-notification.mjs +21 -0
- package/esm2022/lib/models/user.mjs +41 -0
- package/esm2022/lib/services/activity.service.mjs +508 -0
- package/esm2022/lib/services/api.service.mjs +108 -0
- package/esm2022/lib/services/auth.service.mjs +62 -0
- package/esm2022/lib/services/bookable.service.mjs +279 -0
- package/esm2022/lib/services/booking-calendar.service.mjs +736 -0
- package/esm2022/lib/services/club.service.mjs +35 -0
- package/esm2022/lib/services/constant.service.mjs +97 -0
- package/esm2022/lib/services/email.service.mjs +28 -0
- package/esm2022/lib/services/external-link.service.mjs +25 -0
- package/esm2022/lib/services/factories/activity-settings-factory.mjs +3 -0
- package/esm2022/lib/services/factories/bookable-item-factory.mjs +5 -0
- package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-application-time-factory.mjs +2 -2
- package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-factory.mjs +2 -2
- package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-slot-session-factory.mjs +2 -2
- package/esm2022/lib/services/factories/feature-flags-factory.mjs +5 -0
- package/esm2022/lib/services/factories/index.mjs +87 -0
- package/esm2022/lib/services/factories/member-public-form-factory.mjs +26 -0
- package/esm2022/lib/services/factories/payment-attempt-factory.mjs +23 -0
- package/esm2022/lib/services/feature-flags.service.mjs +44 -0
- package/esm2022/lib/services/file.service.mjs +65 -0
- package/esm2022/lib/services/index.mjs +24 -0
- package/esm2022/lib/services/invoice/invoice.service.mjs +42 -0
- package/esm2022/lib/services/invoice/payment-attempt.service.mjs +52 -0
- package/esm2022/lib/services/maintenance-mode.service.mjs +20 -0
- package/esm2022/lib/services/member-card.service.mjs +104 -0
- package/esm2022/lib/services/member-public-form.service.mjs +33 -0
- package/esm2022/lib/services/member.service.mjs +85 -0
- package/esm2022/lib/services/news.service.mjs +94 -0
- package/esm2022/lib/services/registration-qr-code.service.mjs +37 -0
- package/esm2022/lib/services/section.service.mjs +24 -0
- package/esm2022/lib/services/storage.service.mjs +44 -0
- package/esm2022/lib/services/team.service.mjs +89 -0
- package/esm2022/lib/services/token.service.mjs +58 -0
- package/esm2022/lib/services/user-notification.service.mjs +24 -0
- package/esm2022/lib/services/user.service.mjs +69 -0
- package/esm2022/lib/store/actions/activity.actions.mjs +177 -0
- package/esm2022/lib/store/actions/auth.actions.mjs +45 -0
- package/esm2022/lib/store/actions/booking.actions.mjs +187 -0
- package/esm2022/lib/store/actions/calendar.actions.mjs +77 -0
- package/esm2022/lib/store/actions/club-info.actions.mjs +23 -0
- package/esm2022/lib/store/actions/constant.actions.mjs +124 -0
- package/esm2022/lib/store/actions/email.actions.mjs +19 -0
- package/esm2022/lib/store/actions/external-link.actions.mjs +11 -0
- package/esm2022/lib/store/actions/file.actions.mjs +41 -0
- package/esm2022/lib/store/actions/index.mjs +19 -0
- package/esm2022/lib/store/actions/invoice.actions.mjs +73 -0
- package/esm2022/lib/store/actions/member-card.actions.mjs +71 -0
- package/esm2022/lib/store/actions/member.actions.mjs +65 -0
- package/esm2022/lib/store/actions/news.actions.mjs +47 -0
- package/esm2022/lib/store/actions/public-form.actions.mjs +17 -0
- package/esm2022/lib/store/actions/store.actions.mjs +7 -0
- package/esm2022/lib/store/actions/team.actions.mjs +83 -0
- package/esm2022/lib/store/actions/token.actions.mjs +53 -0
- package/esm2022/lib/store/actions/user.actions.mjs +49 -0
- package/esm2022/lib/store/effects/activity.effects.mjs +211 -0
- package/esm2022/lib/store/effects/auth.effects.mjs +96 -0
- package/esm2022/lib/store/effects/booking.effects.mjs +102 -0
- package/esm2022/lib/store/effects/calendar.effects.mjs +84 -0
- package/esm2022/lib/store/effects/club-info.effects.mjs +26 -0
- package/esm2022/lib/store/effects/constant.effects.mjs +69 -0
- package/esm2022/lib/store/effects/data-access.effects.mjs +37 -0
- package/esm2022/lib/store/effects/email.effects.mjs +27 -0
- package/esm2022/lib/store/effects/external-link.effects.mjs +20 -0
- package/esm2022/lib/store/effects/file.effects.mjs +149 -0
- package/esm2022/lib/store/effects/index.mjs +2 -0
- package/esm2022/lib/store/effects/invoice.effects.mjs +72 -0
- package/esm2022/lib/store/effects/member-card.effects.mjs +80 -0
- package/esm2022/lib/store/effects/member.effects.mjs +75 -0
- package/esm2022/lib/store/effects/mixins/extra-members-mixin.mjs +60 -0
- package/esm2022/lib/store/effects/news.effects.mjs +82 -0
- package/esm2022/lib/store/effects/public-form.effects.mjs +33 -0
- package/esm2022/lib/store/effects/team.effects.mjs +82 -0
- package/esm2022/lib/store/effects/token.effects.mjs +81 -0
- package/esm2022/lib/store/effects/user.effects.mjs +59 -0
- package/esm2022/lib/store/index.mjs +8 -0
- package/esm2022/lib/store/interfaces/activate-card-ticket.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/activate-user.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/calendar-activity-locations.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/calendar-activity-types.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/calendar-open-activity-result.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/calendar-public-open-activity-results.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/directory-result.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/email-settings.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/index.mjs +20 -0
- package/esm2022/lib/store/interfaces/list-result-interface.mjs +4 -0
- package/esm2022/lib/store/interfaces/location.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/member-calendar-event-result.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/member-card-deals.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/member-card-tickets.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/public-activate-card-ticket.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/remove-member-auth.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/remove-team-auth.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/retrieve-result.interface.mjs +4 -0
- package/esm2022/lib/store/interfaces/team-activity.interface.mjs +2 -0
- package/esm2022/lib/store/interfaces/team-calendar-event-result.interface.mjs +2 -0
- package/esm2022/lib/store/operators/ensure-activity.mjs +8 -0
- package/esm2022/lib/store/operators/ensure-auths.mjs +18 -0
- package/esm2022/lib/store/operators/ensure-calendar-events-loading-done.mjs +23 -0
- package/esm2022/lib/store/operators/ensure-constants.mjs +21 -0
- package/esm2022/lib/store/operators/ensure-current-auth.mjs +17 -0
- package/esm2022/lib/store/operators/ensure-current-user.mjs +16 -0
- package/esm2022/lib/store/operators/ensure-loading-done.mjs +24 -0
- package/esm2022/lib/store/operators/ensure-open-activities-loading-done.mjs +5 -0
- package/esm2022/lib/store/operators/ensure-public-open-activities-loading-done.mjs +5 -0
- package/esm2022/lib/store/operators/ensure-updated-data.mjs +10 -0
- package/esm2022/lib/store/operators/index.mjs +11 -0
- package/esm2022/lib/store/reducers/auth.reducer.mjs +52 -0
- package/esm2022/lib/store/reducers/booking.reducers.mjs +79 -0
- package/esm2022/lib/store/reducers/calendar.reducer.mjs +449 -0
- package/esm2022/lib/store/reducers/club-info.reducer.mjs +9 -0
- package/esm2022/lib/store/reducers/constant.reducer.mjs +181 -0
- package/esm2022/lib/store/reducers/data-access.reducer.mjs +37 -0
- package/esm2022/lib/store/reducers/email.reducer.mjs +21 -0
- package/esm2022/lib/store/reducers/external-link.reducer.mjs +6 -0
- package/esm2022/lib/store/reducers/file.reducer.mjs +118 -0
- package/esm2022/lib/store/reducers/index.mjs +2 -0
- package/esm2022/lib/store/reducers/invoice.reducer.mjs +6 -0
- package/esm2022/lib/store/reducers/member-card.reducer.mjs +33 -0
- package/esm2022/lib/store/reducers/member.reducer.mjs +21 -0
- package/esm2022/lib/store/reducers/news.reducer.mjs +96 -0
- package/esm2022/lib/store/reducers/public-form.reducer.mjs +21 -0
- package/esm2022/lib/store/reducers/public.reducer.mjs +109 -0
- package/esm2022/lib/store/reducers/reducer-helpers.mjs +61 -0
- package/esm2022/lib/store/reducers/team.reducer.mjs +77 -0
- package/esm2022/lib/store/reducers/token.reducer.mjs +21 -0
- package/esm2022/lib/store/reducers/user.reducer.mjs +18 -0
- package/esm2022/lib/store/selectors/auth.selectors.mjs +6 -0
- package/esm2022/lib/store/selectors/booking.selectors.mjs +15 -0
- package/esm2022/lib/store/selectors/calendar.selectors.mjs +18 -0
- package/esm2022/lib/store/selectors/club-info.selectors.mjs +5 -0
- package/esm2022/lib/store/selectors/constant.selectors.mjs +38 -0
- package/esm2022/lib/store/selectors/email.selectors.mjs +5 -0
- package/esm2022/lib/store/selectors/external-links.selectors.mjs +5 -0
- package/esm2022/lib/store/selectors/file.selectors.mjs +6 -0
- package/esm2022/lib/store/selectors/index.mjs +18 -0
- package/esm2022/lib/store/selectors/invoice.selectors.mjs +6 -0
- package/esm2022/lib/store/selectors/member-card.selectors.mjs +8 -0
- package/esm2022/lib/store/selectors/member.selectors.mjs +10 -0
- package/esm2022/lib/store/selectors/news.selectors.mjs +8 -0
- package/esm2022/lib/store/selectors/public-form.selectors.mjs +5 -0
- package/esm2022/lib/store/selectors/public.selectors.mjs +18 -0
- package/esm2022/lib/store/selectors/team.selectors.mjs +12 -0
- package/esm2022/lib/store/selectors/token.selectors.mjs +6 -0
- package/esm2022/lib/store/selectors/user.selectors.mjs +6 -0
- package/esm2022/lib/store/state/auth.state.mjs +5 -0
- package/esm2022/lib/store/state/booking.state.mjs +16 -0
- package/esm2022/lib/store/state/calendar.state.mjs +17 -0
- package/esm2022/lib/store/state/club-info.state.mjs +4 -0
- package/esm2022/lib/store/state/constant.state.mjs +21 -0
- package/esm2022/lib/store/state/data-access.state.mjs +2 -0
- package/esm2022/lib/store/state/email.state.mjs +7 -0
- package/esm2022/lib/store/state/external-link.state.mjs +4 -0
- package/esm2022/lib/store/state/file.state.mjs +5 -0
- package/esm2022/lib/store/state/index.mjs +19 -0
- package/esm2022/lib/store/state/invoice.state.mjs +5 -0
- package/esm2022/lib/store/state/member-card.state.mjs +7 -0
- package/esm2022/lib/store/state/member.state.mjs +10 -0
- package/esm2022/lib/store/state/news.state.mjs +7 -0
- package/esm2022/lib/store/state/public-form.state.mjs +5 -0
- package/esm2022/lib/store/state/public.state.mjs +17 -0
- package/esm2022/lib/store/state/team.state.mjs +11 -0
- package/esm2022/lib/store/state/token.state.mjs +5 -0
- package/esm2022/lib/store/state/user.state.mjs +5 -0
- package/fesm2022/myclub_se-data-access.mjs +10080 -0
- package/fesm2022/myclub_se-data-access.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/lib/api-models/api-bookable-item.d.ts +2 -0
- package/lib/api-models/api-booking-calendar-application-time.d.ts +3 -0
- package/lib/api-models/api-booking-calendar-slot-session.d.ts +3 -0
- package/lib/api-models/api-booking-calendar.d.ts +2 -0
- package/lib/api-models/api-feature-flags.d.ts +5 -0
- package/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-credit-card-data-type.d.ts +1 -1
- package/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-swish-data-type.d.ts +1 -1
- package/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-zimpler-data-type.d.ts +1 -1
- package/lib/api-models/index.d.ts +1 -0
- package/lib/authentication/authentication.interceptor.d.ts +12 -7
- package/lib/data-access.module.d.ts +3 -1
- package/lib/models/activity-settings.d.ts +3 -1
- package/lib/models/auth/auth.d.ts +3 -2
- package/lib/models/bookable-item.d.ts +6 -1
- package/lib/models/booking-calendar-application-time.d.ts +8 -3
- package/lib/models/booking-calendar-slot-session.d.ts +10 -5
- package/lib/models/booking-calendar-slot.d.ts +7 -6
- package/lib/models/booking-calendar.d.ts +4 -1
- package/lib/models/booking-settings.d.ts +5 -4
- package/lib/models/booking-slot-filter.d.ts +17 -0
- package/lib/models/directory.d.ts +1 -0
- package/lib/models/feature-flags.d.ts +7 -0
- package/lib/models/index.d.ts +2 -0
- package/lib/models/invoice/payment-attempt-data-types/payment-attempt-credit-card-data-type.d.ts +1 -1
- package/lib/models/invoice/payment-attempt-data-types/payment-attempt-swish-data-type.d.ts +1 -1
- package/lib/models/invoice/payment-attempt-data-types/payment-attempt-zimpler-data-type.d.ts +1 -1
- package/lib/services/activity.service.d.ts +55 -52
- package/lib/services/bookable.service.d.ts +12 -9
- package/lib/services/booking-calendar.service.d.ts +6 -23
- package/lib/services/constant.service.d.ts +5 -11
- package/lib/services/email.service.d.ts +0 -9
- package/lib/services/factories/feature-flags-factory.d.ts +3 -0
- package/lib/services/factories/index.d.ts +1 -0
- package/lib/services/feature-flags.service.d.ts +13 -0
- package/lib/services/index.d.ts +2 -0
- package/lib/services/member.service.d.ts +7 -3
- package/lib/services/storage.service.d.ts +20 -0
- package/lib/store/actions/activity.actions.d.ts +641 -0
- package/lib/store/actions/auth.actions.d.ts +83 -0
- package/lib/store/actions/booking.actions.d.ts +652 -0
- package/lib/store/actions/calendar.actions.d.ts +381 -0
- package/lib/store/actions/club-info.actions.d.ts +54 -0
- package/lib/store/actions/constant.actions.d.ts +249 -0
- package/lib/store/actions/email.actions.d.ts +57 -0
- package/lib/store/actions/external-link.actions.d.ts +22 -0
- package/lib/store/actions/file.actions.d.ts +169 -0
- package/lib/store/actions/index.d.ts +18 -0
- package/lib/store/actions/invoice.actions.d.ts +298 -0
- package/lib/store/actions/member-card.actions.d.ts +251 -0
- package/lib/store/actions/member.actions.d.ts +212 -0
- package/lib/store/actions/news.actions.d.ts +164 -0
- package/lib/store/actions/public-form.actions.d.ts +46 -0
- package/lib/store/actions/store.actions.d.ts +4 -0
- package/lib/store/actions/team.actions.d.ts +326 -0
- package/lib/store/actions/token.actions.d.ts +151 -0
- package/lib/store/actions/user.actions.d.ts +102 -0
- package/lib/store/effects/activity.effects.d.ts +152 -0
- package/lib/store/effects/auth.effects.d.ts +35 -0
- package/lib/store/effects/booking.effects.d.ts +196 -0
- package/lib/store/effects/calendar.effects.d.ts +129 -0
- package/lib/store/effects/club-info.effects.d.ts +24 -0
- package/lib/store/effects/constant.effects.d.ts +96 -0
- package/lib/store/effects/data-access.effects.d.ts +18 -0
- package/lib/store/effects/email.effects.d.ts +14 -0
- package/lib/store/effects/external-link.effects.d.ts +14 -0
- package/lib/store/effects/file.effects.d.ts +55 -0
- package/lib/store/effects/index.d.ts +1 -0
- package/lib/store/effects/invoice.effects.d.ts +80 -0
- package/lib/store/effects/member-card.effects.d.ts +69 -0
- package/lib/store/effects/member.effects.d.ts +58 -0
- package/lib/store/effects/mixins/extra-members-mixin.d.ts +10 -0
- package/lib/store/effects/news.effects.d.ts +49 -0
- package/lib/store/effects/public-form.effects.d.ts +19 -0
- package/lib/store/effects/team.effects.d.ts +80 -0
- package/lib/store/effects/token.effects.d.ts +66 -0
- package/lib/store/effects/user.effects.d.ts +36 -0
- package/lib/store/index.d.ts +7 -0
- package/lib/store/interfaces/activate-card-ticket.interface.d.ts +6 -0
- package/lib/store/interfaces/activate-user.interface.d.ts +4 -0
- package/lib/store/interfaces/calendar-activity-locations.interface.d.ts +7 -0
- package/lib/store/interfaces/calendar-activity-types.interface.d.ts +7 -0
- package/lib/store/interfaces/calendar-open-activity-result.interface.d.ts +8 -0
- package/lib/store/interfaces/calendar-public-open-activity-results.interface.d.ts +7 -0
- package/lib/store/interfaces/directory-result.interface.d.ts +5 -0
- package/lib/store/interfaces/email-settings.interface.d.ts +5 -0
- package/lib/store/interfaces/index.d.ts +19 -0
- package/lib/store/interfaces/list-result-interface.d.ts +13 -0
- package/lib/store/interfaces/location.interface.d.ts +7 -0
- package/lib/store/interfaces/member-calendar-event-result.interface.d.ts +8 -0
- package/lib/store/interfaces/member-card-deals.interface.d.ts +5 -0
- package/lib/store/interfaces/member-card-tickets.interface.d.ts +5 -0
- package/lib/store/interfaces/public-activate-card-ticket.interface.d.ts +6 -0
- package/lib/store/interfaces/remove-member-auth.interface.d.ts +4 -0
- package/lib/store/interfaces/remove-team-auth.interface.d.ts +4 -0
- package/lib/store/interfaces/retrieve-result.interface.d.ts +13 -0
- package/lib/store/interfaces/team-activity.interface.d.ts +9 -0
- package/lib/store/interfaces/team-calendar-event-result.interface.d.ts +8 -0
- package/lib/store/operators/ensure-activity.d.ts +4 -0
- package/lib/store/operators/ensure-auths.d.ts +13 -0
- package/lib/store/operators/ensure-calendar-events-loading-done.d.ts +19 -0
- package/lib/store/operators/ensure-constants.d.ts +12 -0
- package/lib/store/operators/ensure-current-auth.d.ts +12 -0
- package/lib/store/operators/ensure-current-user.d.ts +11 -0
- package/lib/store/operators/ensure-loading-done.d.ts +20 -0
- package/lib/store/operators/ensure-open-activities-loading-done.d.ts +3 -0
- package/lib/store/operators/ensure-public-open-activities-loading-done.d.ts +3 -0
- package/lib/store/operators/ensure-updated-data.d.ts +4 -0
- package/lib/store/operators/index.d.ts +10 -0
- package/lib/store/reducers/auth.reducer.d.ts +2 -0
- package/lib/store/reducers/booking.reducers.d.ts +2 -0
- package/lib/store/reducers/calendar.reducer.d.ts +2 -0
- package/lib/store/reducers/club-info.reducer.d.ts +2 -0
- package/lib/store/reducers/constant.reducer.d.ts +2 -0
- package/lib/store/reducers/data-access.reducer.d.ts +3 -0
- package/lib/store/reducers/email.reducer.d.ts +2 -0
- package/lib/store/reducers/external-link.reducer.d.ts +2 -0
- package/lib/store/reducers/file.reducer.d.ts +2 -0
- package/lib/store/reducers/index.d.ts +1 -0
- package/lib/store/reducers/invoice.reducer.d.ts +2 -0
- package/lib/store/reducers/member-card.reducer.d.ts +2 -0
- package/lib/store/reducers/member.reducer.d.ts +2 -0
- package/lib/store/reducers/news.reducer.d.ts +2 -0
- package/lib/store/reducers/public-form.reducer.d.ts +2 -0
- package/lib/store/reducers/public.reducer.d.ts +2 -0
- package/lib/store/reducers/reducer-helpers.d.ts +8 -0
- package/lib/store/reducers/team.reducer.d.ts +2 -0
- package/lib/store/reducers/token.reducer.d.ts +2 -0
- package/lib/store/reducers/user.reducer.d.ts +2 -0
- package/lib/store/selectors/auth.selectors.d.ts +4 -0
- package/lib/store/selectors/booking.selectors.d.ts +13 -0
- package/lib/store/selectors/calendar.selectors.d.ts +16 -0
- package/lib/store/selectors/club-info.selectors.d.ts +3 -0
- package/lib/store/selectors/constant.selectors.d.ts +19 -0
- package/lib/store/selectors/email.selectors.d.ts +3 -0
- package/lib/store/selectors/external-links.selectors.d.ts +3 -0
- package/lib/store/selectors/file.selectors.d.ts +4 -0
- package/lib/store/selectors/index.d.ts +17 -0
- package/lib/store/selectors/invoice.selectors.d.ts +4 -0
- package/lib/store/selectors/member-card.selectors.d.ts +6 -0
- package/lib/store/selectors/member.selectors.d.ts +8 -0
- package/lib/store/selectors/news.selectors.d.ts +6 -0
- package/lib/store/selectors/public-form.selectors.d.ts +3 -0
- package/lib/store/selectors/public.selectors.d.ts +16 -0
- package/lib/store/selectors/team.selectors.d.ts +10 -0
- package/lib/store/selectors/token.selectors.d.ts +4 -0
- package/lib/store/selectors/user.selectors.d.ts +4 -0
- package/lib/store/state/auth.state.d.ts +7 -0
- package/lib/store/state/booking.state.d.ts +16 -0
- package/lib/store/state/calendar.state.d.ts +19 -0
- package/lib/store/state/club-info.state.d.ts +6 -0
- package/lib/store/state/constant.state.d.ts +23 -0
- package/lib/store/state/data-access.state.d.ts +36 -0
- package/lib/store/state/email.state.d.ts +5 -0
- package/lib/store/state/external-link.state.d.ts +6 -0
- package/lib/store/state/file.state.d.ts +6 -0
- package/lib/store/state/index.d.ts +18 -0
- package/lib/store/state/invoice.state.d.ts +7 -0
- package/lib/store/state/member-card.state.d.ts +9 -0
- package/lib/store/state/member.state.d.ts +11 -0
- package/lib/store/state/news.state.d.ts +9 -0
- package/lib/store/state/public-form.state.d.ts +7 -0
- package/lib/store/state/public.state.d.ts +19 -0
- package/lib/store/state/team.state.d.ts +13 -0
- package/lib/store/state/token.state.d.ts +7 -0
- package/lib/store/state/user.state.d.ts +7 -0
- package/lib/types/attribute-type.d.ts +1 -1
- package/lib/types/booking-calendar-slot-reserved-time-position.d.ts +1 -1
- package/lib/types/booking-calendar-slot-type.d.ts +1 -1
- package/lib/types/contact-type.d.ts +1 -1
- package/lib/types/grant-type.d.ts +1 -1
- package/lib/types/payment-attempt-status-type.d.ts +1 -1
- package/lib/types/payment-attempt-type.d.ts +1 -1
- package/lib/types/sex-type.d.ts +1 -1
- package/package.json +13 -18
- package/esm2020/lib/api-models/api-invoice/api-payment-attempt-create.mjs +0 -8
- package/esm2020/lib/api-models/index.mjs +0 -56
- package/esm2020/lib/authentication/authentication.interceptor.mjs +0 -66
- package/esm2020/lib/authentication/authentication.service.mjs +0 -106
- package/esm2020/lib/authentication/guards/authenticated.guard.mjs +0 -36
- package/esm2020/lib/authentication/guards/handle-grant-token.guard.mjs +0 -29
- package/esm2020/lib/data-access.module.mjs +0 -30
- package/esm2020/lib/maintenance/maintenance.interceptor.mjs +0 -29
- package/esm2020/lib/models/activity-extra-member.mjs +0 -12
- package/esm2020/lib/models/activity-invite.mjs +0 -20
- package/esm2020/lib/models/activity-location-group.mjs +0 -21
- package/esm2020/lib/models/activity-location-part.mjs +0 -14
- package/esm2020/lib/models/activity-location-tag.mjs +0 -17
- package/esm2020/lib/models/activity-location.mjs +0 -36
- package/esm2020/lib/models/activity-participant.mjs +0 -12
- package/esm2020/lib/models/activity-settings.mjs +0 -14
- package/esm2020/lib/models/activity-type.mjs +0 -26
- package/esm2020/lib/models/activity.mjs +0 -92
- package/esm2020/lib/models/auth/auth-member.mjs +0 -10
- package/esm2020/lib/models/auth/auth-team.mjs +0 -9
- package/esm2020/lib/models/auth/auth.mjs +0 -15
- package/esm2020/lib/models/bookable-group.mjs +0 -21
- package/esm2020/lib/models/bookable-item.mjs +0 -34
- package/esm2020/lib/models/bookable-part.mjs +0 -14
- package/esm2020/lib/models/bookable-tag.mjs +0 -17
- package/esm2020/lib/models/booking-calendar-application-time.mjs +0 -52
- package/esm2020/lib/models/booking-calendar-slot-session.mjs +0 -54
- package/esm2020/lib/models/booking-calendar-slot.mjs +0 -53
- package/esm2020/lib/models/booking-calendar.mjs +0 -54
- package/esm2020/lib/models/booking-settings.mjs +0 -22
- package/esm2020/lib/models/calendar-event.mjs +0 -20
- package/esm2020/lib/models/calendar.mjs +0 -10
- package/esm2020/lib/models/card/card-deal.mjs +0 -10
- package/esm2020/lib/models/card/card-logo-urls.mjs +0 -13
- package/esm2020/lib/models/card/card-logo.mjs +0 -8
- package/esm2020/lib/models/card/card-member-ticket.mjs +0 -11
- package/esm2020/lib/models/card/card-theme.mjs +0 -10
- package/esm2020/lib/models/card/card-ticket-location.mjs +0 -9
- package/esm2020/lib/models/card/card-ticket.mjs +0 -21
- package/esm2020/lib/models/card/home-team.mjs +0 -8
- package/esm2020/lib/models/card/member-card.mjs +0 -14
- package/esm2020/lib/models/card/search-member-card.mjs +0 -9
- package/esm2020/lib/models/club-image.mjs +0 -18
- package/esm2020/lib/models/collection.mjs +0 -15
- package/esm2020/lib/models/contact.mjs +0 -46
- package/esm2020/lib/models/directory.mjs +0 -26
- package/esm2020/lib/models/email.mjs +0 -8
- package/esm2020/lib/models/event.mjs +0 -26
- package/esm2020/lib/models/file-object.mjs +0 -14
- package/esm2020/lib/models/general-image.mjs +0 -8
- package/esm2020/lib/models/group-role.mjs +0 -11
- package/esm2020/lib/models/image-urls.mjs +0 -10
- package/esm2020/lib/models/index.mjs +0 -62
- package/esm2020/lib/models/invoice/member-fee.mjs +0 -9
- package/esm2020/lib/models/invoice/member-invoice-row.mjs +0 -18
- package/esm2020/lib/models/invoice/member-invoice.mjs +0 -25
- package/esm2020/lib/models/invoice/payment-attempt.mjs +0 -13
- package/esm2020/lib/models/invoice/payment-types/credit-card.mjs +0 -16
- package/esm2020/lib/models/invoice/payment-types/giro.mjs +0 -11
- package/esm2020/lib/models/invoice/payment-types/swish.mjs +0 -18
- package/esm2020/lib/models/invoice/payment-types/zimpler.mjs +0 -12
- package/esm2020/lib/models/invoice/search-member-invoice.mjs +0 -17
- package/esm2020/lib/models/invoice/unpaid-member-invoice.mjs +0 -9
- package/esm2020/lib/models/member/member-attribute.mjs +0 -33
- package/esm2020/lib/models/member/member-contact.mjs +0 -21
- package/esm2020/lib/models/member/member-function.mjs +0 -19
- package/esm2020/lib/models/member/member-validation-settings.mjs +0 -13
- package/esm2020/lib/models/member/member.mjs +0 -75
- package/esm2020/lib/models/member/other-member.mjs +0 -13
- package/esm2020/lib/models/member/search-member.mjs +0 -20
- package/esm2020/lib/models/member-activity-invite.mjs +0 -31
- package/esm2020/lib/models/member-public-form-field-option.mjs +0 -9
- package/esm2020/lib/models/member-public-form-field.mjs +0 -16
- package/esm2020/lib/models/member-public-form.mjs +0 -30
- package/esm2020/lib/models/member-team-through.mjs +0 -14
- package/esm2020/lib/models/member-team.mjs +0 -13
- package/esm2020/lib/models/member-type.mjs +0 -8
- package/esm2020/lib/models/news.mjs +0 -47
- package/esm2020/lib/models/open-activity.mjs +0 -62
- package/esm2020/lib/models/optional-fee.mjs +0 -11
- package/esm2020/lib/models/overbooked-bookable-item.mjs +0 -10
- package/esm2020/lib/models/overbooked-location.mjs +0 -10
- package/esm2020/lib/models/partner.mjs +0 -9
- package/esm2020/lib/models/public-authentication.mjs +0 -7
- package/esm2020/lib/models/registration-qr-code.mjs +0 -12
- package/esm2020/lib/models/search-club.mjs +0 -14
- package/esm2020/lib/models/search-team.mjs +0 -18
- package/esm2020/lib/models/token.mjs +0 -8
- package/esm2020/lib/models/user-notification.mjs +0 -13
- package/esm2020/lib/models/user.mjs +0 -31
- package/esm2020/lib/services/activity.service.mjs +0 -470
- package/esm2020/lib/services/api.service.mjs +0 -106
- package/esm2020/lib/services/auth.service.mjs +0 -61
- package/esm2020/lib/services/bookable.service.mjs +0 -258
- package/esm2020/lib/services/booking-calendar.service.mjs +0 -794
- package/esm2020/lib/services/club.service.mjs +0 -34
- package/esm2020/lib/services/constant.service.mjs +0 -131
- package/esm2020/lib/services/email.service.mjs +0 -53
- package/esm2020/lib/services/external-link.service.mjs +0 -24
- package/esm2020/lib/services/factories/activity-settings-factory.mjs +0 -3
- package/esm2020/lib/services/factories/bookable-item-factory.mjs +0 -5
- package/esm2020/lib/services/factories/index.mjs +0 -86
- package/esm2020/lib/services/factories/member-public-form-factory.mjs +0 -26
- package/esm2020/lib/services/factories/payment-attempt-factory.mjs +0 -23
- package/esm2020/lib/services/file.service.mjs +0 -64
- package/esm2020/lib/services/index.mjs +0 -22
- package/esm2020/lib/services/invoice/invoice.service.mjs +0 -41
- package/esm2020/lib/services/invoice/payment-attempt.service.mjs +0 -51
- package/esm2020/lib/services/maintenance-mode.service.mjs +0 -21
- package/esm2020/lib/services/member-card.service.mjs +0 -103
- package/esm2020/lib/services/member-public-form.service.mjs +0 -32
- package/esm2020/lib/services/member.service.mjs +0 -63
- package/esm2020/lib/services/news.service.mjs +0 -102
- package/esm2020/lib/services/registration-qr-code.service.mjs +0 -36
- package/esm2020/lib/services/section.service.mjs +0 -23
- package/esm2020/lib/services/team.service.mjs +0 -88
- package/esm2020/lib/services/token.service.mjs +0 -57
- package/esm2020/lib/services/user-notification.service.mjs +0 -23
- package/esm2020/lib/services/user.service.mjs +0 -68
- package/fesm2015/myclub_se-data-access.mjs +0 -4810
- package/fesm2015/myclub_se-data-access.mjs.map +0 -1
- package/fesm2020/myclub_se-data-access.mjs +0 -4806
- package/fesm2020/myclub_se-data-access.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-extra-member.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-invite.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-location-group.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-location-part.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-location-tag.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-location.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-participant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-settings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-activity.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-member.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-section.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-team-section.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth-team.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/api-auth.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-auth/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-bookable-group.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-bookable-part.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-bookable-tag.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-booking-calendar-slot.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-booking-settings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-calendar-event.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-calendar.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-deal.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-logo-urls.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-logo.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-member-ticket.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-theme.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-ticket-location.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card-ticket.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-card.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-home-team.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-member-card.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/api-search-member-card.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-card/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-club-image.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-club-section.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-club.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-collection.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-directory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-event.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-external-link.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-file-object.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-general-image.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-group-role.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-image-urls.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-credit-card.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-giro.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-swish.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/api-zimpler.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-invoice-payments/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-member-fee.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-member-invoice-row.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-member-invoice.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-payment-attempt.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-search-member-invoice.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-swish-qr-code.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/api-unpaid-member-invoice.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-credit-card-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-swish-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/api-payment-attempt-zimpler-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-invoice/payment-attempt-data-types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-contact.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-attribute.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-contact.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member-validation-settings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-member.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-other-member-field.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-other-member.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/api-search-member.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-activity-invite.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-public-form-field-option.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-public-form-field.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-public-form.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-team-through.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-team.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-member-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-news.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-open-activity.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-optional-fee.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-overbooked-bookable-item.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-overbooked-location.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-partner.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-public-token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-registration-qr-code.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-search-club.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-search-team.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-section.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-user-notification.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api-models/api-user.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/authentication/authentication.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/authentication/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/email-recipient.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/new-account.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/open-activity-search-params.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/option.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/sms-recipient.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/maintenance/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/auth/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/card/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/payment-attempt-credit-card-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/payment-attempt-swish-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/payment-attempt-data-types/payment-attempt-zimpler-data-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/invoice/payment-types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/member/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/role.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-extra-member-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-invite-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-location-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-location-group-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-location-part-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-location-tag-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-participant-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/activity-type-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/auth-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/auth-member-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/auth-section-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/auth-team-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/auth-team-section-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/bookable-group-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/bookable-part-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/bookable-tag-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/booking-calendar-slot-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/booking-settings-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-deal-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-logo-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-logo-urls-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-member-ticket-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-theme-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-ticket-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/card-ticket-location-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/club-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/club-image-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/club-section-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/contact-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/credit-card-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/directory-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/event-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/external-link-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/file-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/general-image-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/giro-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/group-role-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/home-team-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/image-urls-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-attribute-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-card-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-contact-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-fee-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-function-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-invite-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-invoice-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-invoice-row-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-public-form-field-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-public-form-field-option-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-team-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-team-through-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-type-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/member-validation-settings-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/news-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/open-activity-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/optional-fee-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/other-member-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/other-member-field-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/overbooked-bookable-item-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/overbooked-location-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/partner-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/public-authentication-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/registration-qr-code-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-club-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-member-card-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-member-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-member-invoice-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-member-team-through-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/search-team-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/section-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/swish-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/token-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/unpaid-invoice-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/user-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/user-notification-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/factories/zimpler-factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/invoice/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/attribute-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/booking-calendar-slot-reserved-time-position.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/booking-calendar-slot-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/contact-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/grant-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/payment-attempt-status-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/payment-attempt-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/sex-type.mjs +0 -0
- /package/{esm2020 → esm2022}/myclub_se-data-access.mjs +0 -0
|
@@ -1,794 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Role, } from '../models';
|
|
3
|
-
import { bookingCalendarApplicationTimeFactory, bookingCalendarFactory, bookingCalendarSlotFactory, bookingCalendarSlotSessionFactory, bookingSettingsFactory, overbookedBookableItemFactory, } from "./factories";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./api.service";
|
|
6
|
-
const CLUB_BOOKING_CALENDARS_PATH = ':clubId/activities/calendars/';
|
|
7
|
-
const CLUB_BOOKING_CALENDAR_PATH = ':clubId/activities/calendars/:id/';
|
|
8
|
-
const CLUB_BOOKING_CALENDAR_SLOTS_PATH = ':clubId/activities/slots/';
|
|
9
|
-
const CLUB_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':clubId/activities/slots/application-times/';
|
|
10
|
-
const CLUB_BOOKING_CALENDAR_SLOTS_COPY_PATH = ':clubId/activities/slots/copy/';
|
|
11
|
-
const CLUB_BOOKING_CALENDAR_SLOTS_CLEAR_PATH = ':clubId/activities/slots/clear/';
|
|
12
|
-
const CLUB_BOOKING_CALENDAR_SLOTS_SYNC_PATH = ':clubId/activities/slots/sync/';
|
|
13
|
-
const CLUB_BOOKING_CALENDAR_SLOT_PATH = ':clubId/activities/slots/:id/';
|
|
14
|
-
const CLUB_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH = ':clubId/activities/slots/:id/all/';
|
|
15
|
-
const CLUB_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':clubId/activities/sessions/';
|
|
16
|
-
const CLUB_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':clubId/activities/sessions/:id/';
|
|
17
|
-
const CLUB_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH = ':clubId/activities/sessions/:id/all/';
|
|
18
|
-
const CLUB_BOOKING_SETTINGS_PATH = ':clubId/activities/booking-settings/';
|
|
19
|
-
const CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':clubId/activities/application-times/:id/';
|
|
20
|
-
const CLUB_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':clubId/activities/application-times/';
|
|
21
|
-
const CLUB_BOOKING_OVERBOOKED_SESSIONS_PATH = ':clubId/activities/overbooked/sessions/';
|
|
22
|
-
const CLUB_BOOKING_OVERBOOKED_BOOKABLES_PATH = ':clubId/activities/overbooked/bookables/';
|
|
23
|
-
const SECTION_BOOKING_CALENDARS_PATH = ':sectionId/activities/calendars/';
|
|
24
|
-
const SECTION_BOOKING_CALENDAR_PATH = ':sectionId/activities/calendars/:id/';
|
|
25
|
-
const SECTION_BOOKING_CALENDAR_SLOTS_PATH = ':sectionId/activities/slots/';
|
|
26
|
-
const SECTION_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':sectionId/activities/slots/application-times/';
|
|
27
|
-
const SECTION_BOOKING_CALENDAR_SLOTS_COPY_PATH = ':sectionId/activities/slots/copy/';
|
|
28
|
-
const SECTION_BOOKING_CALENDAR_SLOTS_CLEAR_PATH = ':sectionId/activities/slots/clear/';
|
|
29
|
-
const SECTION_BOOKING_CALENDAR_SLOTS_SYNC_PATH = ':sectionId/activities/slots/sync/';
|
|
30
|
-
const SECTION_BOOKING_CALENDAR_SLOT_PATH = ':sectionId/activities/slots/:id/';
|
|
31
|
-
const SECTION_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH = ':sectionId/activities/slots/:id/all/';
|
|
32
|
-
const SECTION_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':sectionId/activities/sessions/';
|
|
33
|
-
const SECTION_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':sectionId/activities/sessions/:id/';
|
|
34
|
-
const SECTION_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH = ':sectionId/activities/sessions/:id/all/';
|
|
35
|
-
const SECTION_BOOKING_SETTINGS_PATH = ':sectionId/activities/booking-settings/';
|
|
36
|
-
const SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':sectionId/activities/application-times/:id/';
|
|
37
|
-
const SECTION_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':sectionId/activities/application-times/';
|
|
38
|
-
const SECTION_BOOKING_OVERBOOKED_SESSIONS_PATH = ':sectionId/activities/overbooked/sessions/';
|
|
39
|
-
const SECTION_BOOKING_OVERBOOKED_BOOKABLES_PATH = ':sectionId/activities/overbooked/bookables/';
|
|
40
|
-
const TEAM_BOOKING_CALENDARS_PATH = ':teamId/activities/calendars/';
|
|
41
|
-
const TEAM_BOOKING_CALENDAR_SLOTS_PATH = ':teamId/activities/slots/';
|
|
42
|
-
const TEAM_BOOKING_CALENDAR_SLOTS_SYNC_PATH = ':teamId/activities/slots/sync/';
|
|
43
|
-
const TEAM_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':teamId/activities/slots/application-times/';
|
|
44
|
-
const TEAM_BOOKING_SETTINGS_PATH = ':teamId/activities/booking-settings/';
|
|
45
|
-
const TEAM_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':teamId/activities/sessions/';
|
|
46
|
-
const TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':teamId/activities/sessions/:id/';
|
|
47
|
-
const TEAM_BOOKING_CALENDAR_SLOT_PATH = ':teamId/activities/slots/:id/';
|
|
48
|
-
const TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':teamId/activities/application-times/';
|
|
49
|
-
const TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':teamId/activities/application-times/:id/';
|
|
50
|
-
export class BookingSlotFilter {
|
|
51
|
-
constructor(startDate = null, endDate = null, calendarIds = [], locationIds = [], bookableItemIds = [], tagIds = [], teamIds = [], bookableGroupIds = [], activityTypeIds = [], hasOpenSessions = null, showApplicationTimes = null, sortBy = null) {
|
|
52
|
-
this.startDate = startDate;
|
|
53
|
-
this.endDate = endDate;
|
|
54
|
-
this.calendarIds = calendarIds;
|
|
55
|
-
this.locationIds = locationIds;
|
|
56
|
-
this.bookableItemIds = bookableItemIds;
|
|
57
|
-
this.tagIds = tagIds;
|
|
58
|
-
this.teamIds = teamIds;
|
|
59
|
-
this.bookableGroupIds = bookableGroupIds;
|
|
60
|
-
this.activityTypeIds = activityTypeIds;
|
|
61
|
-
this.hasOpenSessions = hasOpenSessions;
|
|
62
|
-
this.showApplicationTimes = showApplicationTimes;
|
|
63
|
-
this.sortBy = sortBy;
|
|
64
|
-
}
|
|
65
|
-
static fromFilter(filter) {
|
|
66
|
-
return new this(filter.startDate, filter.endDate, filter.calendarIds, filter.locationIds, filter.bookableItemIds, filter.tagIds, filter.teamIds, filter.bookableGroupIds, filter.activityTypeIds, filter.hasOpenSessions, filter.showApplicationTimes, filter.sortBy);
|
|
67
|
-
}
|
|
68
|
-
toParams() {
|
|
69
|
-
const params = { limit: 'null' };
|
|
70
|
-
if (this.startDate) {
|
|
71
|
-
params['day__gte'] = this.startDate;
|
|
72
|
-
}
|
|
73
|
-
if (this.endDate) {
|
|
74
|
-
params['day__lte'] = this.endDate;
|
|
75
|
-
}
|
|
76
|
-
if (this.calendarIds && this.calendarIds.length) {
|
|
77
|
-
params['calendar_id'] = this.calendarIds.join(',');
|
|
78
|
-
}
|
|
79
|
-
if (this.locationIds && this.locationIds.length) {
|
|
80
|
-
params['location_id'] = this.locationIds.join(',');
|
|
81
|
-
}
|
|
82
|
-
if (this.bookableItemIds && this.bookableItemIds.length) {
|
|
83
|
-
params['bookable_id'] = this.bookableItemIds.join(',');
|
|
84
|
-
}
|
|
85
|
-
if (this.bookableGroupIds && this.bookableGroupIds.length) {
|
|
86
|
-
params['bookable_group_id'] = this.bookableGroupIds.join(',');
|
|
87
|
-
}
|
|
88
|
-
if (this.tagIds && this.tagIds.length) {
|
|
89
|
-
params['bookable_tag_id'] = this.tagIds.join(',');
|
|
90
|
-
}
|
|
91
|
-
if (this.teamIds && this.teamIds.length) {
|
|
92
|
-
params['team_id'] = this.teamIds.join(',');
|
|
93
|
-
}
|
|
94
|
-
if (this.activityTypeIds && this.activityTypeIds.length) {
|
|
95
|
-
params["activity_type_id"] = this.activityTypeIds.join(",");
|
|
96
|
-
}
|
|
97
|
-
if (typeof this.hasOpenSessions === 'boolean') {
|
|
98
|
-
params['has_open_sessions'] = String(this.hasOpenSessions);
|
|
99
|
-
}
|
|
100
|
-
if (typeof this.showApplicationTimes === 'boolean') {
|
|
101
|
-
params['show_application_times'] = String(this.showApplicationTimes);
|
|
102
|
-
}
|
|
103
|
-
if (this.sortBy) {
|
|
104
|
-
params['order'] = this.sortBy;
|
|
105
|
-
}
|
|
106
|
-
return params;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
export class BookingCalendarService {
|
|
110
|
-
constructor(apiService) {
|
|
111
|
-
this.apiService = apiService;
|
|
112
|
-
}
|
|
113
|
-
// region Booking calendar
|
|
114
|
-
createBookingCalendar(role, clubOrSectionOrTeamId, calendar) {
|
|
115
|
-
if (role === Role.ClubAdmin) {
|
|
116
|
-
return this.createClubBookingCalendar(clubOrSectionOrTeamId, calendar);
|
|
117
|
-
}
|
|
118
|
-
return this.createSectionBookingCalendar(clubOrSectionOrTeamId, calendar);
|
|
119
|
-
}
|
|
120
|
-
createClubBookingCalendar(clubId, calendar) {
|
|
121
|
-
delete calendar.id;
|
|
122
|
-
return this.apiService
|
|
123
|
-
.postResource(bookingCalendarFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDARS_PATH, {
|
|
124
|
-
clubId,
|
|
125
|
-
}, calendar);
|
|
126
|
-
}
|
|
127
|
-
createSectionBookingCalendar(sectionId, calendar) {
|
|
128
|
-
delete calendar.id;
|
|
129
|
-
return this.apiService
|
|
130
|
-
.postResource(bookingCalendarFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDARS_PATH, {
|
|
131
|
-
sectionId,
|
|
132
|
-
}, calendar);
|
|
133
|
-
}
|
|
134
|
-
getBookingCalendars(role, clubOrSectionOrTeamId, name = null) {
|
|
135
|
-
if (role == Role.ClubAdmin) {
|
|
136
|
-
return this.getClubBookingCalendars(clubOrSectionOrTeamId, name);
|
|
137
|
-
}
|
|
138
|
-
else if (role == Role.SectionAdmin) {
|
|
139
|
-
return this.getSectionBookingCalendars(clubOrSectionOrTeamId, name);
|
|
140
|
-
}
|
|
141
|
-
return this.getTeamBookingCalendars(clubOrSectionOrTeamId, name);
|
|
142
|
-
}
|
|
143
|
-
getClubBookingCalendars(clubId, name = null) {
|
|
144
|
-
const params = { limit: 'null' };
|
|
145
|
-
if (name) {
|
|
146
|
-
params['name'] = name;
|
|
147
|
-
}
|
|
148
|
-
return this.apiService
|
|
149
|
-
.getCollection(bookingCalendarFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDARS_PATH, { clubId }, {
|
|
150
|
-
params
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
getSectionBookingCalendars(sectionId, name = null) {
|
|
154
|
-
const params = { limit: 'null' };
|
|
155
|
-
if (name) {
|
|
156
|
-
params['name'] = name;
|
|
157
|
-
}
|
|
158
|
-
return this.apiService
|
|
159
|
-
.getCollection(bookingCalendarFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDARS_PATH, { sectionId }, {
|
|
160
|
-
params
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
getTeamBookingCalendars(teamId, name = null) {
|
|
164
|
-
const params = { limit: 'null' };
|
|
165
|
-
if (name) {
|
|
166
|
-
params['name'] = name;
|
|
167
|
-
}
|
|
168
|
-
return this.apiService
|
|
169
|
-
.getCollection(bookingCalendarFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDARS_PATH, { teamId }, {
|
|
170
|
-
params
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
updateBookingCalendar(role, clubOrSectionOrTeamId, calendar) {
|
|
174
|
-
if (role === Role.ClubAdmin) {
|
|
175
|
-
return this.updateClubBookingCalendar(clubOrSectionOrTeamId, calendar);
|
|
176
|
-
}
|
|
177
|
-
return this.updateSectionBookingCalendar(clubOrSectionOrTeamId, calendar);
|
|
178
|
-
}
|
|
179
|
-
updateClubBookingCalendar(clubId, calendar) {
|
|
180
|
-
return this.apiService
|
|
181
|
-
.updateResource(bookingCalendarFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_PATH, {
|
|
182
|
-
clubId,
|
|
183
|
-
id: calendar.id
|
|
184
|
-
}, calendar);
|
|
185
|
-
}
|
|
186
|
-
updateSectionBookingCalendar(sectionId, calendar) {
|
|
187
|
-
return this.apiService
|
|
188
|
-
.updateResource(bookingCalendarFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_PATH, {
|
|
189
|
-
sectionId,
|
|
190
|
-
id: calendar.id
|
|
191
|
-
}, calendar);
|
|
192
|
-
}
|
|
193
|
-
deleteBookingCalendar(role, clubOrSectionOrTeamId, id) {
|
|
194
|
-
if (role === Role.ClubAdmin) {
|
|
195
|
-
return this.deleteClubBookingCalendar(clubOrSectionOrTeamId, id);
|
|
196
|
-
}
|
|
197
|
-
return this.deleteSectionBookingCalendar(clubOrSectionOrTeamId, id);
|
|
198
|
-
}
|
|
199
|
-
deleteClubBookingCalendar(clubId, id) {
|
|
200
|
-
return this.apiService
|
|
201
|
-
.deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_PATH, {
|
|
202
|
-
clubId,
|
|
203
|
-
id
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
deleteSectionBookingCalendar(sectionId, id) {
|
|
207
|
-
return this.apiService
|
|
208
|
-
.deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_PATH, {
|
|
209
|
-
sectionId,
|
|
210
|
-
id
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
// endregion
|
|
214
|
-
// region Booking calendar slot
|
|
215
|
-
createBookingCalendarSlot(role, clubOrSectionOrTeamId, slot) {
|
|
216
|
-
if (role === Role.ClubAdmin) {
|
|
217
|
-
return this.createClubBookingCalendarSlot(clubOrSectionOrTeamId, slot);
|
|
218
|
-
}
|
|
219
|
-
return this.createSectionBookingCalendarSlot(clubOrSectionOrTeamId, slot);
|
|
220
|
-
}
|
|
221
|
-
createClubBookingCalendarSlot(clubId, slot) {
|
|
222
|
-
delete slot.id;
|
|
223
|
-
return this.apiService
|
|
224
|
-
.postResource(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_PATH, {
|
|
225
|
-
clubId,
|
|
226
|
-
}, slot);
|
|
227
|
-
}
|
|
228
|
-
createSectionBookingCalendarSlot(sectionId, slot) {
|
|
229
|
-
delete slot.id;
|
|
230
|
-
return this.apiService
|
|
231
|
-
.postResource(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_PATH, {
|
|
232
|
-
sectionId,
|
|
233
|
-
}, slot);
|
|
234
|
-
}
|
|
235
|
-
getBookingCalendarSlots(role, clubOrSectionOrTeamId, bookingSlotFilter) {
|
|
236
|
-
if (role == Role.ClubAdmin) {
|
|
237
|
-
return this.getClubBookingCalendarSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
238
|
-
}
|
|
239
|
-
else if (role == Role.SectionAdmin) {
|
|
240
|
-
return this.getSectionBookingCalendarSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
241
|
-
}
|
|
242
|
-
return this.getTeamBookingCalendarSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
243
|
-
}
|
|
244
|
-
getClubBookingCalendarSlots(clubId, bookingSlotFilter) {
|
|
245
|
-
const params = bookingSlotFilter.toParams();
|
|
246
|
-
return this.apiService
|
|
247
|
-
.getCollection(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_PATH, { clubId }, {
|
|
248
|
-
params
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
getSectionBookingCalendarSlots(sectionId, bookingSlotFilter) {
|
|
252
|
-
const params = bookingSlotFilter.toParams();
|
|
253
|
-
return this.apiService
|
|
254
|
-
.getCollection(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_PATH, { sectionId }, {
|
|
255
|
-
params
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
getTeamBookingCalendarSlots(teamId, bookingSlotFilter) {
|
|
259
|
-
const params = bookingSlotFilter.toParams();
|
|
260
|
-
return this.apiService
|
|
261
|
-
.getCollection(bookingCalendarSlotFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOTS_PATH, { teamId }, {
|
|
262
|
-
params
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
getBookingCalendarSlot(role, clubOrSectionOrTeamId, slotId) {
|
|
266
|
-
if (role == Role.ClubAdmin) {
|
|
267
|
-
return this.getClubBookingCalendarSlot(clubOrSectionOrTeamId, slotId);
|
|
268
|
-
}
|
|
269
|
-
else if (role == Role.SectionAdmin) {
|
|
270
|
-
return this.getSectionBookingCalendarSlot(clubOrSectionOrTeamId, slotId);
|
|
271
|
-
}
|
|
272
|
-
return this.getTeamBookingCalendarSlot(clubOrSectionOrTeamId, slotId);
|
|
273
|
-
}
|
|
274
|
-
getClubBookingCalendarSlot(clubId, slotId) {
|
|
275
|
-
return this.apiService
|
|
276
|
-
.getResource(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_PATH, {
|
|
277
|
-
clubId,
|
|
278
|
-
id: slotId
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
getSectionBookingCalendarSlot(sectionId, slotId) {
|
|
282
|
-
return this.apiService
|
|
283
|
-
.getResource(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_PATH, {
|
|
284
|
-
sectionId,
|
|
285
|
-
id: slotId
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
getTeamBookingCalendarSlot(teamId, slotId) {
|
|
289
|
-
return this.apiService
|
|
290
|
-
.getResource(bookingCalendarSlotFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_PATH, {
|
|
291
|
-
teamId,
|
|
292
|
-
id: slotId
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
getBookingCalendarApplicationTimeSlots(role, clubOrSectionOrTeamId, bookingSlotFilter) {
|
|
296
|
-
if (role == Role.ClubAdmin) {
|
|
297
|
-
return this.getClubBookingCalendarApplicationTimeSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
298
|
-
}
|
|
299
|
-
else if (role == Role.SectionAdmin) {
|
|
300
|
-
return this.getSectionBookingCalendarApplicationTimeSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
301
|
-
}
|
|
302
|
-
return this.getTeamBookingCalendarApplicationTimeSlots(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
303
|
-
}
|
|
304
|
-
getClubBookingCalendarApplicationTimeSlots(clubId, bookingSlotFilter) {
|
|
305
|
-
const params = bookingSlotFilter.toParams();
|
|
306
|
-
return this.apiService
|
|
307
|
-
.getCollection(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH, { clubId }, {
|
|
308
|
-
params
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
getSectionBookingCalendarApplicationTimeSlots(sectionId, bookingSlotFilter) {
|
|
312
|
-
const params = bookingSlotFilter.toParams();
|
|
313
|
-
return this.apiService
|
|
314
|
-
.getCollection(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH, { sectionId }, {
|
|
315
|
-
params
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
getTeamBookingCalendarApplicationTimeSlots(teamId, bookingSlotFilter) {
|
|
319
|
-
const params = bookingSlotFilter.toParams();
|
|
320
|
-
return this.apiService
|
|
321
|
-
.getCollection(bookingCalendarSlotFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH, { teamId }, {
|
|
322
|
-
params
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
getBookingCalendarApplicationTimes(role, clubOrSectionOrTeamId, bookingSlotFilter) {
|
|
326
|
-
if (role == Role.ClubAdmin) {
|
|
327
|
-
return this.getClubBookingCalendarApplicationTimes(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
328
|
-
}
|
|
329
|
-
else if (role == Role.SectionAdmin) {
|
|
330
|
-
return this.getSectionBookingCalendarApplicationTimes(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
331
|
-
}
|
|
332
|
-
return this.getTeamBookingCalendarApplicationTimes(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
333
|
-
}
|
|
334
|
-
getClubBookingCalendarApplicationTimes(clubId, bookingSlotFilter) {
|
|
335
|
-
const params = bookingSlotFilter.toParams();
|
|
336
|
-
return this.apiService
|
|
337
|
-
.getCollection(bookingCalendarApplicationTimeFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, { clubId }, {
|
|
338
|
-
params
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
getSectionBookingCalendarApplicationTimes(sectionId, bookingSlotFilter) {
|
|
342
|
-
const params = bookingSlotFilter.toParams();
|
|
343
|
-
return this.apiService
|
|
344
|
-
.getCollection(bookingCalendarApplicationTimeFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, { sectionId }, {
|
|
345
|
-
params
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
getTeamBookingCalendarApplicationTimes(teamId, bookingSlotFilter) {
|
|
349
|
-
const params = bookingSlotFilter.toParams();
|
|
350
|
-
return this.apiService
|
|
351
|
-
.getCollection(bookingCalendarApplicationTimeFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, { teamId }, {
|
|
352
|
-
params
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
copyBookingCalendarSlots(role, clubOrSectionOrTeamId, weekRelativeIndexes, onlyCopySlots = false, weekdays = [], bookingSlotFilter) {
|
|
356
|
-
if (role === Role.ClubAdmin) {
|
|
357
|
-
return this.copyClubBookingCalendarSlots(clubOrSectionOrTeamId, weekRelativeIndexes, onlyCopySlots, weekdays, bookingSlotFilter);
|
|
358
|
-
}
|
|
359
|
-
return this.copySectionBookingCalendarSlots(clubOrSectionOrTeamId, weekRelativeIndexes, onlyCopySlots, weekdays, bookingSlotFilter);
|
|
360
|
-
}
|
|
361
|
-
copyClubBookingCalendarSlots(clubId, weekRelativeIndexes, onlyCopySlots = false, weekdays = [], bookingSlotFilter) {
|
|
362
|
-
const params = bookingSlotFilter.toParams();
|
|
363
|
-
return this.apiService
|
|
364
|
-
.postResourceNoResponse(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_COPY_PATH, { clubId }, {
|
|
365
|
-
week_relative_indexes: weekRelativeIndexes,
|
|
366
|
-
only_copy_slots: onlyCopySlots,
|
|
367
|
-
weekdays: weekdays,
|
|
368
|
-
}, {
|
|
369
|
-
params
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
copySectionBookingCalendarSlots(sectionId, weekRelativeIndexes, onlyCopySlots = false, weekdays = [], bookingSlotFilter) {
|
|
373
|
-
const params = bookingSlotFilter.toParams();
|
|
374
|
-
return this.apiService
|
|
375
|
-
.postResourceNoResponse(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_COPY_PATH, { sectionId }, {
|
|
376
|
-
week_relative_indexes: weekRelativeIndexes,
|
|
377
|
-
only_copy_slots: onlyCopySlots,
|
|
378
|
-
weekdays: weekdays,
|
|
379
|
-
}, {
|
|
380
|
-
params
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
clearBookingCalendarSlots(role, clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
384
|
-
if (role === Role.ClubAdmin) {
|
|
385
|
-
return this.clearClubBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, weekdays, bookingSlotFilter);
|
|
386
|
-
}
|
|
387
|
-
return this.clearSectionBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, weekdays, bookingSlotFilter);
|
|
388
|
-
}
|
|
389
|
-
clearClubBookingCalendarSlots(clubId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
390
|
-
const params = bookingSlotFilter.toParams();
|
|
391
|
-
return this.apiService
|
|
392
|
-
.deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_CLEAR_PATH, { clubId }, {
|
|
393
|
-
body: {
|
|
394
|
-
current_week_start_date: currentWeekStartDate,
|
|
395
|
-
week_relative_indexes: weekRelativeIndexes,
|
|
396
|
-
only_delete_sessions: onlyDeleteSessions,
|
|
397
|
-
should_delete_repeating_slots: shouldDeleteRepeatingSlots,
|
|
398
|
-
weekdays: weekdays,
|
|
399
|
-
},
|
|
400
|
-
params,
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
|
-
clearSectionBookingCalendarSlots(sectionId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
404
|
-
const params = bookingSlotFilter.toParams();
|
|
405
|
-
return this.apiService
|
|
406
|
-
.deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_CLEAR_PATH, { sectionId }, {
|
|
407
|
-
body: {
|
|
408
|
-
current_week_start_date: currentWeekStartDate,
|
|
409
|
-
week_relative_indexes: weekRelativeIndexes,
|
|
410
|
-
only_delete_sessions: onlyDeleteSessions,
|
|
411
|
-
should_delete_repeating_slots: shouldDeleteRepeatingSlots,
|
|
412
|
-
weekdays: weekdays,
|
|
413
|
-
},
|
|
414
|
-
params,
|
|
415
|
-
});
|
|
416
|
-
}
|
|
417
|
-
syncBookingCalendarSlots(role, clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
|
|
418
|
-
if (role == Role.ClubAdmin) {
|
|
419
|
-
return this.syncClubBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter);
|
|
420
|
-
}
|
|
421
|
-
else if (role == Role.SectionAdmin) {
|
|
422
|
-
return this.syncSectionBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter);
|
|
423
|
-
}
|
|
424
|
-
return this.syncTeamBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter);
|
|
425
|
-
}
|
|
426
|
-
syncClubBookingCalendarSlots(clubId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
|
|
427
|
-
const params = bookingSlotFilter.toParams();
|
|
428
|
-
return this.apiService
|
|
429
|
-
.postResourceNoResponse(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_SYNC_PATH, { clubId }, {
|
|
430
|
-
current_week_start_date: currentWeekStartDate,
|
|
431
|
-
week_relative_indexes: weekRelativeIndexes,
|
|
432
|
-
}, { params });
|
|
433
|
-
}
|
|
434
|
-
syncSectionBookingCalendarSlots(sectionId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
|
|
435
|
-
const params = bookingSlotFilter.toParams();
|
|
436
|
-
return this.apiService
|
|
437
|
-
.postResourceNoResponse(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_SYNC_PATH, { sectionId }, {
|
|
438
|
-
current_week_start_date: currentWeekStartDate,
|
|
439
|
-
week_relative_indexes: weekRelativeIndexes,
|
|
440
|
-
}, { params });
|
|
441
|
-
}
|
|
442
|
-
syncTeamBookingCalendarSlots(teamId, currentWeekStartDate, weekRelativeIndexes, bookingSlotFilter) {
|
|
443
|
-
const params = bookingSlotFilter.toParams();
|
|
444
|
-
return this.apiService
|
|
445
|
-
.postResourceNoResponse(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOTS_SYNC_PATH, { teamId }, {
|
|
446
|
-
current_week_start_date: currentWeekStartDate,
|
|
447
|
-
week_relative_indexes: weekRelativeIndexes,
|
|
448
|
-
}, { params });
|
|
449
|
-
}
|
|
450
|
-
updateBookingCalendarSlot(role, clubOrSectionOrTeamId, slot) {
|
|
451
|
-
if (role === Role.ClubAdmin) {
|
|
452
|
-
return this.updateClubBookingCalendarSlot(clubOrSectionOrTeamId, slot);
|
|
453
|
-
}
|
|
454
|
-
return this.updateSectionBookingCalendarSlot(clubOrSectionOrTeamId, slot);
|
|
455
|
-
}
|
|
456
|
-
updateClubBookingCalendarSlot(clubId, slot) {
|
|
457
|
-
return this.apiService
|
|
458
|
-
.updateResource(bookingCalendarSlotFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_PATH, {
|
|
459
|
-
clubId,
|
|
460
|
-
id: slot.id
|
|
461
|
-
}, slot);
|
|
462
|
-
}
|
|
463
|
-
updateSectionBookingCalendarSlot(sectionId, slot) {
|
|
464
|
-
return this.apiService
|
|
465
|
-
.updateResource(bookingCalendarSlotFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_PATH, {
|
|
466
|
-
sectionId,
|
|
467
|
-
id: slot.id
|
|
468
|
-
}, slot);
|
|
469
|
-
}
|
|
470
|
-
deleteBookingCalendarSlot(role, clubOrSectionOrTeamId, id) {
|
|
471
|
-
if (role === Role.ClubAdmin) {
|
|
472
|
-
return this.deleteClubBookingCalendarSlot(clubOrSectionOrTeamId, id);
|
|
473
|
-
}
|
|
474
|
-
return this.deleteSectionBookingCalendarSlot(clubOrSectionOrTeamId, id);
|
|
475
|
-
}
|
|
476
|
-
deleteClubBookingCalendarSlot(clubId, id) {
|
|
477
|
-
return this.apiService
|
|
478
|
-
.deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_PATH, {
|
|
479
|
-
clubId,
|
|
480
|
-
id
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
deleteSectionBookingCalendarSlot(sectionId, id) {
|
|
484
|
-
return this.apiService
|
|
485
|
-
.deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_PATH, {
|
|
486
|
-
sectionId,
|
|
487
|
-
id
|
|
488
|
-
});
|
|
489
|
-
}
|
|
490
|
-
deleteBookingCalendarSlotRepeatable(role, clubOrSectionOrTeamId, id, deleteUntilDate) {
|
|
491
|
-
if (role === Role.ClubAdmin) {
|
|
492
|
-
return this.deleteClubBookingCalendarSlotRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
|
|
493
|
-
}
|
|
494
|
-
return this.deleteSectionBookingCalendarSlotRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
|
|
495
|
-
}
|
|
496
|
-
deleteClubBookingCalendarSlotRepeatable(clubId, id, deleteUntilDate) {
|
|
497
|
-
return this.apiService
|
|
498
|
-
.deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH, {
|
|
499
|
-
clubId,
|
|
500
|
-
id
|
|
501
|
-
}, { body: { delete_until_date: deleteUntilDate } });
|
|
502
|
-
}
|
|
503
|
-
deleteSectionBookingCalendarSlotRepeatable(sectionId, id, deleteUntilDate) {
|
|
504
|
-
return this.apiService
|
|
505
|
-
.deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_REPEATABLE_SLOT_PATH, {
|
|
506
|
-
sectionId,
|
|
507
|
-
id
|
|
508
|
-
}, { body: { delete_until_date: deleteUntilDate } });
|
|
509
|
-
}
|
|
510
|
-
// endregion
|
|
511
|
-
// region Booking calendar slot session
|
|
512
|
-
createBookingCalendarSlotSession(role, clubOrSectionOrTeamId, session) {
|
|
513
|
-
if (role === Role.ClubAdmin) {
|
|
514
|
-
return this.createClubBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
515
|
-
}
|
|
516
|
-
else if (role === Role.SectionAdmin) {
|
|
517
|
-
return this.createSectionBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
518
|
-
}
|
|
519
|
-
return this.createTeamBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
520
|
-
}
|
|
521
|
-
createClubBookingCalendarSlotSession(clubId, session) {
|
|
522
|
-
delete session.id;
|
|
523
|
-
return this.apiService
|
|
524
|
-
.postResource(bookingCalendarSlotSessionFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_SESSIONS_PATH, {
|
|
525
|
-
clubId,
|
|
526
|
-
}, session);
|
|
527
|
-
}
|
|
528
|
-
createSectionBookingCalendarSlotSession(sectionId, session) {
|
|
529
|
-
delete session.id;
|
|
530
|
-
return this.apiService
|
|
531
|
-
.postResource(bookingCalendarSlotSessionFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_SESSIONS_PATH, {
|
|
532
|
-
sectionId,
|
|
533
|
-
}, session);
|
|
534
|
-
}
|
|
535
|
-
createTeamBookingCalendarSlotSession(teamId, session) {
|
|
536
|
-
delete session.id;
|
|
537
|
-
return this.apiService
|
|
538
|
-
.postResource(bookingCalendarSlotSessionFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_SESSIONS_PATH, {
|
|
539
|
-
teamId,
|
|
540
|
-
}, session);
|
|
541
|
-
}
|
|
542
|
-
updateBookingCalendarSlotSession(role, clubOrSectionOrTeamId, session) {
|
|
543
|
-
if (role === Role.ClubAdmin) {
|
|
544
|
-
return this.updateClubBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
545
|
-
}
|
|
546
|
-
else if (role === Role.SectionAdmin) {
|
|
547
|
-
return this.updateSectionBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
548
|
-
}
|
|
549
|
-
return this.updateTeamBookingCalendarSlotSession(clubOrSectionOrTeamId, session);
|
|
550
|
-
}
|
|
551
|
-
updateClubBookingCalendarSlotSession(clubId, session) {
|
|
552
|
-
return this.apiService
|
|
553
|
-
.updateResource(bookingCalendarSlotSessionFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
554
|
-
clubId,
|
|
555
|
-
id: session.id
|
|
556
|
-
}, session);
|
|
557
|
-
}
|
|
558
|
-
updateSectionBookingCalendarSlotSession(sectionId, session) {
|
|
559
|
-
return this.apiService
|
|
560
|
-
.updateResource(bookingCalendarSlotSessionFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
561
|
-
sectionId,
|
|
562
|
-
id: session.id
|
|
563
|
-
}, session);
|
|
564
|
-
}
|
|
565
|
-
updateTeamBookingCalendarSlotSession(teamId, session) {
|
|
566
|
-
return this.apiService
|
|
567
|
-
.updateResource(bookingCalendarSlotSessionFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
568
|
-
teamId,
|
|
569
|
-
id: session.id
|
|
570
|
-
}, session);
|
|
571
|
-
}
|
|
572
|
-
deleteBookingCalendarSlotSession(role, clubOrSectionOrTeamId, id) {
|
|
573
|
-
if (role == Role.ClubAdmin) {
|
|
574
|
-
return this.deleteClubBookingCalendarSlotSession(clubOrSectionOrTeamId, id);
|
|
575
|
-
}
|
|
576
|
-
else if (role == Role.SectionAdmin) {
|
|
577
|
-
return this.deleteSectionBookingCalendarSlotSession(clubOrSectionOrTeamId, id);
|
|
578
|
-
}
|
|
579
|
-
return this.deleteTeamBookingCalendarSlotSession(clubOrSectionOrTeamId, id);
|
|
580
|
-
}
|
|
581
|
-
deleteClubBookingCalendarSlotSession(clubId, id) {
|
|
582
|
-
return this.apiService
|
|
583
|
-
.deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
584
|
-
clubId,
|
|
585
|
-
id
|
|
586
|
-
});
|
|
587
|
-
}
|
|
588
|
-
deleteSectionBookingCalendarSlotSession(sectionId, id) {
|
|
589
|
-
return this.apiService
|
|
590
|
-
.deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
591
|
-
sectionId,
|
|
592
|
-
id
|
|
593
|
-
});
|
|
594
|
-
}
|
|
595
|
-
deleteTeamBookingCalendarSlotSession(teamId, id) {
|
|
596
|
-
return this.apiService
|
|
597
|
-
.deleteResource(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH, {
|
|
598
|
-
teamId,
|
|
599
|
-
id
|
|
600
|
-
});
|
|
601
|
-
}
|
|
602
|
-
deleteBookingCalendarSlotSessionRepeatable(role, clubOrSectionOrTeamId, id, deleteUntilDate) {
|
|
603
|
-
if (role === Role.ClubAdmin) {
|
|
604
|
-
return this.deleteClubBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
|
|
605
|
-
}
|
|
606
|
-
return this.deleteSectionBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
|
|
607
|
-
}
|
|
608
|
-
deleteClubBookingCalendarSlotSessionRepeatable(clubId, id, deleteUntilDate) {
|
|
609
|
-
return this.apiService
|
|
610
|
-
.deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH, {
|
|
611
|
-
clubId,
|
|
612
|
-
id
|
|
613
|
-
}, { body: { delete_until_date: deleteUntilDate } });
|
|
614
|
-
}
|
|
615
|
-
deleteSectionBookingCalendarSlotSessionRepeatable(sectionId, id, deleteUntilDate) {
|
|
616
|
-
return this.apiService
|
|
617
|
-
.deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH, {
|
|
618
|
-
sectionId,
|
|
619
|
-
id
|
|
620
|
-
}, { body: { delete_until_date: deleteUntilDate } });
|
|
621
|
-
}
|
|
622
|
-
// endregion
|
|
623
|
-
// region Booking Setting
|
|
624
|
-
getBookingSettings(role, clubOrSectionOrTeamId) {
|
|
625
|
-
if (role == Role.ClubAdmin) {
|
|
626
|
-
return this.getClubBookingSettings(clubOrSectionOrTeamId);
|
|
627
|
-
}
|
|
628
|
-
else if (role == Role.SectionAdmin) {
|
|
629
|
-
return this.getSectionBookingSettings(clubOrSectionOrTeamId);
|
|
630
|
-
}
|
|
631
|
-
return this.getTeamBookingSettings(clubOrSectionOrTeamId);
|
|
632
|
-
}
|
|
633
|
-
getClubBookingSettings(clubId) {
|
|
634
|
-
return this.apiService
|
|
635
|
-
.getResource(bookingSettingsFactory, Role.ClubAdmin, CLUB_BOOKING_SETTINGS_PATH, { clubId });
|
|
636
|
-
}
|
|
637
|
-
getSectionBookingSettings(sectionId) {
|
|
638
|
-
return this.apiService
|
|
639
|
-
.getResource(bookingSettingsFactory, Role.SectionAdmin, SECTION_BOOKING_SETTINGS_PATH, { sectionId });
|
|
640
|
-
}
|
|
641
|
-
getTeamBookingSettings(teamId) {
|
|
642
|
-
return this.apiService
|
|
643
|
-
.getResource(bookingSettingsFactory, Role.TeamAdmin, TEAM_BOOKING_SETTINGS_PATH, { teamId });
|
|
644
|
-
}
|
|
645
|
-
updateBookingSettings(role, clubOrSectionOrTeamId, bookingSettings) {
|
|
646
|
-
if (role == Role.ClubAdmin) {
|
|
647
|
-
return this.updateClubBookingSettings(clubOrSectionOrTeamId, bookingSettings);
|
|
648
|
-
}
|
|
649
|
-
else if (role == Role.SectionAdmin) {
|
|
650
|
-
return this.updateSectionBookingSettings(clubOrSectionOrTeamId, bookingSettings);
|
|
651
|
-
}
|
|
652
|
-
return this.updateTeamBookingSettings(clubOrSectionOrTeamId, bookingSettings);
|
|
653
|
-
}
|
|
654
|
-
updateClubBookingSettings(clubId, bookingSettings) {
|
|
655
|
-
return this.apiService
|
|
656
|
-
.updateResource(bookingSettingsFactory, Role.ClubAdmin, CLUB_BOOKING_SETTINGS_PATH, {
|
|
657
|
-
clubId,
|
|
658
|
-
}, bookingSettings);
|
|
659
|
-
}
|
|
660
|
-
updateSectionBookingSettings(sectionId, bookingSettings) {
|
|
661
|
-
return this.apiService
|
|
662
|
-
.updateResource(bookingSettingsFactory, Role.SectionAdmin, SECTION_BOOKING_SETTINGS_PATH, {
|
|
663
|
-
sectionId,
|
|
664
|
-
}, bookingSettings);
|
|
665
|
-
}
|
|
666
|
-
updateTeamBookingSettings(teamId, bookingSettings) {
|
|
667
|
-
return this.apiService
|
|
668
|
-
.updateResource(bookingSettingsFactory, Role.TeamAdmin, TEAM_BOOKING_SETTINGS_PATH, {
|
|
669
|
-
teamId,
|
|
670
|
-
}, bookingSettings);
|
|
671
|
-
}
|
|
672
|
-
// endregion
|
|
673
|
-
// region Booking Calendar Application Times
|
|
674
|
-
updateBookingCalendarApplicationTime(role, clubOrSectionOrTeamId, availableTime) {
|
|
675
|
-
if (role == Role.ClubAdmin) {
|
|
676
|
-
return this.updateClubBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTime);
|
|
677
|
-
}
|
|
678
|
-
else if (role == Role.SectionAdmin) {
|
|
679
|
-
return this.updateSectionBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTime);
|
|
680
|
-
}
|
|
681
|
-
return this.updateTeamBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTime);
|
|
682
|
-
}
|
|
683
|
-
updateClubBookingCalendarApplicationTime(clubId, availableTime) {
|
|
684
|
-
return this.apiService
|
|
685
|
-
.updateResource(bookingCalendarApplicationTimeFactory, Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
686
|
-
clubId,
|
|
687
|
-
id: availableTime.id
|
|
688
|
-
}, availableTime);
|
|
689
|
-
}
|
|
690
|
-
updateSectionBookingCalendarApplicationTime(sectionId, availableTime) {
|
|
691
|
-
return this.apiService
|
|
692
|
-
.updateResource(bookingCalendarApplicationTimeFactory, Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
693
|
-
sectionId,
|
|
694
|
-
id: availableTime.id
|
|
695
|
-
}, availableTime);
|
|
696
|
-
}
|
|
697
|
-
updateTeamBookingCalendarApplicationTime(teamId, availableTime) {
|
|
698
|
-
return this.apiService
|
|
699
|
-
.updateResource(bookingCalendarApplicationTimeFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
700
|
-
teamId,
|
|
701
|
-
id: availableTime.id
|
|
702
|
-
}, availableTime);
|
|
703
|
-
}
|
|
704
|
-
createTeamBookingCalendarApplicationTime(teamId, availableTime) {
|
|
705
|
-
delete availableTime.id;
|
|
706
|
-
return this.apiService
|
|
707
|
-
.postResource(bookingCalendarApplicationTimeFactory, Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH, {
|
|
708
|
-
teamId,
|
|
709
|
-
}, availableTime);
|
|
710
|
-
}
|
|
711
|
-
deleteBookingCalendarApplicationTime(role, clubOrSectionOrTeamId, availableTimeId) {
|
|
712
|
-
if (role == Role.ClubAdmin) {
|
|
713
|
-
return this.deleteClubBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
714
|
-
}
|
|
715
|
-
else if (role == Role.SectionAdmin) {
|
|
716
|
-
return this.deleteSectionBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
717
|
-
}
|
|
718
|
-
return this.deleteTeamBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
719
|
-
}
|
|
720
|
-
deleteClubBookingCalendarApplicationTime(clubId, id) {
|
|
721
|
-
return this.apiService
|
|
722
|
-
.deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
723
|
-
clubId,
|
|
724
|
-
id
|
|
725
|
-
});
|
|
726
|
-
}
|
|
727
|
-
deleteSectionBookingCalendarApplicationTime(sectionId, id) {
|
|
728
|
-
return this.apiService
|
|
729
|
-
.deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
730
|
-
sectionId,
|
|
731
|
-
id
|
|
732
|
-
});
|
|
733
|
-
}
|
|
734
|
-
deleteTeamBookingCalendarApplicationTime(teamId, id) {
|
|
735
|
-
return this.apiService
|
|
736
|
-
.deleteResource(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
737
|
-
teamId,
|
|
738
|
-
id
|
|
739
|
-
});
|
|
740
|
-
}
|
|
741
|
-
// endregion
|
|
742
|
-
// region Overbooked sessions
|
|
743
|
-
getOverbookedSessions(role, clubOrSectionOrTeamId, bookingSlotFilter) {
|
|
744
|
-
if (role == Role.ClubAdmin) {
|
|
745
|
-
return this.getClubOverbookedSessions(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
746
|
-
}
|
|
747
|
-
return this.getSectionOverbookedSessions(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
748
|
-
}
|
|
749
|
-
getClubOverbookedSessions(clubId, bookingSlotFilter) {
|
|
750
|
-
const params = bookingSlotFilter.toParams();
|
|
751
|
-
return this.apiService
|
|
752
|
-
.getCollection(bookingCalendarSlotSessionFactory, Role.ClubAdmin, CLUB_BOOKING_OVERBOOKED_SESSIONS_PATH, { clubId }, {
|
|
753
|
-
params
|
|
754
|
-
});
|
|
755
|
-
}
|
|
756
|
-
getSectionOverbookedSessions(sectionId, bookingSlotFilter) {
|
|
757
|
-
const params = bookingSlotFilter.toParams();
|
|
758
|
-
return this.apiService
|
|
759
|
-
.getCollection(bookingCalendarSlotSessionFactory, Role.SectionAdmin, SECTION_BOOKING_OVERBOOKED_SESSIONS_PATH, { sectionId }, {
|
|
760
|
-
params
|
|
761
|
-
});
|
|
762
|
-
}
|
|
763
|
-
// endregion
|
|
764
|
-
// region Overbooked bookables
|
|
765
|
-
getOverbookedBookables(role, clubOrSectionOrTeamId, bookingSlotFilter) {
|
|
766
|
-
if (role == Role.ClubAdmin) {
|
|
767
|
-
return this.getClubOverbookedBookables(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
768
|
-
}
|
|
769
|
-
return this.getSectionOverbookedBookables(clubOrSectionOrTeamId, bookingSlotFilter);
|
|
770
|
-
}
|
|
771
|
-
getClubOverbookedBookables(clubId, bookingSlotFilter) {
|
|
772
|
-
const params = bookingSlotFilter.toParams();
|
|
773
|
-
return this.apiService
|
|
774
|
-
.getCollection(overbookedBookableItemFactory, Role.ClubAdmin, CLUB_BOOKING_OVERBOOKED_BOOKABLES_PATH, { clubId }, {
|
|
775
|
-
params
|
|
776
|
-
});
|
|
777
|
-
}
|
|
778
|
-
getSectionOverbookedBookables(sectionId, bookingSlotFilter) {
|
|
779
|
-
const params = bookingSlotFilter.toParams();
|
|
780
|
-
return this.apiService
|
|
781
|
-
.getCollection(overbookedBookableItemFactory, Role.SectionAdmin, SECTION_BOOKING_OVERBOOKED_BOOKABLES_PATH, { sectionId }, {
|
|
782
|
-
params
|
|
783
|
-
});
|
|
784
|
-
}
|
|
785
|
-
}
|
|
786
|
-
BookingCalendarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: BookingCalendarService, deps: [{ token: i1.ApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
787
|
-
BookingCalendarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: BookingCalendarService, providedIn: 'root' });
|
|
788
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImport: i0, type: BookingCalendarService, decorators: [{
|
|
789
|
-
type: Injectable,
|
|
790
|
-
args: [{
|
|
791
|
-
providedIn: 'root'
|
|
792
|
-
}]
|
|
793
|
-
}], ctorParameters: function () { return [{ type: i1.ApiService }]; } });
|
|
794
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBTUwsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3RCLDZCQUE2QixHQUM5QixNQUFNLGFBQWEsQ0FBQzs7O0FBRXJCLE1BQU0sMkJBQTJCLEdBQUcsK0JBQStCLENBQUM7QUFDcEUsTUFBTSwwQkFBMEIsR0FBRyxtQ0FBbUMsQ0FBQztBQUN2RSxNQUFNLGdDQUFnQyxHQUFHLDJCQUEyQixDQUFDO0FBQ3JFLE1BQU0sa0RBQWtELEdBQUcsNkNBQTZDLENBQUM7QUFDekcsTUFBTSxxQ0FBcUMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvRSxNQUFNLHNDQUFzQyxHQUFHLGlDQUFpQyxDQUFDO0FBQ2pGLE1BQU0scUNBQXFDLEdBQUcsZ0NBQWdDLENBQUM7QUFDL0UsTUFBTSwrQkFBK0IsR0FBRywrQkFBK0IsQ0FBQztBQUN4RSxNQUFNLDBDQUEwQyxHQUFHLG1DQUFtQyxDQUFDO0FBQ3ZGLE1BQU0sd0NBQXdDLEdBQUcsOEJBQThCLENBQUM7QUFDaEYsTUFBTSx1Q0FBdUMsR0FBRyxrQ0FBa0MsQ0FBQztBQUNuRixNQUFNLDZDQUE2QyxHQUFHLHNDQUFzQyxDQUFDO0FBQzdGLE1BQU0sMEJBQTBCLEdBQUcsc0NBQXNDLENBQUM7QUFDMUUsTUFBTSwyQ0FBMkMsR0FBRywyQ0FBMkMsQ0FBQztBQUNoRyxNQUFNLDRDQUE0QyxHQUFHLHVDQUF1QyxDQUFD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SSxDQUFDLFNBQVMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ08sMEJBQTBCLENBQUMsTUFBYyxFQUFFLGlCQUFvQztRQUNyRixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWiw2QkFBNkIsRUFDN0IsSUFBSSxDQUFDLFNBQVMsRUFDZCxzQ0FBc0MsRUFDdEMsRUFBQyxNQUFNLEVBQUMsRUFDUjtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBQ08sNkJBQTZCLENBQUMsU0FBaUIsRUFBRSxpQkFBb0M7UUFDM0YsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osNkJBQTZCLEVBQzdCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHlDQUF5QyxFQUN6QyxFQUFDLFNBQVMsRUFBQyxFQUNYO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQTtJQUNMLENBQUM7O29IQWpyQ1Usc0JBQXNCO3dIQUF0QixzQkFBc0IsY0FGckIsTUFBTTs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXBpU2VydmljZX0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQge1xuICBCb29raW5nQ2FsZW5kYXIsXG4gIEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSxcbiAgQm9va2luZ0NhbGVuZGFyU2xvdCxcbiAgQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24sXG4gIEJvb2tpbmdTZXR0aW5ncyxcbiAgUm9sZSxcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG4gIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gIG92ZXJib29rZWRCb29rYWJsZUl0ZW1GYWN0b3J5LFxufSBmcm9tIFwiLi9mYWN0b3JpZXNcIjtcblxuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY29weS8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2NsZWFyLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC9hbGwvJztcbmNvbnN0IENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9ib29raW5nLXNldHRpbmdzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX09WRVJCT09LRURfU0VTU0lPTlNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvb3ZlcmJvb2tlZC9zZXNzaW9ucy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX09WRVJCT09LRURfQk9PS0FCTEVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL292ZXJib29rZWQvYm9va2FibGVzLyc7XG5cbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL2NvcHkvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9jbGVhci8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1NZTkNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvc3luYy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC9hbGwvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvYWxsLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfU0VUVElOR1NfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYm9va2luZy1zZXR0aW5ncy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19PVkVSQk9PS0VEX1NFU1NJT05TX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL292ZXJib29rZWQvc2Vzc2lvbnMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19PVkVSQk9PS0VEX0JPT0tBQkxFU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9vdmVyYm9va2VkL2Jvb2thYmxlcy8nO1xuXG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2NhbGVuZGFycy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19TRVRUSU5HU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9ib29raW5nLXNldHRpbmdzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zZXNzaW9ucy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC8nO1xuXG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuXG5cbmV4cG9ydCBjbGFzcyBCb29raW5nU2xvdEZpbHRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIHB1YmxpYyBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBwdWJsaWMgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyBsb2NhdGlvbklkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIGJvb2thYmxlSXRlbUlkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIHRhZ0lkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIHRlYW1JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyBib29rYWJsZUdyb3VwSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgYWN0aXZpdHlUeXBlSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgaGFzT3BlblNlc3Npb25zOiBib29sZWFuIHwgbnVsbCA9IG51bGwsXG4gICAgcHVibGljIHNob3dBcHBsaWNhdGlvblRpbWVzOiBib29sZWFuIHwgbnVsbCA9IG51bGwsXG4gICAgcHVibGljIHNvcnRCeTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICkge1xuICB9XG5cbiAgc3RhdGljIGZyb21GaWx0ZXIoZmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcik6IEJvb2tpbmdTbG90RmlsdGVyIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoXG4gICAgICBmaWx0ZXIuc3RhcnREYXRlLFxuICAgICAgZmlsdGVyLmVuZERhdGUsXG4gICAgICBmaWx0ZXIuY2FsZW5kYXJJZHMsXG4gICAgICBmaWx0ZXIubG9jYXRpb25JZHMsXG4gICAgICBmaWx0ZXIuYm9va2FibGVJdGVtSWRzLFxuICAgICAgZmlsdGVyLnRhZ0lkcyxcbiAgICAgIGZpbHRlci50ZWFtSWRzLFxuICAgICAgZmlsdGVyLmJvb2thYmxlR3JvdXBJZHMsXG4gICAgICBmaWx0ZXIuYWN0aXZpdHlUeXBlSWRzLFxuICAgICAgZmlsdGVyLmhhc09wZW5TZXNzaW9ucyxcbiAgICAgIGZpbHRlci5zaG93QXBwbGljYXRpb25UaW1lcyxcbiAgICAgIGZpbHRlci5zb3J0QnksXG4gICAgKTtcbiAgfVxuXG4gIHRvUGFyYW1zKCk6IGFueSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHRoaXMuc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSB0aGlzLmVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FsZW5kYXJJZHMgJiYgdGhpcy5jYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IHRoaXMuY2FsZW5kYXJJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9jYXRpb25JZHMgJiYgdGhpcy5sb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IHRoaXMubG9jYXRpb25JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYm9va2FibGVJdGVtSWRzICYmIHRoaXMuYm9va2FibGVJdGVtSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydib29rYWJsZV9pZCddID0gdGhpcy5ib29rYWJsZUl0ZW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYm9va2FibGVHcm91cElkcyAmJiB0aGlzLmJvb2thYmxlR3JvdXBJZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2Jvb2thYmxlX2dyb3VwX2lkJ10gPSB0aGlzLmJvb2thYmxlR3JvdXBJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFnSWRzICYmIHRoaXMudGFnSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydib29rYWJsZV90YWdfaWQnXSA9IHRoaXMudGFnSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRlYW1JZHMgJiYgdGhpcy50ZWFtSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWyd0ZWFtX2lkJ10gPSB0aGlzLnRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZpdHlUeXBlSWRzICYmIHRoaXMuYWN0aXZpdHlUeXBlSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zW1wiYWN0aXZpdHlfdHlwZV9pZFwiXSA9IHRoaXMuYWN0aXZpdHlUeXBlSWRzLmpvaW4oXCIsXCIpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmhhc09wZW5TZXNzaW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ2hhc19vcGVuX3Nlc3Npb25zJ10gPSBTdHJpbmcodGhpcy5oYXNPcGVuU2Vzc2lvbnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5zaG93QXBwbGljYXRpb25UaW1lcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ3Nob3dfYXBwbGljYXRpb25fdGltZXMnXSA9IFN0cmluZyh0aGlzLnNob3dBcHBsaWNhdGlvblRpbWVzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3J0QnkpIHtcbiAgICAgIHBhcmFtc1snb3JkZXInXSA9IHRoaXMuc29ydEJ5O1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQm9va2luZ0NhbGVuZGFyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSkge1xuICB9XG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXJcblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBkZWxldGUgY2FsZW5kYXIuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIGRlbGV0ZSBjYWxlbmRhci5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKVxuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFycyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhcnMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJzKGNsdWJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhcnMoc2VjdGlvbklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHBhcmFtc1snbmFtZSddID0gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFycyh0ZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcGFyYW1zWyduYW1lJ10gPSBuYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGNhbGVuZGFyOiBCb29raW5nQ2FsZW5kYXIpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGNhbGVuZGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgY2FsZW5kYXI6IEJvb2tpbmdDYWxlbmRhcikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBjYWxlbmRhci5pZFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgY2FsZW5kYXI6IEJvb2tpbmdDYWxlbmRhcikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBjYWxlbmRhci5pZFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhcihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXIgc2xvdFxuXG4gIGNyZWF0ZUJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgZGVsZXRlIHNsb3QuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIGRlbGV0ZSBzbG90LmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhclNsb3RzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNsb3RJZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdElkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdElkKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3RJZCk7XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90KHRlYW1JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBjb3B5Qm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNvcHlDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5Q29weVNsb3RzLCB3ZWVrZGF5cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb3B5U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seUNvcHlTbG90cywgd2Vla2RheXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgY29weUNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICBvbmx5X2NvcHlfc2xvdHM6IG9ubHlDb3B5U2xvdHMsXG4gICAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY29weVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICBvbmx5X2NvcHlfc2xvdHM6IG9ubHlDb3B5U2xvdHMsXG4gICAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGNsZWFyQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlEZWxldGVTZXNzaW9ucywgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsIHdlZWtkYXlzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsZWFyU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlEZWxldGVTZXNzaW9ucywgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsIHdlZWtkYXlzLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICAgIG9ubHlfZGVsZXRlX3Nlc3Npb25zOiBvbmx5RGVsZXRlU2Vzc2lvbnMsXG4gICAgICAgICAgICBzaG91bGRfZGVsZXRlX3JlcGVhdGluZ19zbG90czogc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsXG4gICAgICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHNlY3Rpb25JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICAgIG9ubHlfZGVsZXRlX3Nlc3Npb25zOiBvbmx5RGVsZXRlU2Vzc2lvbnMsXG4gICAgICAgICAgICBzaG91bGRfZGVsZXRlX3JlcGVhdGluZ19zbG90czogc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsXG4gICAgICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICApXG4gIH1cblxuICBzeW5jQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnN5bmNDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuc3luY1NlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBib29raW5nU2xvdEZpbHRlcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3luY1RlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIHN5bmNDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgY2x1YklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIHN5bmNTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIHN5bmNUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgdGVhbUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzbG90OiBCb29raW5nQ2FsZW5kYXJTbG90KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgc2xvdDogQm9va2luZ0NhbGVuZGFyU2xvdCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzbG90LmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBzbG90OiBCb29raW5nQ2FsZW5kYXJTbG90KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWQ6IHNsb3QuaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQsIGRlbGV0ZVVudGlsRGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2luZyBjYWxlbmRhciBzbG90IHNlc3Npb25cblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbikge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2Vzc2lvbik7XG4gICAgfSBlbHNlIGlmIChyb2xlID09PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIHNlc3Npb246IEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IHNlc3Npb24uaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBzZXNzaW9uOiBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQsIGRlbGV0ZVVudGlsRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVsZXRlVW50aWxEYXRlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge2JvZHk6IHtkZWxldGVfdW50aWxfZGF0ZTogZGVsZXRlVW50aWxEYXRlfX0sXG4gICAgICApO1xuICB9XG5cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2luZyBTZXR0aW5nXG5cbiAgZ2V0Qm9va2luZ1NldHRpbmdzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdTZXR0aW5ncyhjbHViT3JTZWN0aW9uT3JUZWFtSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ1NldHRpbmdzKGNsdWJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nU2V0dGluZ3Moc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdTZXR0aW5ncyh0ZWFtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7dGVhbUlkfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ1NldHRpbmdzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2V0dGluZ3MpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2V0dGluZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ1NldHRpbmdzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBib29raW5nU2V0dGluZ3NcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nU2V0dGluZ3Moc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTZXR0aW5nczogQm9va2luZ1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGVhbUJvb2tpbmdTZXR0aW5ncyh0ZWFtSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgQ2FsZW5kYXIgQXBwbGljYXRpb24gVGltZXNcblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSkge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZSk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJJZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoc2VjdGlvbklkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWRcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWRcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lPikge1xuICAgIGRlbGV0ZSBhdmFpbGFibGVUaW1lLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKVxuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lSWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZUlkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBhdmFpbGFibGVUaW1lSWQpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBhdmFpbGFibGVUaW1lSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIE92ZXJib29rZWQgc2Vzc2lvbnNcbiAgZ2V0T3ZlcmJvb2tlZFNlc3Npb25zKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1Yk92ZXJib29rZWRTZXNzaW9ucyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbk92ZXJib29rZWRTZXNzaW9ucyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1Yk92ZXJib29rZWRTZXNzaW9ucyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25PdmVyYm9va2VkU2Vzc2lvbnMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIE92ZXJib29rZWQgYm9va2FibGVzXG4gIGdldE92ZXJib29rZWRCb29rYWJsZXMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViT3ZlcmJvb2tlZEJvb2thYmxlcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbk92ZXJib29rZWRCb29rYWJsZXMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDbHViT3ZlcmJvb2tlZEJvb2thYmxlcyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgb3ZlcmJvb2tlZEJvb2thYmxlSXRlbUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9CT09LQUJMRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG4gIHByaXZhdGUgZ2V0U2VjdGlvbk92ZXJib29rZWRCb29rYWJsZXMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIG92ZXJib29rZWRCb29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfQk9PS0FCTEVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuICAvLyBlbmRyZWdpb25cblxufVxuIl19
|