@esolve/ng-esolve-connect 0.127.0 → 0.128.1
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/README.md +1 -0
- package/fesm2022/esolve-ng-esolve-connect-media.mjs +19 -19
- package/fesm2022/esolve-ng-esolve-connect-media.mjs.map +1 -1
- package/fesm2022/esolve-ng-esolve-connect-notifications.mjs +3 -3
- package/fesm2022/esolve-ng-esolve-connect-notifications.mjs.map +1 -1
- package/fesm2022/esolve-ng-esolve-connect-survey.mjs +3 -3
- package/fesm2022/esolve-ng-esolve-connect-survey.mjs.map +1 -1
- package/fesm2022/esolve-ng-esolve-connect.mjs +135 -136
- package/fesm2022/esolve-ng-esolve-connect.mjs.map +1 -1
- package/lib/auth/providers/esolve-eurus-auto-login.provider.d.ts +1 -2
- package/package.json +1 -9
- package/esm2022/esolve-ng-esolve-connect.mjs +0 -5
- package/esm2022/index.mjs +0 -76
- package/esm2022/lib/account/address/classes/esolve-address-result.model.mjs +0 -11
- package/esm2022/lib/account/address/classes/esolve-address.model.mjs +0 -41
- package/esm2022/lib/account/address/classes/esolve-session-address-update-result.model.mjs +0 -11
- package/esm2022/lib/account/address/classes/index.mjs +0 -4
- package/esm2022/lib/account/address/index.mjs +0 -4
- package/esm2022/lib/account/address/interfaces/esolve-address-post-data.interface.mjs +0 -2
- package/esm2022/lib/account/address/interfaces/esolve-address-record.interface.mjs +0 -2
- package/esm2022/lib/account/address/interfaces/esolve-address-response.interface.mjs +0 -2
- package/esm2022/lib/account/address/interfaces/index.mjs +0 -4
- package/esm2022/lib/account/address/types/esolve-address-place-type.type.mjs +0 -2
- package/esm2022/lib/account/address/types/esolve-address-type.type.mjs +0 -2
- package/esm2022/lib/account/address/types/index.mjs +0 -3
- package/esm2022/lib/account/confirmation/esolve-account-confirmation-post-response-item.interface.mjs +0 -2
- package/esm2022/lib/account/confirmation/esolve-account-confirmation-result.model.mjs +0 -10
- package/esm2022/lib/account/confirmation/index.mjs +0 -3
- package/esm2022/lib/account/esolve-account.service.mjs +0 -703
- package/esm2022/lib/account/esolve-geocode-response.interface.mjs +0 -2
- package/esm2022/lib/account/esolve-session-client-update-result.model.mjs +0 -11
- package/esm2022/lib/account/esolve-session-shipping-update-result.model.mjs +0 -11
- package/esm2022/lib/account/index.mjs +0 -11
- package/esm2022/lib/account/location/classes/esolve-location-update-result.model.mjs +0 -11
- package/esm2022/lib/account/location/classes/index.mjs +0 -2
- package/esm2022/lib/account/location/index.mjs +0 -3
- package/esm2022/lib/account/location/interfaces/esolve-location-options.interface.mjs +0 -2
- package/esm2022/lib/account/location/interfaces/index.mjs +0 -2
- package/esm2022/lib/account/password/esolve-change-password-result.model.mjs +0 -8
- package/esm2022/lib/account/password/esolve-forgot-password-get-result.interface.mjs +0 -2
- package/esm2022/lib/account/password/esolve-forgot-password-response.interface.mjs +0 -2
- package/esm2022/lib/account/password/esolve-reset-password-result.model.mjs +0 -11
- package/esm2022/lib/account/password/index.mjs +0 -5
- package/esm2022/lib/account/registration/esolve-registration-data.interface.mjs +0 -2
- package/esm2022/lib/account/registration/esolve-registration-post-response-item.interface.mjs +0 -2
- package/esm2022/lib/account/registration/esolve-registration-result.model.mjs +0 -12
- package/esm2022/lib/account/registration/index.mjs +0 -4
- package/esm2022/lib/account/user-account/classes/esolve-client-asset-list.model.mjs +0 -4
- package/esm2022/lib/account/user-account/classes/esolve-client-asset.model.mjs +0 -14
- package/esm2022/lib/account/user-account/classes/esolve-erp-document-request.model.mjs +0 -20
- package/esm2022/lib/account/user-account/classes/esolve-erp-documents-request-result.model.mjs +0 -7
- package/esm2022/lib/account/user-account/classes/esolve-statement-ageing.model.mjs +0 -9
- package/esm2022/lib/account/user-account/classes/esolve-statement-balances.model.mjs +0 -15
- package/esm2022/lib/account/user-account/classes/esolve-statement-transaction.model.mjs +0 -17
- package/esm2022/lib/account/user-account/classes/esolve-statement.model.mjs +0 -12
- package/esm2022/lib/account/user-account/classes/esolve-user-account-business.model.mjs +0 -11
- package/esm2022/lib/account/user-account/classes/esolve-user-account-contact.model.mjs +0 -10
- package/esm2022/lib/account/user-account/classes/esolve-user-account-result.model.mjs +0 -9
- package/esm2022/lib/account/user-account/classes/esolve-user-account.model.mjs +0 -25
- package/esm2022/lib/account/user-account/classes/esolve-user-client-account-balances.model.mjs +0 -13
- package/esm2022/lib/account/user-account/classes/esolve-user-client-account.model.mjs +0 -93
- package/esm2022/lib/account/user-account/classes/index.mjs +0 -15
- package/esm2022/lib/account/user-account/index.mjs +0 -3
- package/esm2022/lib/account/user-account/interfaces/esolve-client-asset-record.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/esolve-client-assets-options.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/esolve-erp-document-request-record.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/esolve-statement-ageing-record.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/esolve-statement-balances-record.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/esolve-statement-record.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/esolve-statement-transaction-record.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/esolve-user-account-data.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/esolve-user-account-record.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/esolve-user-client-account-balances-record.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/esolve-user-client-account-record.interface.mjs +0 -2
- package/esm2022/lib/account/user-account/interfaces/index.mjs +0 -12
- package/esm2022/lib/account/user-account/types/esolve-client-assets-sort-field.type.mjs +0 -2
- package/esm2022/lib/account/user-account/types/index.mjs +0 -2
- package/esm2022/lib/affiliates/classes/esolve-affiliate-check-result.model.mjs +0 -43
- package/esm2022/lib/affiliates/classes/esolve-affiliate-link-result.model.mjs +0 -9
- package/esm2022/lib/affiliates/classes/esolve-affiliate.model.mjs +0 -47
- package/esm2022/lib/affiliates/classes/index.mjs +0 -4
- package/esm2022/lib/affiliates/index.mjs +0 -5
- package/esm2022/lib/affiliates/interfaces/esolve-affiliate-check-record.interface.mjs +0 -2
- package/esm2022/lib/affiliates/interfaces/esolve-affiliate-link-options.interface.mjs +0 -2
- package/esm2022/lib/affiliates/interfaces/esolve-affiliate-record.interface.mjs +0 -2
- package/esm2022/lib/affiliates/interfaces/esolve-affiliates-options.interface.mjs +0 -2
- package/esm2022/lib/affiliates/interfaces/index.mjs +0 -5
- package/esm2022/lib/affiliates/services/esolve-affiliate.service.mjs +0 -168
- package/esm2022/lib/affiliates/services/index.mjs +0 -2
- package/esm2022/lib/affiliates/types/esolve-affiliate-link-response.type.mjs +0 -2
- package/esm2022/lib/affiliates/types/index.mjs +0 -2
- package/esm2022/lib/albums/classes/esolve-album-image-list.model.mjs +0 -4
- package/esm2022/lib/albums/classes/esolve-album-image.model.mjs +0 -50
- package/esm2022/lib/albums/classes/esolve-album-list.model.mjs +0 -4
- package/esm2022/lib/albums/classes/esolve-album.model.mjs +0 -17
- package/esm2022/lib/albums/classes/index.mjs +0 -5
- package/esm2022/lib/albums/index.mjs +0 -5
- package/esm2022/lib/albums/interfaces/esolve-album-image-options.interface.mjs +0 -2
- package/esm2022/lib/albums/interfaces/esolve-album-image-record.interface.mjs +0 -2
- package/esm2022/lib/albums/interfaces/esolve-album-options.interface.mjs +0 -2
- package/esm2022/lib/albums/interfaces/esolve-album-record.interface.mjs +0 -2
- package/esm2022/lib/albums/interfaces/index.mjs +0 -5
- package/esm2022/lib/albums/services/esolve-albums.service.mjs +0 -158
- package/esm2022/lib/albums/services/index.mjs +0 -2
- package/esm2022/lib/albums/types/esolve-album-image-size.type.mjs +0 -2
- package/esm2022/lib/albums/types/index.mjs +0 -2
- package/esm2022/lib/assets/classes/esolve-asset.model.mjs +0 -77
- package/esm2022/lib/assets/classes/esolve-linked-asset.model.mjs +0 -29
- package/esm2022/lib/assets/classes/index.mjs +0 -3
- package/esm2022/lib/assets/esolve-assets.service.mjs +0 -154
- package/esm2022/lib/assets/index.mjs +0 -6
- package/esm2022/lib/assets/interfaces/esolve-asset-options.interface.mjs +0 -2
- package/esm2022/lib/assets/interfaces/esolve-asset-record.interface.mjs +0 -2
- package/esm2022/lib/assets/interfaces/esolve-linked-asset-record.interface.mjs +0 -2
- package/esm2022/lib/assets/interfaces/esolve-media-asset-options.interface.mjs +0 -2
- package/esm2022/lib/assets/interfaces/esolve-stock-asset-options.interface.mjs +0 -2
- package/esm2022/lib/assets/interfaces/index.mjs +0 -6
- package/esm2022/lib/assets/types/esolve-asset-list.type.mjs +0 -2
- package/esm2022/lib/assets/types/esolve-asset-type.type.mjs +0 -2
- package/esm2022/lib/assets/types/index.mjs +0 -3
- package/esm2022/lib/auth/index.mjs +0 -7
- package/esm2022/lib/auth/interceptors/esolve-auth.interceptor.mjs +0 -32
- package/esm2022/lib/auth/interceptors/index.mjs +0 -2
- package/esm2022/lib/auth/interfaces/esolve-auth-check-data.interface.mjs +0 -2
- package/esm2022/lib/auth/interfaces/esolve-auth-data.interface.mjs +0 -2
- package/esm2022/lib/auth/interfaces/esolve-auth-get-data.interface.mjs +0 -2
- package/esm2022/lib/auth/interfaces/esolve-auth-response.interface.mjs +0 -2
- package/esm2022/lib/auth/interfaces/esolve-login-post-response-item.interface.mjs +0 -2
- package/esm2022/lib/auth/interfaces/esolve-otp-options.interface.mjs +0 -2
- package/esm2022/lib/auth/interfaces/esolve-otp-record.interface.mjs +0 -2
- package/esm2022/lib/auth/interfaces/esolve-otp-validation-record.interface.mjs +0 -2
- package/esm2022/lib/auth/interfaces/index.mjs +0 -9
- package/esm2022/lib/auth/models/esolve-otp-validation.model.mjs +0 -20
- package/esm2022/lib/auth/models/esolve-otp.model.mjs +0 -16
- package/esm2022/lib/auth/models/index.mjs +0 -3
- package/esm2022/lib/auth/providers/esolve-eurus-auto-login.provider.mjs +0 -12
- package/esm2022/lib/auth/providers/index.mjs +0 -2
- package/esm2022/lib/auth/services/esolve-auth.service.mjs +0 -296
- package/esm2022/lib/auth/services/esolve-otp.service.mjs +0 -80
- package/esm2022/lib/auth/services/index.mjs +0 -3
- package/esm2022/lib/auth/types/esolve-auth-check-response.type.mjs +0 -2
- package/esm2022/lib/auth/types/esolve-auth-get-response.type.mjs +0 -2
- package/esm2022/lib/auth/types/esolve-auth-response-data.type.mjs +0 -2
- package/esm2022/lib/auth/types/esolve-auth-result.type.mjs +0 -2
- package/esm2022/lib/auth/types/esolve-login-response.type.mjs +0 -2
- package/esm2022/lib/auth/types/esolve-logout-response.type.mjs +0 -2
- package/esm2022/lib/auth/types/esolve-otp-action.type.mjs +0 -2
- package/esm2022/lib/auth/types/esolve-validate-otp-response.type.mjs +0 -2
- package/esm2022/lib/auth/types/index.mjs +0 -9
- package/esm2022/lib/banners/classes/esolve-banner-image-hotspot.model.mjs +0 -9
- package/esm2022/lib/banners/classes/esolve-banner-image.model.mjs +0 -14
- package/esm2022/lib/banners/classes/esolve-banner.model.mjs +0 -29
- package/esm2022/lib/banners/classes/index.mjs +0 -4
- package/esm2022/lib/banners/esolve-banner.service.mjs +0 -99
- package/esm2022/lib/banners/index.mjs +0 -6
- package/esm2022/lib/banners/interfaces/esolve-banner-image-hotspot-coords.interface.mjs +0 -2
- package/esm2022/lib/banners/interfaces/esolve-banner-image-hotspot-record.interface.mjs +0 -2
- package/esm2022/lib/banners/interfaces/esolve-banner-image-record.interface.mjs +0 -2
- package/esm2022/lib/banners/interfaces/esolve-banner-image-set.interface.mjs +0 -2
- package/esm2022/lib/banners/interfaces/esolve-banner-link.interface.mjs +0 -2
- package/esm2022/lib/banners/interfaces/esolve-banner-record.interface.mjs +0 -2
- package/esm2022/lib/banners/interfaces/index.mjs +0 -7
- package/esm2022/lib/banners/types/esolve-banner-image-type.type.mjs +0 -2
- package/esm2022/lib/banners/types/esolve-banner-type.type.mjs +0 -2
- package/esm2022/lib/banners/types/index.mjs +0 -3
- package/esm2022/lib/captcha/classes/esolve-captcha.model.mjs +0 -11
- package/esm2022/lib/captcha/classes/index.mjs +0 -2
- package/esm2022/lib/captcha/esolve-captcha.service.mjs +0 -44
- package/esm2022/lib/captcha/index.mjs +0 -5
- package/esm2022/lib/captcha/interfaces/esolve-captcha-options.interface.mjs +0 -2
- package/esm2022/lib/captcha/interfaces/esolve-captcha-record.interface.mjs +0 -2
- package/esm2022/lib/captcha/interfaces/index.mjs +0 -3
- package/esm2022/lib/captcha/types/esolve-captcha-action.type.mjs +0 -2
- package/esm2022/lib/captcha/types/index.mjs +0 -2
- package/esm2022/lib/cart/classes/esolve-cart-alternative.model.mjs +0 -69
- package/esm2022/lib/cart/classes/esolve-cart-item.model.mjs +0 -31
- package/esm2022/lib/cart/classes/esolve-cart-stock-item.model.mjs +0 -56
- package/esm2022/lib/cart/classes/esolve-cart-tax-breakdown.model.mjs +0 -7
- package/esm2022/lib/cart/classes/esolve-cart-totals.model.mjs +0 -88
- package/esm2022/lib/cart/classes/esolve-checkout-result.model.mjs +0 -10
- package/esm2022/lib/cart/classes/esolve-delivery-category-totals.model.mjs +0 -27
- package/esm2022/lib/cart/classes/esolve-empty-cart-result.model.mjs +0 -4
- package/esm2022/lib/cart/classes/esolve-transaction-analytics-data.model.mjs +0 -14
- package/esm2022/lib/cart/classes/index.mjs +0 -9
- package/esm2022/lib/cart/esolve-cart.service.mjs +0 -308
- package/esm2022/lib/cart/index.mjs +0 -5
- package/esm2022/lib/cart/interfaces/esolve-cart-additional-params.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-cart-additional-where.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-cart-alternative-record.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-cart-item-record.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-cart-item-response.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-cart-set-item.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-cart-totals-record.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-checkout-body.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-checkout-response.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-time-slot-checkout.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-tracking-code.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esolve-transaction-analytics-data-record.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/esovle-delivery-category-totals-record.interface.mjs +0 -2
- package/esm2022/lib/cart/interfaces/index.mjs +0 -14
- package/esm2022/lib/cart/types/esolve-cart-alternatives-map.type.mjs +0 -2
- package/esm2022/lib/cart/types/esolve-cart-empty-response.type.mjs +0 -2
- package/esm2022/lib/cart/types/esolve-cart-set-action.type.mjs +0 -2
- package/esm2022/lib/cart/types/esolve-cart.type.mjs +0 -2
- package/esm2022/lib/cart/types/esolve-delivery-category-totals-map-record.type.mjs +0 -2
- package/esm2022/lib/cart/types/esolve-delivery-category-totals-map.type.mjs +0 -2
- package/esm2022/lib/cart/types/index.mjs +0 -7
- package/esm2022/lib/category-tree/classes/esolve-category-tree-item.model.mjs +0 -48
- package/esm2022/lib/category-tree/classes/index.mjs +0 -2
- package/esm2022/lib/category-tree/esolve-category-tree.service.mjs +0 -153
- package/esm2022/lib/category-tree/index.mjs +0 -4
- package/esm2022/lib/category-tree/interfaces/esolve-category-identifier.interface.mjs +0 -2
- package/esm2022/lib/category-tree/interfaces/esolve-category-record.interface.mjs +0 -2
- package/esm2022/lib/category-tree/interfaces/esolve-category-tree-item-options.interface.mjs +0 -2
- package/esm2022/lib/category-tree/interfaces/esolve-category-tree-item-record.interface.mjs +0 -2
- package/esm2022/lib/category-tree/interfaces/esolve-subcategory-record.interface.mjs +0 -2
- package/esm2022/lib/category-tree/interfaces/index.mjs +0 -6
- package/esm2022/lib/competitions/classes/esolve-competition-dates.model.mjs +0 -15
- package/esm2022/lib/competitions/classes/esolve-competition-entry-result.model.mjs +0 -9
- package/esm2022/lib/competitions/classes/esolve-competition-winner.model.mjs +0 -22
- package/esm2022/lib/competitions/classes/esolve-competition.model.mjs +0 -102
- package/esm2022/lib/competitions/classes/index.mjs +0 -5
- package/esm2022/lib/competitions/index.mjs +0 -7
- package/esm2022/lib/competitions/interfaces/esolve-competition-options.interface.mjs +0 -2
- package/esm2022/lib/competitions/interfaces/esolve-competition-record.interface.mjs +0 -2
- package/esm2022/lib/competitions/interfaces/esolve-competition-winner-record.interface.mjs +0 -2
- package/esm2022/lib/competitions/interfaces/index.mjs +0 -4
- package/esm2022/lib/competitions/services/esolve-competitions.service.mjs +0 -124
- package/esm2022/lib/competitions/services/index.mjs +0 -2
- package/esm2022/lib/competitions/types/esolve-competition-entry-response.type.mjs +0 -2
- package/esm2022/lib/competitions/types/index.mjs +0 -2
- package/esm2022/lib/core/esolve-config.service.mjs +0 -55
- package/esm2022/lib/core/esolve-connect-config.interface.mjs +0 -2
- package/esm2022/lib/core/esolve-connect-config.token.mjs +0 -3
- package/esm2022/lib/core/index.mjs +0 -5
- package/esm2022/lib/core/providers/index.mjs +0 -2
- package/esm2022/lib/core/providers/ng-esolve-connect.provider.mjs +0 -19
- package/esm2022/lib/coupons/classes/esolve-coupon.model.mjs +0 -29
- package/esm2022/lib/coupons/classes/index.mjs +0 -2
- package/esm2022/lib/coupons/esolve-coupons.service.mjs +0 -225
- package/esm2022/lib/coupons/index.mjs +0 -9
- package/esm2022/lib/coupons/interfaces/esolve-coupon-record.interface.mjs +0 -2
- package/esm2022/lib/coupons/interfaces/esolve-coupon-validation-error.interface.mjs +0 -2
- package/esm2022/lib/coupons/interfaces/esolve-coupon-validation-result.interface.mjs +0 -2
- package/esm2022/lib/coupons/interfaces/esolve-coupon-validation.interface.mjs +0 -2
- package/esm2022/lib/coupons/interfaces/index.mjs +0 -5
- package/esm2022/lib/coupons/types/esolve-coupons-cache.type.mjs +0 -2
- package/esm2022/lib/coupons/types/index.mjs +0 -2
- package/esm2022/lib/deliveries/classes/esolve-delivery-list.model.mjs +0 -4
- package/esm2022/lib/deliveries/classes/esolve-delivery-status.model.mjs +0 -27
- package/esm2022/lib/deliveries/classes/esolve-delivery.model.mjs +0 -41
- package/esm2022/lib/deliveries/classes/index.mjs +0 -4
- package/esm2022/lib/deliveries/esolve-deliveries.service.mjs +0 -119
- package/esm2022/lib/deliveries/index.mjs +0 -5
- package/esm2022/lib/deliveries/interfaces/esolve-deliveries-options.interface.mjs +0 -2
- package/esm2022/lib/deliveries/interfaces/esolve-delivery-record.interface.mjs +0 -2
- package/esm2022/lib/deliveries/interfaces/esolve-delivery-status-record.interface.mjs +0 -2
- package/esm2022/lib/deliveries/interfaces/index.mjs +0 -4
- package/esm2022/lib/deliveries/types/esolve-deliveries-sort-field.type.mjs +0 -2
- package/esm2022/lib/deliveries/types/esolve-delivery-status.type.mjs +0 -2
- package/esm2022/lib/deliveries/types/esolve-delivery-type.type.mjs +0 -2
- package/esm2022/lib/deliveries/types/index.mjs +0 -4
- package/esm2022/lib/device/classes/esolve-set-device-result.model.mjs +0 -9
- package/esm2022/lib/device/classes/esolve-user-device.model.mjs +0 -26
- package/esm2022/lib/device/classes/index.mjs +0 -3
- package/esm2022/lib/device/esolve-device.service.mjs +0 -75
- package/esm2022/lib/device/index.mjs +0 -5
- package/esm2022/lib/device/interfaces/esolve-device.interface.mjs +0 -2
- package/esm2022/lib/device/interfaces/esolve-user-device-options.interface.mjs +0 -2
- package/esm2022/lib/device/interfaces/esolve-user-device-record.interface.mjs +0 -2
- package/esm2022/lib/device/interfaces/index.mjs +0 -4
- package/esm2022/lib/device/types/esolve-device-type.type.mjs +0 -2
- package/esm2022/lib/device/types/index.mjs +0 -2
- package/esm2022/lib/enquiry/classes/esolve-enquiry-result.model.mjs +0 -9
- package/esm2022/lib/enquiry/classes/index.mjs +0 -2
- package/esm2022/lib/enquiry/esolve-enquiry.service.mjs +0 -38
- package/esm2022/lib/enquiry/index.mjs +0 -4
- package/esm2022/lib/enquiry/types/esolve-enquiry-response.type.mjs +0 -2
- package/esm2022/lib/enquiry/types/index.mjs +0 -2
- package/esm2022/lib/geocoder/classes/esolve-geocode-address-result.model.mjs +0 -12
- package/esm2022/lib/geocoder/classes/esolve-geocode-coords-result.model.mjs +0 -7
- package/esm2022/lib/geocoder/classes/esolve-geocode-result.model.mjs +0 -11
- package/esm2022/lib/geocoder/classes/index.mjs +0 -4
- package/esm2022/lib/geocoder/esolve-geocoder.service.mjs +0 -66
- package/esm2022/lib/geocoder/index.mjs +0 -4
- package/esm2022/lib/geocoder/interfaces/esolve-geocode-address-record.interface.mjs +0 -2
- package/esm2022/lib/geocoder/interfaces/esolve-geocode-result-record.interface.mjs +0 -2
- package/esm2022/lib/geocoder/interfaces/index.mjs +0 -3
- package/esm2022/lib/images/directives/cdn-src.directive.mjs +0 -71
- package/esm2022/lib/images/directives/index.mjs +0 -2
- package/esm2022/lib/images/esolve-image-loader.provider.mjs +0 -16
- package/esm2022/lib/images/functions/index.mjs +0 -5
- package/esm2022/lib/images/functions/is-esolve-cdn-path.function.mjs +0 -5
- package/esm2022/lib/images/functions/is-ftg-cdn-path.function.mjs +0 -5
- package/esm2022/lib/images/functions/is-legacy-esolve-cdn-path.function.mjs +0 -5
- package/esm2022/lib/images/functions/process-image-src.function.mjs +0 -38
- package/esm2022/lib/images/index.mjs +0 -4
- package/esm2022/lib/locations/classes/esolve-location-address.model.mjs +0 -13
- package/esm2022/lib/locations/classes/esolve-location-contact-info.model.mjs +0 -10
- package/esm2022/lib/locations/classes/esolve-location-geo.model.mjs +0 -8
- package/esm2022/lib/locations/classes/esolve-location-list.model.mjs +0 -11
- package/esm2022/lib/locations/classes/esolve-location-pobox-address.model.mjs +0 -8
- package/esm2022/lib/locations/classes/esolve-location-trading-day.model.mjs +0 -7
- package/esm2022/lib/locations/classes/esolve-location-trading-times.model.mjs +0 -14
- package/esm2022/lib/locations/classes/esolve-location.model.mjs +0 -93
- package/esm2022/lib/locations/classes/index.mjs +0 -10
- package/esm2022/lib/locations/esolve-locations.service.mjs +0 -188
- package/esm2022/lib/locations/index.mjs +0 -5
- package/esm2022/lib/locations/interfaces/esolve-location-filter-options.interface.mjs +0 -2
- package/esm2022/lib/locations/interfaces/esolve-location-geo-options.interface.mjs +0 -2
- package/esm2022/lib/locations/interfaces/esolve-location-options.interface.mjs +0 -2
- package/esm2022/lib/locations/interfaces/esolve-location-record.interface.mjs +0 -2
- package/esm2022/lib/locations/interfaces/index.mjs +0 -5
- package/esm2022/lib/locations/types/esolve-location-image-size.type.mjs +0 -2
- package/esm2022/lib/locations/types/esolve-location-sort-field.type.mjs +0 -2
- package/esm2022/lib/locations/types/index.mjs +0 -4
- package/esm2022/lib/manufacturers/classes/esolve-manufacturer.model.mjs +0 -61
- package/esm2022/lib/manufacturers/classes/index.mjs +0 -2
- package/esm2022/lib/manufacturers/esolve-manufacturers.service.mjs +0 -71
- package/esm2022/lib/manufacturers/index.mjs +0 -6
- package/esm2022/lib/manufacturers/interfaces/esolve-manufacturer-options.interface.mjs +0 -2
- package/esm2022/lib/manufacturers/interfaces/esolve-manufacturer-record.interface.mjs +0 -2
- package/esm2022/lib/manufacturers/interfaces/index.mjs +0 -3
- package/esm2022/lib/manufacturers/types/esolve-manufacturer-image-size.type.mjs +0 -2
- package/esm2022/lib/manufacturers/types/index.mjs +0 -2
- package/esm2022/lib/menu/classes/esolve-menu-item.model.mjs +0 -31
- package/esm2022/lib/menu/classes/index.mjs +0 -2
- package/esm2022/lib/menu/esolve-menu.service.mjs +0 -45
- package/esm2022/lib/menu/index.mjs +0 -5
- package/esm2022/lib/menu/interfaces/esolve-menu-tree-record.interface.mjs +0 -2
- package/esm2022/lib/menu/interfaces/index.mjs +0 -2
- package/esm2022/lib/menu/types/esolve-menu.type.mjs +0 -2
- package/esm2022/lib/menu/types/index.mjs +0 -2
- package/esm2022/lib/news/classes/esolve-news-article-author.model.mjs +0 -9
- package/esm2022/lib/news/classes/esolve-news-article-list.model.mjs +0 -8
- package/esm2022/lib/news/classes/esolve-news-article.model.mjs +0 -73
- package/esm2022/lib/news/classes/esolve-news-group.model.mjs +0 -25
- package/esm2022/lib/news/classes/esolve-newsletter-result.model.mjs +0 -9
- package/esm2022/lib/news/classes/index.mjs +0 -6
- package/esm2022/lib/news/esolve-news.service.mjs +0 -130
- package/esm2022/lib/news/index.mjs +0 -5
- package/esm2022/lib/news/interfaces/esolve-news-article-author-record.interface.mjs +0 -2
- package/esm2022/lib/news/interfaces/esolve-news-article-options.interface.mjs +0 -2
- package/esm2022/lib/news/interfaces/esolve-news-article-record.interface.mjs +0 -2
- package/esm2022/lib/news/interfaces/esolve-news-group-record.interface.mjs +0 -2
- package/esm2022/lib/news/interfaces/index.mjs +0 -5
- package/esm2022/lib/news/types/esolve-newsletter-response.type.mjs +0 -2
- package/esm2022/lib/news/types/index.mjs +0 -2
- package/esm2022/lib/ng-esolve-connect.module.mjs +0 -24
- package/esm2022/lib/payment/classes/esolve-account-payment.model.mjs +0 -13
- package/esm2022/lib/payment/classes/esolve-banking-details.model.mjs +0 -11
- package/esm2022/lib/payment/classes/esolve-payment-method.model.mjs +0 -32
- package/esm2022/lib/payment/classes/esolve-payment-result.model.mjs +0 -37
- package/esm2022/lib/payment/classes/esolve-vault-item-result.model.mjs +0 -20
- package/esm2022/lib/payment/classes/esolve-vault-item.model.mjs +0 -26
- package/esm2022/lib/payment/classes/index.mjs +0 -7
- package/esm2022/lib/payment/esolve-payment.service.mjs +0 -311
- package/esm2022/lib/payment/index.mjs +0 -5
- package/esm2022/lib/payment/interfaces/esolve-account-payment-options.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-account-payment-record.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-card-data.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-payment-form-input.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-payment-method-options.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-payment-method-record.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-payment-redirect-links.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-payment-response.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-payment-set-body.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-payment-status.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-vault-record.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/esolve-vault-response.interface.mjs +0 -2
- package/esm2022/lib/payment/interfaces/index.mjs +0 -13
- package/esm2022/lib/payment/types/esolve-integration-type.type.mjs +0 -2
- package/esm2022/lib/payment/types/esolve-service-provider.type.mjs +0 -2
- package/esm2022/lib/payment/types/index.mjs +0 -3
- package/esm2022/lib/ranges/classes/esolve-range.model.mjs +0 -54
- package/esm2022/lib/ranges/classes/index.mjs +0 -2
- package/esm2022/lib/ranges/esolve-ranges.service.mjs +0 -74
- package/esm2022/lib/ranges/index.mjs +0 -4
- package/esm2022/lib/ranges/interfaces/esolve-range-options.interface.mjs +0 -2
- package/esm2022/lib/ranges/interfaces/esolve-range-record.interface.mjs +0 -2
- package/esm2022/lib/ranges/interfaces/index.mjs +0 -3
- package/esm2022/lib/reviews/classes/esolve-review-list.model.mjs +0 -8
- package/esm2022/lib/reviews/classes/esolve-review-result.model.mjs +0 -9
- package/esm2022/lib/reviews/classes/esolve-review.model.mjs +0 -22
- package/esm2022/lib/reviews/classes/index.mjs +0 -4
- package/esm2022/lib/reviews/index.mjs +0 -5
- package/esm2022/lib/reviews/interfaces/esolve-review-list-record.interface.mjs +0 -2
- package/esm2022/lib/reviews/interfaces/esolve-review-options.interface.mjs +0 -2
- package/esm2022/lib/reviews/interfaces/esolve-review-record.interface.mjs +0 -2
- package/esm2022/lib/reviews/interfaces/esolve-review-report.interface.mjs +0 -2
- package/esm2022/lib/reviews/interfaces/esolve-review-user.interface.mjs +0 -2
- package/esm2022/lib/reviews/interfaces/index.mjs +0 -6
- package/esm2022/lib/reviews/services/esolve-reviews.service.mjs +0 -134
- package/esm2022/lib/reviews/services/index.mjs +0 -2
- package/esm2022/lib/reviews/types/esolve-review-response.type.mjs +0 -2
- package/esm2022/lib/reviews/types/esolve-review-sort-field.type.mjs +0 -2
- package/esm2022/lib/reviews/types/index.mjs +0 -3
- package/esm2022/lib/seo/classes/esolve-seo-info.model.mjs +0 -12
- package/esm2022/lib/seo/classes/index.mjs +0 -2
- package/esm2022/lib/seo/esolve-seo.service.mjs +0 -112
- package/esm2022/lib/seo/index.mjs +0 -4
- package/esm2022/lib/seo/interfaces/esolve-seo-details.interface.mjs +0 -2
- package/esm2022/lib/seo/interfaces/index.mjs +0 -2
- package/esm2022/lib/session/esolve-session-metadata.service.mjs +0 -71
- package/esm2022/lib/session/esolve-session.service.mjs +0 -241
- package/esm2022/lib/session/index.mjs +0 -4
- package/esm2022/lib/session/interfaces/esolve-session-data.interface.mjs +0 -2
- package/esm2022/lib/session/interfaces/esolve-session-update-options.interface.mjs +0 -2
- package/esm2022/lib/session/interfaces/esolve-session.interface.mjs +0 -2
- package/esm2022/lib/session/interfaces/index.mjs +0 -4
- package/esm2022/lib/shared/cookie/esolve-cookie-options.interface.mjs +0 -2
- package/esm2022/lib/shared/cookie/esolve-cookie.service.mjs +0 -29
- package/esm2022/lib/shared/cookie/index.mjs +0 -2
- package/esm2022/lib/shared/custom-fields/index.mjs +0 -2
- package/esm2022/lib/shared/custom-fields/interfaces/esolve-custom-fields.interface.mjs +0 -2
- package/esm2022/lib/shared/custom-fields/interfaces/index.mjs +0 -2
- package/esm2022/lib/shared/errors/esolve-error-handler.service.mjs +0 -94
- package/esm2022/lib/shared/errors/esolve-http-error.model.mjs +0 -15
- package/esm2022/lib/shared/errors/index.mjs +0 -3
- package/esm2022/lib/shared/esolve-hex-hash.function.mjs +0 -26
- package/esm2022/lib/shared/esolve-list.model.mjs +0 -9
- package/esm2022/lib/shared/esolve-result.model.mjs +0 -8
- package/esm2022/lib/shared/esolve-url-target.type.mjs +0 -2
- package/esm2022/lib/shared/filters/classes/esolve-generic-filter.model.mjs +0 -27
- package/esm2022/lib/shared/filters/classes/esolve-multiple-select-filter.model.mjs +0 -31
- package/esm2022/lib/shared/filters/classes/esolve-range-filter.model.mjs +0 -46
- package/esm2022/lib/shared/filters/classes/esolve-single-select-filter.model.mjs +0 -34
- package/esm2022/lib/shared/filters/classes/esolve-toggle-filter.model.mjs +0 -22
- package/esm2022/lib/shared/filters/classes/index.mjs +0 -7
- package/esm2022/lib/shared/filters/esolve-filter-factory.mjs +0 -72
- package/esm2022/lib/shared/filters/index.mjs +0 -5
- package/esm2022/lib/shared/filters/interfaces/esolve-filter-definitions.interface.mjs +0 -2
- package/esm2022/lib/shared/filters/interfaces/esolve-filter-record.interface.mjs +0 -2
- package/esm2022/lib/shared/filters/interfaces/esolve-filter.interface.mjs +0 -2
- package/esm2022/lib/shared/filters/interfaces/esolve-generic-filter-definition.interface.mjs +0 -2
- package/esm2022/lib/shared/filters/interfaces/esolve-range-filter-definition.interface.mjs +0 -2
- package/esm2022/lib/shared/filters/interfaces/esolve-range-filter-record.interface.mjs +0 -2
- package/esm2022/lib/shared/filters/interfaces/esolve-select-filter-record.interface.mjs +0 -2
- package/esm2022/lib/shared/filters/interfaces/esolve-select-filter.interface.mjs +0 -2
- package/esm2022/lib/shared/filters/interfaces/index.mjs +0 -10
- package/esm2022/lib/shared/filters/types/esolve-filter-list.type.mjs +0 -2
- package/esm2022/lib/shared/filters/types/esolve-filter-record-list.type.mjs +0 -2
- package/esm2022/lib/shared/filters/types/esolve-filter-toggle.type.mjs +0 -2
- package/esm2022/lib/shared/filters/types/esolve-filter-type.type.mjs +0 -2
- package/esm2022/lib/shared/filters/types/esolve-range-filter-type.type.mjs +0 -2
- package/esm2022/lib/shared/filters/types/esolve-select-filter-type.type.mjs +0 -2
- package/esm2022/lib/shared/filters/types/index.mjs +0 -8
- package/esm2022/lib/shared/index.mjs +0 -11
- package/esm2022/lib/shared/response/classes/esolve-response-result.model.mjs +0 -9
- package/esm2022/lib/shared/response/classes/index.mjs +0 -2
- package/esm2022/lib/shared/response/esolve-response-handler.service.mjs +0 -33
- package/esm2022/lib/shared/response/index.mjs +0 -4
- package/esm2022/lib/shared/response/interfaces/esolve-delete-response.interface.mjs +0 -2
- package/esm2022/lib/shared/response/interfaces/esolve-delete-result.interface.mjs +0 -2
- package/esm2022/lib/shared/response/interfaces/esolve-get-response.interface.mjs +0 -2
- package/esm2022/lib/shared/response/interfaces/esolve-post-response-item.interface.mjs +0 -2
- package/esm2022/lib/shared/response/interfaces/esolve-post-response-status.interface.mjs +0 -2
- package/esm2022/lib/shared/response/interfaces/esolve-response-log-item.interface.mjs +0 -2
- package/esm2022/lib/shared/response/interfaces/esolve-response.interface.mjs +0 -2
- package/esm2022/lib/shared/response/interfaces/esolve-set-response.interface.mjs +0 -2
- package/esm2022/lib/shared/response/interfaces/index.mjs +0 -9
- package/esm2022/lib/shared/sort/esolve-sort-order.type.mjs +0 -2
- package/esm2022/lib/shared/sort/esolve-sort.interface.mjs +0 -2
- package/esm2022/lib/shared/sort/index.mjs +0 -5
- package/esm2022/lib/shipping/classes/esolve-shipping-cost.model.mjs +0 -12
- package/esm2022/lib/shipping/classes/esolve-shipping-method.model.mjs +0 -37
- package/esm2022/lib/shipping/classes/esolve-shipping-totals.model.mjs +0 -8
- package/esm2022/lib/shipping/classes/esolve-time-slot-config.model.mjs +0 -17
- package/esm2022/lib/shipping/classes/esolve-time-slot-date.model.mjs +0 -14
- package/esm2022/lib/shipping/classes/esolve-time-slot-days.model.mjs +0 -21
- package/esm2022/lib/shipping/classes/esolve-time-slot-times.model.mjs +0 -11
- package/esm2022/lib/shipping/classes/esolve-time-slot.model.mjs +0 -19
- package/esm2022/lib/shipping/classes/index.mjs +0 -9
- package/esm2022/lib/shipping/esolve-shipping.service.mjs +0 -149
- package/esm2022/lib/shipping/index.mjs +0 -5
- package/esm2022/lib/shipping/interfaces/esolve-shipping-cost-record.interface.mjs +0 -2
- package/esm2022/lib/shipping/interfaces/esolve-shipping-method-options.interface.mjs +0 -2
- package/esm2022/lib/shipping/interfaces/esolve-shipping-method-record.interface.mjs +0 -2
- package/esm2022/lib/shipping/interfaces/esolve-time-slot-config-record.interface.mjs +0 -2
- package/esm2022/lib/shipping/interfaces/esolve-time-slot-date-record.interface.mjs +0 -2
- package/esm2022/lib/shipping/interfaces/esolve-time-slot-days-record.interface.mjs +0 -2
- package/esm2022/lib/shipping/interfaces/esolve-time-slot-record.interface.mjs +0 -2
- package/esm2022/lib/shipping/interfaces/esolve-time-slot-times-record.interface.mjs +0 -2
- package/esm2022/lib/shipping/interfaces/index.mjs +0 -9
- package/esm2022/lib/shipping/types/esolve-delivery_integration.type.mjs +0 -2
- package/esm2022/lib/shipping/types/esolve-insurance-calculation-method.type.mjs +0 -2
- package/esm2022/lib/shipping/types/esolve-shipping-calculation-method.type.mjs +0 -2
- package/esm2022/lib/shipping/types/esolve-shipping-location.type.mjs +0 -2
- package/esm2022/lib/shipping/types/index.mjs +0 -5
- package/esm2022/lib/specials/classes/esolve-special-dates.model.mjs +0 -7
- package/esm2022/lib/specials/classes/esolve-special-image-collection.model.mjs +0 -25
- package/esm2022/lib/specials/classes/esolve-special-image.model.mjs +0 -9
- package/esm2022/lib/specials/classes/esolve-special.model.mjs +0 -40
- package/esm2022/lib/specials/classes/index.mjs +0 -5
- package/esm2022/lib/specials/esolve-specials.service.mjs +0 -78
- package/esm2022/lib/specials/index.mjs +0 -4
- package/esm2022/lib/specials/interfaces/esolve-special-image-collection-record.interface.mjs +0 -2
- package/esm2022/lib/specials/interfaces/esolve-special-image-record.interface.mjs +0 -2
- package/esm2022/lib/specials/interfaces/esolve-special-options.interface.mjs +0 -2
- package/esm2022/lib/specials/interfaces/esolve-special-record.interface.mjs +0 -2
- package/esm2022/lib/specials/interfaces/index.mjs +0 -5
- package/esm2022/lib/stock/classes/esolve-additional-stock-image.model.mjs +0 -21
- package/esm2022/lib/stock/classes/esolve-colour.model.mjs +0 -23
- package/esm2022/lib/stock/classes/esolve-dependant-item.model.mjs +0 -11
- package/esm2022/lib/stock/classes/esolve-linked-stock-item.model.mjs +0 -9
- package/esm2022/lib/stock/classes/esolve-media-stock-item.model.mjs +0 -7
- package/esm2022/lib/stock/classes/esolve-recipe-stock-item.model.mjs +0 -9
- package/esm2022/lib/stock/classes/esolve-set-notify-result.model.mjs +0 -9
- package/esm2022/lib/stock/classes/esolve-stock-badge.model.mjs +0 -11
- package/esm2022/lib/stock/classes/esolve-stock-group-item.model.mjs +0 -7
- package/esm2022/lib/stock/classes/esolve-stock-group.model.mjs +0 -13
- package/esm2022/lib/stock/classes/esolve-stock-image-collection.model.mjs +0 -25
- package/esm2022/lib/stock/classes/esolve-stock-image.model.mjs +0 -50
- package/esm2022/lib/stock/classes/esolve-stock-item-base.model.mjs +0 -393
- package/esm2022/lib/stock/classes/esolve-stock-item-list.model.mjs +0 -11
- package/esm2022/lib/stock/classes/esolve-stock-item-location-level.model.mjs +0 -17
- package/esm2022/lib/stock/classes/esolve-stock-item.model.mjs +0 -24
- package/esm2022/lib/stock/classes/esolve-stock-lead-times.model.mjs +0 -9
- package/esm2022/lib/stock/classes/esolve-stock-price.model.mjs +0 -52
- package/esm2022/lib/stock/classes/esolve-stock-reviews-report.model.mjs +0 -18
- package/esm2022/lib/stock/classes/esolve-stock-transaction-history.model.mjs +0 -7
- package/esm2022/lib/stock/classes/esolve-stock-transaction-sales.model.mjs +0 -9
- package/esm2022/lib/stock/classes/esolve-suggested-stock-item.model.mjs +0 -7
- package/esm2022/lib/stock/classes/index.mjs +0 -23
- package/esm2022/lib/stock/esolve-stock.service.mjs +0 -505
- package/esm2022/lib/stock/index.mjs +0 -6
- package/esm2022/lib/stock/interfaces/esolve-additional-stock-image-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-colour-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-dependant-item-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-linked-stock-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-media-stock-item-options.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-recipe-item-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-recipe-stock-options.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-badge-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-base-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-cart-parameter.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-filter-options.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-image-collection-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-item-base-options.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-item-history-options.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-item-location-level-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-item-options.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-lead-times-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-linked-category-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-stock-reviews-report-record.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/esolve-transaction-sales-stock-item-options.interface.mjs +0 -2
- package/esm2022/lib/stock/interfaces/index.mjs +0 -23
- package/esm2022/lib/stock/types/esolve-erp-sales-stock-sort-field.type.mjs +0 -2
- package/esm2022/lib/stock/types/esolve-media-stock-item-list.type.mjs +0 -2
- package/esm2022/lib/stock/types/esolve-media-stock-item-record.type.mjs +0 -2
- package/esm2022/lib/stock/types/esolve-media-stock-sort-field.type.mjs +0 -2
- package/esm2022/lib/stock/types/esolve-stock-cart-parameter-input.type.mjs +0 -2
- package/esm2022/lib/stock/types/esolve-stock-group-item-record.type.mjs +0 -2
- package/esm2022/lib/stock/types/esolve-stock-history-sort-field.type.mjs +0 -2
- package/esm2022/lib/stock/types/esolve-stock-image-size.type.mjs +0 -2
- package/esm2022/lib/stock/types/esolve-stock-sort-field.type.mjs +0 -2
- package/esm2022/lib/stock/types/esolve-stock-type.type.mjs +0 -2
- package/esm2022/lib/stock/types/esolve-stock-unit-of-measure.type.mjs +0 -2
- package/esm2022/lib/stock/types/index.mjs +0 -13
- package/esm2022/lib/suppliers/classes/esolve-supplier.model.mjs +0 -27
- package/esm2022/lib/suppliers/classes/index.mjs +0 -2
- package/esm2022/lib/suppliers/esolve-suppliers.service.mjs +0 -56
- package/esm2022/lib/suppliers/index.mjs +0 -5
- package/esm2022/lib/suppliers/interfaces/esolve-supplier-options.interface.mjs +0 -2
- package/esm2022/lib/suppliers/interfaces/esolve-supplier-record.interface.mjs +0 -2
- package/esm2022/lib/suppliers/interfaces/index.mjs +0 -3
- package/esm2022/lib/tags/classes/esolve-tag.model.mjs +0 -35
- package/esm2022/lib/tags/classes/index.mjs +0 -2
- package/esm2022/lib/tags/esolve-tags.service.mjs +0 -75
- package/esm2022/lib/tags/index.mjs +0 -6
- package/esm2022/lib/tags/interfaces/esolve-tag-options.interface.mjs +0 -2
- package/esm2022/lib/tags/interfaces/esolve-tag-record.interface.mjs +0 -2
- package/esm2022/lib/tags/interfaces/index.mjs +0 -3
- package/esm2022/lib/tags/types/esolve-tag-phrase-match-mode.type.mjs +0 -2
- package/esm2022/lib/tags/types/index.mjs +0 -2
- package/esm2022/lib/topics/classes/esolve-topic.model.mjs +0 -15
- package/esm2022/lib/topics/classes/index.mjs +0 -2
- package/esm2022/lib/topics/esolve-topic.service.mjs +0 -53
- package/esm2022/lib/topics/index.mjs +0 -4
- package/esm2022/lib/topics/interfaces/esolve-topic-record.interface.mjs +0 -2
- package/esm2022/lib/topics/interfaces/index.mjs +0 -2
- package/esm2022/lib/transactions/classes/esolve-transaction-address.model.mjs +0 -17
- package/esm2022/lib/transactions/classes/esolve-transaction-approval-result.model.mjs +0 -11
- package/esm2022/lib/transactions/classes/esolve-transaction-client.model.mjs +0 -13
- package/esm2022/lib/transactions/classes/esolve-transaction-delivery.model.mjs +0 -37
- package/esm2022/lib/transactions/classes/esolve-transaction-item-price.model.mjs +0 -25
- package/esm2022/lib/transactions/classes/esolve-transaction-item.model.mjs +0 -90
- package/esm2022/lib/transactions/classes/esolve-transaction-list.model.mjs +0 -4
- package/esm2022/lib/transactions/classes/esolve-transaction-location.model.mjs +0 -4
- package/esm2022/lib/transactions/classes/esolve-transaction-payment-method.model.mjs +0 -11
- package/esm2022/lib/transactions/classes/esolve-transaction-pick.model.mjs +0 -8
- package/esm2022/lib/transactions/classes/esolve-transaction-shipping-method.model.mjs +0 -13
- package/esm2022/lib/transactions/classes/esolve-transaction-time-slot.model.mjs +0 -9
- package/esm2022/lib/transactions/classes/esolve-transaction-user.model.mjs +0 -11
- package/esm2022/lib/transactions/classes/esolve-transaction.model.mjs +0 -89
- package/esm2022/lib/transactions/classes/index.mjs +0 -15
- package/esm2022/lib/transactions/esolve-transactions.service.mjs +0 -198
- package/esm2022/lib/transactions/index.mjs +0 -5
- package/esm2022/lib/transactions/interfaces/esolve-transaction-approval.interface.mjs +0 -2
- package/esm2022/lib/transactions/interfaces/esolve-transaction-client-record.interface.mjs +0 -2
- package/esm2022/lib/transactions/interfaces/esolve-transaction-item-record.interface.mjs +0 -2
- package/esm2022/lib/transactions/interfaces/esolve-transaction-options.interface.mjs +0 -2
- package/esm2022/lib/transactions/interfaces/esolve-transaction-payment-method-record.interface.mjs +0 -2
- package/esm2022/lib/transactions/interfaces/esolve-transaction-record.interface.mjs +0 -2
- package/esm2022/lib/transactions/interfaces/esolve-transaction-shipping-method-record.interface.mjs +0 -2
- package/esm2022/lib/transactions/interfaces/esolve-transaction-time-slot-record.interface.mjs +0 -2
- package/esm2022/lib/transactions/interfaces/esolve-transaction-user-record.interface.mjs +0 -2
- package/esm2022/lib/transactions/interfaces/index.mjs +0 -10
- package/esm2022/lib/transactions/types/esolve-pick-status.type.mjs +0 -2
- package/esm2022/lib/transactions/types/esolve-transaction-approval-state.type.mjs +0 -2
- package/esm2022/lib/transactions/types/esolve-transaction-location-record.type.mjs +0 -2
- package/esm2022/lib/transactions/types/esolve-transaction-sort-field.type.mjs +0 -2
- package/esm2022/lib/transactions/types/esolve-transaction-type.type.mjs +0 -2
- package/esm2022/lib/transactions/types/index.mjs +0 -6
- package/esm2022/lib/vouchers/classes/esolve-voucher.model.mjs +0 -18
- package/esm2022/lib/vouchers/classes/index.mjs +0 -2
- package/esm2022/lib/vouchers/esolve-vouchers.service.mjs +0 -225
- package/esm2022/lib/vouchers/index.mjs +0 -9
- package/esm2022/lib/vouchers/interfaces/esolve-voucher-record.interface.mjs +0 -2
- package/esm2022/lib/vouchers/interfaces/esolve-voucher-validation-error.interface.mjs +0 -2
- package/esm2022/lib/vouchers/interfaces/esolve-voucher-validation-result.interface.mjs +0 -2
- package/esm2022/lib/vouchers/interfaces/esolve-voucher-validation.interface.mjs +0 -2
- package/esm2022/lib/vouchers/interfaces/index.mjs +0 -5
- package/esm2022/lib/vouchers/types/esolve-vouchers-cache.type.mjs +0 -2
- package/esm2022/lib/vouchers/types/index.mjs +0 -2
- package/esm2022/lib/wallet/classes/esolve-wallet-balances.model.mjs +0 -15
- package/esm2022/lib/wallet/classes/esolve-wallet-transaction.model.mjs +0 -24
- package/esm2022/lib/wallet/classes/esolve-wallet-transactions-list.model.mjs +0 -4
- package/esm2022/lib/wallet/classes/index.mjs +0 -4
- package/esm2022/lib/wallet/esolve-wallet.service.mjs +0 -135
- package/esm2022/lib/wallet/index.mjs +0 -5
- package/esm2022/lib/wallet/interfaces/esolve-wallet-balances-record.interface.mjs +0 -2
- package/esm2022/lib/wallet/interfaces/esolve-wallet-cash-out-options.interface.mjs +0 -2
- package/esm2022/lib/wallet/interfaces/esolve-wallet-transaction-options.interface.mjs +0 -2
- package/esm2022/lib/wallet/interfaces/esolve-wallet-transaction-record.interface.mjs +0 -2
- package/esm2022/lib/wallet/interfaces/index.mjs +0 -5
- package/esm2022/lib/wallet/types/esolve-wallet-cash-out-response.type.mjs +0 -2
- package/esm2022/lib/wallet/types/esolve-wallet-transaction-type.type.mjs +0 -2
- package/esm2022/lib/wallet/types/index.mjs +0 -3
- package/esm2022/lib/wishlist/classes/esolve-empty-wishlist-result.model.mjs +0 -4
- package/esm2022/lib/wishlist/classes/esolve-wishlist-item.model.mjs +0 -14
- package/esm2022/lib/wishlist/classes/index.mjs +0 -3
- package/esm2022/lib/wishlist/esolve-wishlist.service.mjs +0 -113
- package/esm2022/lib/wishlist/index.mjs +0 -6
- package/esm2022/lib/wishlist/interfaces/esolve-wishlist-item-record.interface.mjs +0 -2
- package/esm2022/lib/wishlist/interfaces/esolve-wishlist-item-response.interface.mjs +0 -2
- package/esm2022/lib/wishlist/interfaces/esolve-wishlist-set-item.interface.mjs +0 -2
- package/esm2022/lib/wishlist/interfaces/index.mjs +0 -4
- package/esm2022/lib/wishlist/types/esolve-wishlist-set-action.type.mjs +0 -2
- package/esm2022/lib/wishlist/types/esolve-wishlist.type.mjs +0 -2
- package/esm2022/lib/wishlist/types/index.mjs +0 -3
- package/esm2022/media/esolve-ng-esolve-connect-media.mjs +0 -5
- package/esm2022/media/index.mjs +0 -9
- package/esm2022/media/lib/classes/esolve-heading.model.mjs +0 -7
- package/esm2022/media/lib/classes/esolve-media-article.model.mjs +0 -75
- package/esm2022/media/lib/classes/esolve-media-group.model.mjs +0 -15
- package/esm2022/media/lib/classes/esolve-media-layout-section.model.mjs +0 -18
- package/esm2022/media/lib/classes/esolve-media-link.model.mjs +0 -8
- package/esm2022/media/lib/classes/index.mjs +0 -6
- package/esm2022/media/lib/components/index.mjs +0 -3
- package/esm2022/media/lib/components/media-layout/esolve-media-layout.component.mjs +0 -40
- package/esm2022/media/lib/components/media-section/esolve-media-section.component.mjs +0 -52
- package/esm2022/media/lib/esolve-connect-media-config.token.mjs +0 -3
- package/esm2022/media/lib/functions/index.mjs +0 -2
- package/esm2022/media/lib/functions/provide-ng-esolve-connect-media.function.mjs +0 -8
- package/esm2022/media/lib/interfaces/esolve-connect-media-config.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/esolve-heading-record.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/esolve-layout-config.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/esolve-layout-section-config.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/esolve-media-group-record.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/esolve-media-layout-section-record.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/esolve-media-link-record.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/esolve-media-record.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/esolve-media-section-data-generic.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/esolve-media-stock-section-data.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/esolve-section-key-options.interface.mjs +0 -2
- package/esm2022/media/lib/interfaces/index.mjs +0 -12
- package/esm2022/media/lib/ng-esolve-connect-media.module.mjs +0 -23
- package/esm2022/media/lib/services/esolve-media-layout.service.mjs +0 -151
- package/esm2022/media/lib/services/esolve-media.service.mjs +0 -117
- package/esm2022/media/lib/services/index.mjs +0 -3
- package/esm2022/media/lib/types/esolve-media-layout-section-type.type.mjs +0 -2
- package/esm2022/media/lib/types/index.mjs +0 -2
- package/esm2022/notifications/esolve-ng-esolve-connect-notifications.mjs +0 -5
- package/esm2022/notifications/index.mjs +0 -5
- package/esm2022/notifications/lib/classes/esolve-notification-button-action.model.mjs +0 -15
- package/esm2022/notifications/lib/classes/esolve-notification-dates.model.mjs +0 -7
- package/esm2022/notifications/lib/classes/esolve-system-notification-type.model.mjs +0 -16
- package/esm2022/notifications/lib/classes/esolve-system-notification.model.mjs +0 -28
- package/esm2022/notifications/lib/classes/index.mjs +0 -5
- package/esm2022/notifications/lib/interfaces/esolve-notification-button-action-record.interface.mjs +0 -2
- package/esm2022/notifications/lib/interfaces/esolve-notification-date-record.interface.mjs +0 -2
- package/esm2022/notifications/lib/interfaces/esolve-notification-dates-record.interface.mjs +0 -2
- package/esm2022/notifications/lib/interfaces/esolve-system-notification-options.interface.mjs +0 -2
- package/esm2022/notifications/lib/interfaces/esolve-system-notification-record.interface.mjs +0 -2
- package/esm2022/notifications/lib/interfaces/esolve-system-notification-type-record.interface.mjs +0 -2
- package/esm2022/notifications/lib/interfaces/index.mjs +0 -7
- package/esm2022/notifications/lib/services/esolve-notifications.service.mjs +0 -45
- package/esm2022/notifications/lib/services/index.mjs +0 -2
- package/esm2022/notifications/lib/types/esolve-notification-position.type.mjs +0 -2
- package/esm2022/notifications/lib/types/esolve-notification-size.type.mjs +0 -2
- package/esm2022/notifications/lib/types/esolve-notification-type.type.mjs +0 -2
- package/esm2022/notifications/lib/types/index.mjs +0 -4
- package/esm2022/survey/esolve-ng-esolve-connect-survey.mjs +0 -5
- package/esm2022/survey/index.mjs +0 -5
- package/esm2022/survey/lib/classes/esolve-survey-answer-result.model.mjs +0 -11
- package/esm2022/survey/lib/classes/esolve-survey-check-question.model.mjs +0 -11
- package/esm2022/survey/lib/classes/esolve-survey-input-question.model.mjs +0 -11
- package/esm2022/survey/lib/classes/esolve-survey-options-question.model.mjs +0 -24
- package/esm2022/survey/lib/classes/esolve-survey-question.model.mjs +0 -10
- package/esm2022/survey/lib/classes/esolve-survey-radio-question.model.mjs +0 -11
- package/esm2022/survey/lib/classes/esolve-survey-rating-question.model.mjs +0 -17
- package/esm2022/survey/lib/classes/esolve-survey-select-question.model.mjs +0 -27
- package/esm2022/survey/lib/classes/esolve-survey-text-question.model.mjs +0 -10
- package/esm2022/survey/lib/classes/esolve-survey-textarea-question.model.mjs +0 -11
- package/esm2022/survey/lib/classes/esolve-survey-values-question.model.mjs +0 -11
- package/esm2022/survey/lib/classes/esolve-survey.model.mjs +0 -60
- package/esm2022/survey/lib/classes/index.mjs +0 -13
- package/esm2022/survey/lib/interfaces/esolve-survey-answer-response.interface.mjs +0 -2
- package/esm2022/survey/lib/interfaces/esolve-survey-option.interface.mjs +0 -2
- package/esm2022/survey/lib/interfaces/esolve-survey-options-question-record.interface.mjs +0 -2
- package/esm2022/survey/lib/interfaces/esolve-survey-options.interface.mjs +0 -2
- package/esm2022/survey/lib/interfaces/esolve-survey-question-record.type.mjs +0 -2
- package/esm2022/survey/lib/interfaces/esolve-survey-record.interface.mjs +0 -2
- package/esm2022/survey/lib/interfaces/esolve-survey-text-question-record.interface.mjs +0 -2
- package/esm2022/survey/lib/interfaces/esolve-survey-values-question-record.interface.mjs +0 -2
- package/esm2022/survey/lib/interfaces/index.mjs +0 -9
- package/esm2022/survey/lib/services/esolve-survey.service.mjs +0 -100
- package/esm2022/survey/lib/services/index.mjs +0 -2
- package/esm2022/survey/lib/types/esolve-survey-options-question-type.type.mjs +0 -2
- package/esm2022/survey/lib/types/esolve-survey-question-record-list.type.mjs +0 -2
- package/esm2022/survey/lib/types/esolve-survey-question-type.type.mjs +0 -2
- package/esm2022/survey/lib/types/esolve-survey-text-question-type.type.mjs +0 -2
- package/esm2022/survey/lib/types/esolve-survey-type.type.mjs +0 -2
- package/esm2022/survey/lib/types/esolve-survey-values-question-type.type.mjs +0 -2
- package/esm2022/survey/lib/types/index.mjs +0 -7
|
@@ -1,703 +0,0 @@
|
|
|
1
|
-
import { Injectable, inject } from '@angular/core';
|
|
2
|
-
import { HttpClient, HttpParams, } from '@angular/common/http';
|
|
3
|
-
import { throwError, catchError, map } from 'rxjs';
|
|
4
|
-
import { EsolveConfigService } from '../core';
|
|
5
|
-
import { EsolveErrorHandlerService, EsolveResponseHandlerService, EsolveResult, EsolveFilterFactory, } from '../shared';
|
|
6
|
-
import { EsolveAuthService } from '../auth';
|
|
7
|
-
import { EsolveSessionService } from '../session';
|
|
8
|
-
import { EsolveCartTotals } from '../cart';
|
|
9
|
-
import { EsolveTransaction, EsolveTransactionList, } from '../transactions';
|
|
10
|
-
import { EsolveRegistrationResult, } from './registration';
|
|
11
|
-
import { EsolveAddress, EsolveAddressResult, EsolveSessionAddressUpdateResult, } from './address';
|
|
12
|
-
import { EsolveChangePasswordResult, EsolveResetPasswordResult, } from './password';
|
|
13
|
-
import { EsolveErpDocumentRequest, EsolveUserAccount, EsolveUserAccountResult, EsolveUserClientAccountBalances, EsolveErpDocumentsRequestResult, EsolveUserClientAccount, EsolveClientAsset, EsolveClientAssetList, } from './user-account';
|
|
14
|
-
import { EsolveAccountConfirmationResult, } from './confirmation';
|
|
15
|
-
import { EsolveLocationUpdateResult } from './location';
|
|
16
|
-
import { EsolveSessionShippingUpdateResult } from './esolve-session-shipping-update-result.model';
|
|
17
|
-
import { EsolveSessionClientUpdateResult } from './esolve-session-client-update-result.model';
|
|
18
|
-
import * as i0 from "@angular/core";
|
|
19
|
-
export class EsolveAccountService {
|
|
20
|
-
get user_id() {
|
|
21
|
-
return this._user_id;
|
|
22
|
-
}
|
|
23
|
-
set user_id(value) {
|
|
24
|
-
value = value > 0 ? value : 0;
|
|
25
|
-
if (this._user_id !== value) {
|
|
26
|
-
this._user_id = value;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
constructor() {
|
|
30
|
-
this.config = inject(EsolveConfigService);
|
|
31
|
-
this.http = inject(HttpClient);
|
|
32
|
-
this.sessionService = inject(EsolveSessionService);
|
|
33
|
-
this.errorHandler = inject(EsolveErrorHandlerService);
|
|
34
|
-
this.responseHandler = inject(EsolveResponseHandlerService);
|
|
35
|
-
this.authService = inject(EsolveAuthService);
|
|
36
|
-
this._user_id = 0;
|
|
37
|
-
this.sessionService.getSession().subscribe((session) => {
|
|
38
|
-
if (session.token !== '') {
|
|
39
|
-
this.user_id = session.user_id;
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
updateUserAccount(user_account_data) {
|
|
44
|
-
const body = {
|
|
45
|
-
account: user_account_data,
|
|
46
|
-
};
|
|
47
|
-
return this.http
|
|
48
|
-
.post(`${this.config.api_url}/set-user-account.php`, body, {
|
|
49
|
-
headers: {
|
|
50
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
51
|
-
},
|
|
52
|
-
responseType: 'json',
|
|
53
|
-
observe: 'body',
|
|
54
|
-
})
|
|
55
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response) => new EsolveUserAccountResult(response))), catchError((errorRes) => {
|
|
56
|
-
return this.errorHandler.handleHttpPostError('set-user-account', errorRes);
|
|
57
|
-
}));
|
|
58
|
-
}
|
|
59
|
-
getUserAccount() {
|
|
60
|
-
return this.http
|
|
61
|
-
.get(`${this.config.api_url}/get-account.php`)
|
|
62
|
-
.pipe(map((response) => {
|
|
63
|
-
if (response.records === undefined ||
|
|
64
|
-
response.records.length === 0) {
|
|
65
|
-
throw response;
|
|
66
|
-
}
|
|
67
|
-
const record = response.records[0];
|
|
68
|
-
return this.processUserAccount(record);
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
deleteUserAccount() {
|
|
72
|
-
return this.http
|
|
73
|
-
.delete(`${this.config.api_url}/delete-account.php`, {
|
|
74
|
-
responseType: 'json',
|
|
75
|
-
observe: 'body',
|
|
76
|
-
})
|
|
77
|
-
.pipe(map((http_response) => {
|
|
78
|
-
if (http_response.result === undefined ||
|
|
79
|
-
http_response.result === null ||
|
|
80
|
-
http_response.result.status !== 'success') {
|
|
81
|
-
throw http_response;
|
|
82
|
-
}
|
|
83
|
-
this.authService.handleExternalAuthentication(http_response.additional_data);
|
|
84
|
-
return new EsolveResult(http_response.result.status, http_response.result.code, http_response.result.message);
|
|
85
|
-
}), catchError((errorRes) => {
|
|
86
|
-
return this.errorHandler.handleHttpDeleteError('delete-account', errorRes);
|
|
87
|
-
}));
|
|
88
|
-
}
|
|
89
|
-
setAddress(address_post_data) {
|
|
90
|
-
const body = {
|
|
91
|
-
address: address_post_data,
|
|
92
|
-
};
|
|
93
|
-
return this.http
|
|
94
|
-
.post(`${this.config.api_url}/set-address.php`, body, {
|
|
95
|
-
headers: {
|
|
96
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
97
|
-
},
|
|
98
|
-
responseType: 'json',
|
|
99
|
-
observe: 'body',
|
|
100
|
-
})
|
|
101
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response) => new EsolveAddressResult(response))), catchError((errorRes) => {
|
|
102
|
-
return this.errorHandler.handleHttpPostError('set-address', errorRes);
|
|
103
|
-
}));
|
|
104
|
-
}
|
|
105
|
-
getAddresses() {
|
|
106
|
-
try {
|
|
107
|
-
this.loginGuard();
|
|
108
|
-
return this.http
|
|
109
|
-
.get(`${this.config.api_url}/get-addresses.php`, {
|
|
110
|
-
params: { user_id: this.user_id },
|
|
111
|
-
})
|
|
112
|
-
.pipe(map((response) => {
|
|
113
|
-
if (response.records === undefined) {
|
|
114
|
-
throw response;
|
|
115
|
-
}
|
|
116
|
-
return this.processUserAddress(response.records);
|
|
117
|
-
}));
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
return throwError(() => error);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
getClients() {
|
|
124
|
-
try {
|
|
125
|
-
this.loginGuard();
|
|
126
|
-
return this.http
|
|
127
|
-
.get(`${this.config.api_url}/get-user-clients.php`)
|
|
128
|
-
.pipe(map((response) => {
|
|
129
|
-
if (response.records === undefined) {
|
|
130
|
-
throw response;
|
|
131
|
-
}
|
|
132
|
-
return this.processUserClients(response.records);
|
|
133
|
-
}));
|
|
134
|
-
}
|
|
135
|
-
catch (error) {
|
|
136
|
-
return throwError(() => error);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
deleteAddress(id) {
|
|
140
|
-
return this.http
|
|
141
|
-
.delete(`${this.config.api_url}/delete-address.php`, {
|
|
142
|
-
params: { id },
|
|
143
|
-
responseType: 'json',
|
|
144
|
-
observe: 'body',
|
|
145
|
-
})
|
|
146
|
-
.pipe(map((http_response) => {
|
|
147
|
-
if (http_response.result === undefined ||
|
|
148
|
-
http_response.result === null ||
|
|
149
|
-
http_response.result.status !== 'success') {
|
|
150
|
-
throw http_response;
|
|
151
|
-
}
|
|
152
|
-
return new EsolveResult(http_response.result.status, http_response.result.code, http_response.result.message);
|
|
153
|
-
}), catchError((errorRes) => {
|
|
154
|
-
return this.errorHandler.handleHttpDeleteError('delete-address', errorRes);
|
|
155
|
-
}));
|
|
156
|
-
}
|
|
157
|
-
register(user_registration, guest = false) {
|
|
158
|
-
const body = {
|
|
159
|
-
user: user_registration,
|
|
160
|
-
guest_registration: guest,
|
|
161
|
-
};
|
|
162
|
-
return this.http
|
|
163
|
-
.post(`${this.config.api_url}/set-registration.php`, body, {
|
|
164
|
-
headers: {
|
|
165
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
166
|
-
},
|
|
167
|
-
responseType: 'json',
|
|
168
|
-
observe: 'body',
|
|
169
|
-
})
|
|
170
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response, additional_data) => {
|
|
171
|
-
if (response.auto_login) {
|
|
172
|
-
const session_data = response.session_data;
|
|
173
|
-
let token = '';
|
|
174
|
-
if (!Array.isArray(additional_data)) {
|
|
175
|
-
token = additional_data.key;
|
|
176
|
-
}
|
|
177
|
-
this.sessionService.handleUpdateSession({
|
|
178
|
-
user_id: +response.esolve_id,
|
|
179
|
-
location_id: +session_data.location_id,
|
|
180
|
-
addresses_id: +session_data.addresses_id,
|
|
181
|
-
shipping_id: +session_data.shipping_id,
|
|
182
|
-
clients_id: +session_data.clients_id,
|
|
183
|
-
token,
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
return new EsolveRegistrationResult(response);
|
|
187
|
-
})), catchError((errorRes) => {
|
|
188
|
-
return this.errorHandler.handleHttpPostError('set-registration', errorRes);
|
|
189
|
-
}));
|
|
190
|
-
}
|
|
191
|
-
changePassword(password, confirm_password) {
|
|
192
|
-
const body = {
|
|
193
|
-
password,
|
|
194
|
-
confirm_password,
|
|
195
|
-
};
|
|
196
|
-
return this.http
|
|
197
|
-
.post(`${this.config.api_url}/set-change-password.php`, body, {
|
|
198
|
-
headers: {
|
|
199
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
200
|
-
},
|
|
201
|
-
responseType: 'json',
|
|
202
|
-
observe: 'body',
|
|
203
|
-
})
|
|
204
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response) => {
|
|
205
|
-
return new EsolveChangePasswordResult(response);
|
|
206
|
-
})), catchError((errorRes) => {
|
|
207
|
-
return this.errorHandler.handleHttpPostError('set-change-password', errorRes);
|
|
208
|
-
}));
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Submits the users confirmation key to the relevant backend server in order to
|
|
212
|
-
* confirm the accounts validity. The key was emailed to the user hence if he received
|
|
213
|
-
* it and enters the value, the email account can be seen as valid.
|
|
214
|
-
*
|
|
215
|
-
* @param key The key that was emailed to the registered user's email account.
|
|
216
|
-
* @returns An `Observable` that contains the result of the account confirmation request.
|
|
217
|
-
*/
|
|
218
|
-
accountConfirmationRequest(key) {
|
|
219
|
-
const body = {
|
|
220
|
-
key,
|
|
221
|
-
};
|
|
222
|
-
return this.http
|
|
223
|
-
.post(`${this.config.api_url}/set-account-confirmation.php`, body, {
|
|
224
|
-
headers: {
|
|
225
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
226
|
-
},
|
|
227
|
-
responseType: 'json',
|
|
228
|
-
observe: 'body',
|
|
229
|
-
})
|
|
230
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response) => {
|
|
231
|
-
if (response.auto_login) {
|
|
232
|
-
this.sessionService.handleUpdateSession({
|
|
233
|
-
user_id: +response.esolve_id,
|
|
234
|
-
location_id: +response.location_id,
|
|
235
|
-
addresses_id: +response.addresses_id,
|
|
236
|
-
shipping_id: +response.shipping_id,
|
|
237
|
-
clients_id: +response.clients_id,
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
return new EsolveAccountConfirmationResult(response);
|
|
241
|
-
})), catchError((errorRes) => {
|
|
242
|
-
return this.errorHandler.handleHttpPostError('set-account-confirmation', errorRes);
|
|
243
|
-
}));
|
|
244
|
-
}
|
|
245
|
-
sendForgotPasswordRequest(email, captcha_options) {
|
|
246
|
-
let params = new HttpParams({
|
|
247
|
-
fromObject: {
|
|
248
|
-
email,
|
|
249
|
-
},
|
|
250
|
-
});
|
|
251
|
-
if (captcha_options) {
|
|
252
|
-
params = params.set('captcha_key', captcha_options.captcha_key);
|
|
253
|
-
params = params.set('captcha_code', captcha_options.captcha_code);
|
|
254
|
-
}
|
|
255
|
-
return this.http
|
|
256
|
-
.get(`${this.config.api_url}/get-forgot-password.php`, {
|
|
257
|
-
params,
|
|
258
|
-
})
|
|
259
|
-
.pipe(map((response) => {
|
|
260
|
-
if (response.records === undefined ||
|
|
261
|
-
!('reset_link_sent' in response.records)) {
|
|
262
|
-
throw response;
|
|
263
|
-
}
|
|
264
|
-
return response.records.reset_link_sent;
|
|
265
|
-
}));
|
|
266
|
-
}
|
|
267
|
-
resetPassword(reset_key, password, confirm_password, auto_login = true) {
|
|
268
|
-
return this.http
|
|
269
|
-
.post(`${this.config.api_url}/set-forgot-password.php`, {
|
|
270
|
-
reset_key,
|
|
271
|
-
password,
|
|
272
|
-
confirm_password,
|
|
273
|
-
auto_login,
|
|
274
|
-
}, {
|
|
275
|
-
headers: {
|
|
276
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
277
|
-
},
|
|
278
|
-
responseType: 'json',
|
|
279
|
-
observe: 'body',
|
|
280
|
-
})
|
|
281
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response) => {
|
|
282
|
-
if (!response.login_required) {
|
|
283
|
-
const session_data = response.session_data;
|
|
284
|
-
this.sessionService.handleUpdateSession({
|
|
285
|
-
user_id: +response.esolve_id,
|
|
286
|
-
location_id: +session_data.location_id,
|
|
287
|
-
addresses_id: +session_data.addresses_id,
|
|
288
|
-
shipping_id: +session_data.shipping_id,
|
|
289
|
-
clients_id: +session_data.clients_id,
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
return new EsolveResetPasswordResult(response);
|
|
293
|
-
})), catchError((errorRes) => {
|
|
294
|
-
return this.errorHandler.handleHttpPostError('set-forgot-password', errorRes);
|
|
295
|
-
}));
|
|
296
|
-
}
|
|
297
|
-
updateLocation(location_id) {
|
|
298
|
-
return this.updateUserLocation({ location_id });
|
|
299
|
-
}
|
|
300
|
-
updateLocationOnErp(erp) {
|
|
301
|
-
return this.updateUserLocation({ erp });
|
|
302
|
-
}
|
|
303
|
-
updateSessionClient(clients_id) {
|
|
304
|
-
return this.http
|
|
305
|
-
.post(`${this.config.api_url}/set-session-client.php`, {
|
|
306
|
-
clients_id,
|
|
307
|
-
}, {
|
|
308
|
-
headers: {
|
|
309
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
310
|
-
},
|
|
311
|
-
responseType: 'json',
|
|
312
|
-
observe: 'body',
|
|
313
|
-
})
|
|
314
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response) => {
|
|
315
|
-
if (typeof response.esolve_id === 'string') {
|
|
316
|
-
throw new Error('Invalid response id.');
|
|
317
|
-
}
|
|
318
|
-
this.sessionService.handleUpdateSession({
|
|
319
|
-
clients_id: +response.esolve_id,
|
|
320
|
-
});
|
|
321
|
-
return new EsolveSessionClientUpdateResult(response);
|
|
322
|
-
})));
|
|
323
|
-
}
|
|
324
|
-
updateSessionAddress(addresses_id) {
|
|
325
|
-
return this.http
|
|
326
|
-
.post(`${this.config.api_url}/set-session-address.php`, {
|
|
327
|
-
addresses_id,
|
|
328
|
-
}, {
|
|
329
|
-
headers: {
|
|
330
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
331
|
-
},
|
|
332
|
-
responseType: 'json',
|
|
333
|
-
observe: 'body',
|
|
334
|
-
})
|
|
335
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response) => {
|
|
336
|
-
if (typeof response.esolve_id === 'string') {
|
|
337
|
-
throw new Error('Invalid response id.');
|
|
338
|
-
}
|
|
339
|
-
this.sessionService.handleUpdateSession({
|
|
340
|
-
addresses_id: +response.esolve_id,
|
|
341
|
-
});
|
|
342
|
-
return new EsolveSessionAddressUpdateResult(response);
|
|
343
|
-
})));
|
|
344
|
-
}
|
|
345
|
-
updateSessionShipping(shipping_id) {
|
|
346
|
-
return this.http
|
|
347
|
-
.post(`${this.config.api_url}/set-session-shipping.php`, {
|
|
348
|
-
shipping_id,
|
|
349
|
-
}, {
|
|
350
|
-
headers: {
|
|
351
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
352
|
-
},
|
|
353
|
-
responseType: 'json',
|
|
354
|
-
observe: 'body',
|
|
355
|
-
})
|
|
356
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response) => {
|
|
357
|
-
if (typeof response.esolve_id === 'string') {
|
|
358
|
-
throw new Error('Invalid response id.');
|
|
359
|
-
}
|
|
360
|
-
this.sessionService.handleUpdateSession({
|
|
361
|
-
shipping_id: +response.esolve_id,
|
|
362
|
-
});
|
|
363
|
-
return new EsolveSessionShippingUpdateResult(response);
|
|
364
|
-
})));
|
|
365
|
-
}
|
|
366
|
-
/**
|
|
367
|
-
* @deprecated Use EsolveTransactionsService for future transaction requests
|
|
368
|
-
*/
|
|
369
|
-
getTransactions(options = {}) {
|
|
370
|
-
try {
|
|
371
|
-
this.loginGuard();
|
|
372
|
-
let params = new HttpParams();
|
|
373
|
-
params = params.set('user_id', this.user_id);
|
|
374
|
-
if (options.type) {
|
|
375
|
-
params = params.set('type', options.type);
|
|
376
|
-
}
|
|
377
|
-
if (options.page) {
|
|
378
|
-
params = params.set('page', options.page);
|
|
379
|
-
}
|
|
380
|
-
if (options.rows) {
|
|
381
|
-
params = params.set('rows', options.rows);
|
|
382
|
-
}
|
|
383
|
-
if (options.from_date) {
|
|
384
|
-
params = params.set('from_date', options.from_date);
|
|
385
|
-
}
|
|
386
|
-
if (options.to_date) {
|
|
387
|
-
params = params.set('to_date', options.to_date);
|
|
388
|
-
}
|
|
389
|
-
if (options.filters) {
|
|
390
|
-
let filters = options.filters;
|
|
391
|
-
if (!Array.isArray(filters)) {
|
|
392
|
-
filters = EsolveFilterFactory.covertFromObj(filters);
|
|
393
|
-
}
|
|
394
|
-
params = EsolveFilterFactory.convertToHttpParams(filters, params);
|
|
395
|
-
}
|
|
396
|
-
return this.http
|
|
397
|
-
.get(`${this.config.api_url}/get-transactions.php`, {
|
|
398
|
-
params,
|
|
399
|
-
})
|
|
400
|
-
.pipe(map((response) => {
|
|
401
|
-
if (response.records === undefined) {
|
|
402
|
-
throw response;
|
|
403
|
-
}
|
|
404
|
-
const items = this.processTransactions(response.records);
|
|
405
|
-
const total = +(response.additional_data.total_records ?? 0);
|
|
406
|
-
const rows = options.rows ?? total;
|
|
407
|
-
const page = options.page || 1;
|
|
408
|
-
return new EsolveTransactionList(items, page, rows, total);
|
|
409
|
-
}));
|
|
410
|
-
}
|
|
411
|
-
catch (error) {
|
|
412
|
-
return throwError(() => error);
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* @deprecated Use EsolveTransactionsService for future transaction requests
|
|
417
|
-
*/
|
|
418
|
-
getTransaction(id) {
|
|
419
|
-
try {
|
|
420
|
-
this.loginGuard();
|
|
421
|
-
return this.http
|
|
422
|
-
.get(`${this.config.api_url}/get-transactions.php`, {
|
|
423
|
-
params: {
|
|
424
|
-
user_id: this.user_id,
|
|
425
|
-
transaction_id: id,
|
|
426
|
-
},
|
|
427
|
-
})
|
|
428
|
-
.pipe(map((response) => {
|
|
429
|
-
if (response.records === undefined ||
|
|
430
|
-
response.records.length <= 0) {
|
|
431
|
-
throw response;
|
|
432
|
-
}
|
|
433
|
-
const items = this.processTransactions(response.records);
|
|
434
|
-
return items[0];
|
|
435
|
-
}));
|
|
436
|
-
}
|
|
437
|
-
catch (error) {
|
|
438
|
-
return throwError(() => error);
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
getClientAccountBalances() {
|
|
442
|
-
try {
|
|
443
|
-
this.loginGuard();
|
|
444
|
-
return this.http
|
|
445
|
-
.get(`${this.config.api_url}/get-client-account-balances.php`)
|
|
446
|
-
.pipe(map((response) => {
|
|
447
|
-
if (response.records === undefined) {
|
|
448
|
-
throw response;
|
|
449
|
-
}
|
|
450
|
-
return this.processClientBalances(response.records);
|
|
451
|
-
}));
|
|
452
|
-
}
|
|
453
|
-
catch (error) {
|
|
454
|
-
return throwError(() => error);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
generateStatementDownloadLink(clients_id) {
|
|
458
|
-
try {
|
|
459
|
-
this.loginGuard();
|
|
460
|
-
if (clients_id <= 0) {
|
|
461
|
-
return '';
|
|
462
|
-
}
|
|
463
|
-
const base_url = `${this.config.api_url}/get-generated-pdf.php`;
|
|
464
|
-
const queries = [
|
|
465
|
-
{
|
|
466
|
-
key: 'ws_id',
|
|
467
|
-
value: this.config.wsid,
|
|
468
|
-
},
|
|
469
|
-
{
|
|
470
|
-
key: 'clients_id',
|
|
471
|
-
value: clients_id,
|
|
472
|
-
},
|
|
473
|
-
{
|
|
474
|
-
key: 'key',
|
|
475
|
-
value: this.sessionService.getToken(),
|
|
476
|
-
},
|
|
477
|
-
];
|
|
478
|
-
const query_string = queries
|
|
479
|
-
.map((query) => `${query.key}=${query.value}`)
|
|
480
|
-
.join('&');
|
|
481
|
-
return `${base_url}?${query_string}`;
|
|
482
|
-
}
|
|
483
|
-
catch (error) {
|
|
484
|
-
console.error(error);
|
|
485
|
-
return '';
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
generateClientAssetDownloadLink(clients_id, document_number, modified_date) {
|
|
489
|
-
try {
|
|
490
|
-
this.loginGuard();
|
|
491
|
-
if (clients_id <= 0) {
|
|
492
|
-
return '';
|
|
493
|
-
}
|
|
494
|
-
const base_url = `${this.config.api_url}/get-client-asset-download.php`;
|
|
495
|
-
const queries = [
|
|
496
|
-
{
|
|
497
|
-
key: 'ws_id',
|
|
498
|
-
value: this.config.wsid,
|
|
499
|
-
},
|
|
500
|
-
{
|
|
501
|
-
key: 'key',
|
|
502
|
-
value: this.sessionService.getToken(),
|
|
503
|
-
},
|
|
504
|
-
{
|
|
505
|
-
key: 'clients_id',
|
|
506
|
-
value: clients_id,
|
|
507
|
-
},
|
|
508
|
-
{
|
|
509
|
-
key: 'document_number',
|
|
510
|
-
value: document_number,
|
|
511
|
-
},
|
|
512
|
-
{
|
|
513
|
-
key: 'date',
|
|
514
|
-
value: modified_date,
|
|
515
|
-
},
|
|
516
|
-
];
|
|
517
|
-
const query_string = queries
|
|
518
|
-
.map((query) => `${query.key}=${query.value}`)
|
|
519
|
-
.join('&');
|
|
520
|
-
return `${base_url}?${query_string}`;
|
|
521
|
-
}
|
|
522
|
-
catch (error) {
|
|
523
|
-
console.error(error);
|
|
524
|
-
return '';
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
requestErpDocuments(requested_documents) {
|
|
528
|
-
const body = {
|
|
529
|
-
requested_documents,
|
|
530
|
-
};
|
|
531
|
-
return this.http
|
|
532
|
-
.post(`${this.config.api_url}/set-request-erp-document.php`, body, {
|
|
533
|
-
headers: {
|
|
534
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
535
|
-
},
|
|
536
|
-
responseType: 'json',
|
|
537
|
-
observe: 'body',
|
|
538
|
-
})
|
|
539
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response) => new EsolveErpDocumentsRequestResult(response))), catchError((errorRes) => {
|
|
540
|
-
return this.errorHandler.handleHttpPostError('set-request-erp-document', errorRes);
|
|
541
|
-
}));
|
|
542
|
-
}
|
|
543
|
-
getErpDocumentRequests(clients_id, type = 'invoice') {
|
|
544
|
-
try {
|
|
545
|
-
this.loginGuard();
|
|
546
|
-
let params = new HttpParams();
|
|
547
|
-
params = params.set('clients_id', clients_id);
|
|
548
|
-
params = params.set('type', type);
|
|
549
|
-
return this.http
|
|
550
|
-
.get(`${this.config.api_url}/get-erp-document-request.php`, {
|
|
551
|
-
params,
|
|
552
|
-
})
|
|
553
|
-
.pipe(map((response) => {
|
|
554
|
-
if (response.records === undefined) {
|
|
555
|
-
throw response;
|
|
556
|
-
}
|
|
557
|
-
return this.processErpDocumentRequest(response.records);
|
|
558
|
-
}));
|
|
559
|
-
}
|
|
560
|
-
catch (error) {
|
|
561
|
-
return throwError(() => error);
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
getClientAssets(options) {
|
|
565
|
-
try {
|
|
566
|
-
this.loginGuard();
|
|
567
|
-
let params = new HttpParams();
|
|
568
|
-
params = params.set('clients_id', options.clients_id ?? 0);
|
|
569
|
-
params = params.set('asset_type', options.asset_type ?? 'quote');
|
|
570
|
-
if (options.page) {
|
|
571
|
-
params = params.set('page', options.page);
|
|
572
|
-
}
|
|
573
|
-
if (options.rows) {
|
|
574
|
-
params = params.set('rows', options.rows);
|
|
575
|
-
}
|
|
576
|
-
if (options.sort) {
|
|
577
|
-
const sort = options.sort;
|
|
578
|
-
if (sort.field) {
|
|
579
|
-
params = params = params.set('sort', sort.field);
|
|
580
|
-
}
|
|
581
|
-
if (sort.order) {
|
|
582
|
-
params = params.set('order', sort.order);
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
return this.http
|
|
586
|
-
.get(`${this.config.api_url}/get-client-assets.php`, {
|
|
587
|
-
params,
|
|
588
|
-
})
|
|
589
|
-
.pipe(map((response) => {
|
|
590
|
-
if (response.records === undefined) {
|
|
591
|
-
throw response;
|
|
592
|
-
}
|
|
593
|
-
const items = this.processClientAssets(response.records);
|
|
594
|
-
const total = +(response.additional_data.total_records ?? 0);
|
|
595
|
-
const rows = options.rows ?? total;
|
|
596
|
-
const page = options.page || 1;
|
|
597
|
-
return new EsolveClientAssetList(items, page, rows, total);
|
|
598
|
-
}));
|
|
599
|
-
}
|
|
600
|
-
catch (error) {
|
|
601
|
-
return throwError(() => error);
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
processUserAccount(record) {
|
|
605
|
-
if (!record) {
|
|
606
|
-
throw new Error('Invalid record');
|
|
607
|
-
}
|
|
608
|
-
if (+record.userid !== this._user_id) {
|
|
609
|
-
throw new Error('Invalid user account retrieved');
|
|
610
|
-
}
|
|
611
|
-
return new EsolveUserAccount(record);
|
|
612
|
-
}
|
|
613
|
-
processUserAddress(records) {
|
|
614
|
-
const user_addresses = [];
|
|
615
|
-
if (!records || this._user_id === 0) {
|
|
616
|
-
return user_addresses;
|
|
617
|
-
}
|
|
618
|
-
for (const record of records) {
|
|
619
|
-
if (+record.userid !== this._user_id) {
|
|
620
|
-
continue;
|
|
621
|
-
}
|
|
622
|
-
user_addresses.push(new EsolveAddress(record));
|
|
623
|
-
}
|
|
624
|
-
return user_addresses;
|
|
625
|
-
}
|
|
626
|
-
processUserClients(records) {
|
|
627
|
-
const user_clients = [];
|
|
628
|
-
if (!records || this._user_id === 0) {
|
|
629
|
-
return user_clients;
|
|
630
|
-
}
|
|
631
|
-
for (const record of records) {
|
|
632
|
-
user_clients.push(new EsolveUserClientAccount(record));
|
|
633
|
-
}
|
|
634
|
-
return user_clients;
|
|
635
|
-
}
|
|
636
|
-
processTransactions(records) {
|
|
637
|
-
const transactions = [];
|
|
638
|
-
if (records) {
|
|
639
|
-
for (const record of records) {
|
|
640
|
-
const transaction = new EsolveTransaction(record);
|
|
641
|
-
transactions.push(transaction);
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
return transactions;
|
|
645
|
-
}
|
|
646
|
-
processClientBalances(records) {
|
|
647
|
-
for (const record of records) {
|
|
648
|
-
if (+record.clients_id <= 0) {
|
|
649
|
-
return undefined;
|
|
650
|
-
}
|
|
651
|
-
const cart_totals = new EsolveCartTotals(record.cart_totals);
|
|
652
|
-
return new EsolveUserClientAccountBalances(+record.clients_id, record.account, cart_totals, +record.credit_limit, +record.external_account_balance, +record.external_available_balance, +record.new_external_available_balance, !!+record.credit_limit_okay);
|
|
653
|
-
}
|
|
654
|
-
return undefined;
|
|
655
|
-
}
|
|
656
|
-
loginGuard() {
|
|
657
|
-
if (this.user_id <= 0) {
|
|
658
|
-
this.errorHandler.throwError('login_required', 'Login is required');
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
updateUserLocation(body) {
|
|
662
|
-
return this.http
|
|
663
|
-
.post(`${this.config.api_url}/set-session-location.php`, body, {
|
|
664
|
-
headers: {
|
|
665
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
|
|
666
|
-
},
|
|
667
|
-
responseType: 'json',
|
|
668
|
-
observe: 'body',
|
|
669
|
-
})
|
|
670
|
-
.pipe(map((http_response) => this.responseHandler.validateSingleHttpResponse(http_response, (response) => {
|
|
671
|
-
if (typeof response.esolve_id === 'string') {
|
|
672
|
-
throw new Error('Invalid response id.');
|
|
673
|
-
}
|
|
674
|
-
this.sessionService.handleUpdateSession({
|
|
675
|
-
location_id: +response.esolve_id,
|
|
676
|
-
});
|
|
677
|
-
return new EsolveLocationUpdateResult(response);
|
|
678
|
-
})));
|
|
679
|
-
}
|
|
680
|
-
processErpDocumentRequest(records) {
|
|
681
|
-
const requests = [];
|
|
682
|
-
for (const record of records) {
|
|
683
|
-
requests.push(new EsolveErpDocumentRequest(record));
|
|
684
|
-
}
|
|
685
|
-
return requests;
|
|
686
|
-
}
|
|
687
|
-
processClientAssets(records) {
|
|
688
|
-
const assets = [];
|
|
689
|
-
for (const record of records) {
|
|
690
|
-
assets.push(new EsolveClientAsset(record));
|
|
691
|
-
}
|
|
692
|
-
return assets;
|
|
693
|
-
}
|
|
694
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveAccountService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
695
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveAccountService, providedIn: 'root' }); }
|
|
696
|
-
}
|
|
697
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveAccountService, decorators: [{
|
|
698
|
-
type: Injectable,
|
|
699
|
-
args: [{
|
|
700
|
-
providedIn: 'root',
|
|
701
|
-
}]
|
|
702
|
-
}], ctorParameters: () => [] });
|
|
703
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWFjY291bnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmctZXNvbHZlLWNvbm5lY3Qvc3JjL2xpYi9hY2NvdW50L2Vzb2x2ZS1hY2NvdW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNILFVBQVUsRUFFVixVQUFVLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWMsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlDLE9BQU8sRUFDSCx5QkFBeUIsRUFDekIsNEJBQTRCLEVBRzVCLFlBQVksRUFFWixtQkFBbUIsR0FDdEIsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzNDLE9BQU8sRUFFSCxpQkFBaUIsRUFFakIscUJBQXFCLEdBQ3hCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUdILHdCQUF3QixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDSCxhQUFhLEVBRWIsbUJBQW1CLEVBR25CLGdDQUFnQyxHQUNuQyxNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0gsMEJBQTBCLEVBQzFCLHlCQUF5QixHQUc1QixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQ0gsd0JBQXdCLEVBRXhCLGlCQUFpQixFQUdqQix1QkFBdUIsRUFDdkIsK0JBQStCLEVBRS9CLCtC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Q0FBQyxTQUFTO2FBQ25DLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQ0osQ0FDSixDQUNKLENBQUM7SUFDVixDQUFDO0lBRU8seUJBQXlCLENBQzdCLE9BQXlDO1FBRXpDLE1BQU0sUUFBUSxHQUErQixFQUFFLENBQUM7UUFFaEQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLG1CQUFtQixDQUN2QixPQUFrQztRQUVsQyxNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO1FBRXZDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7OEdBcm5DUSxvQkFBb0I7a0hBQXBCLG9CQUFvQixjQUZqQixNQUFNOzsyRkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEh0dHBDbGllbnQsXG4gICAgSHR0cEVycm9yUmVzcG9uc2UsXG4gICAgSHR0cFBhcmFtcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRXNvbHZlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBFc29sdmVFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgIEVzb2x2ZVJlc3BvbnNlSGFuZGxlclNlcnZpY2UsXG4gICAgRXNvbHZlU2V0UmVzcG9uc2UsXG4gICAgRXNvbHZlR2V0UmVzcG9uc2UsXG4gICAgRXNvbHZlUmVzdWx0LFxuICAgIEVzb2x2ZURlbGV0ZVJlc3BvbnNlLFxuICAgIEVzb2x2ZUZpbHRlckZhY3RvcnksXG59IGZyb20gJy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBFc29sdmVBdXRoUmVzdWx0LCBFc29sdmVBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGgnO1xuaW1wb3J0IHsgRXNvbHZlU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uJztcbmltcG9ydCB7IEVzb2x2ZUNhcnRUb3RhbHMgfSBmcm9tICcuLi9jYXJ0JztcbmltcG9ydCB7XG4gICAgRXNvbHZlVHJhbnNhY3Rpb25SZWNvcmQsXG4gICAgRXNvbHZlVHJhbnNhY3Rpb24sXG4gICAgRXNvbHZlVHJhbnNhY3Rpb25PcHRpb25zLFxuICAgIEVzb2x2ZVRyYW5zYWN0aW9uTGlzdCxcbn0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7XG4gICAgRXNvbHZlUmVnaXN0cmF0aW9uUG9zdFJlc3BvbnNlSXRlbSxcbiAgICBFc29sdmVSZWdpc3RyYXRpb25EYXRhLFxuICAgIEVzb2x2ZVJlZ2lzdHJhdGlvblJlc3VsdCxcbn0gZnJvbSAnLi9yZWdpc3RyYXRpb24nO1xuaW1wb3J0IHtcbiAgICBFc29sdmVBZGRyZXNzLFxuICAgIEVzb2x2ZUFkZHJlc3NSZWNvcmQsXG4gICAgRXNvbHZlQWRkcmVzc1Jlc3VsdCxcbiAgICBFc29sdmVBZGRyZXNzUG9zdERhdGEsXG4gICAgRXNvbHZlQWRkcmVzc1Jlc3BvbnNlLFxuICAgIEVzb2x2ZVNlc3Npb25BZGRyZXNzVXBkYXRlUmVzdWx0LFxufSBmcm9tICcuL2FkZHJlc3MnO1xuaW1wb3J0IHtcbiAgICBFc29sdmVDaGFuZ2VQYXNzd29yZFJlc3VsdCxcbiAgICBFc29sdmVSZXNldFBhc3N3b3JkUmVzdWx0LFxuICAgIEVzb2x2ZUZvcmdvdFBhc3N3b3JkUmVzcG9uc2UsXG4gICAgRXNvbHZlRm9yZ290UGFzc3dvcmRHZXRSZXN1bHQsXG59IGZyb20gJy4vcGFzc3dvcmQnO1xuaW1wb3J0IHtcbiAgICBFc29sdmVFcnBEb2N1bWVudFJlcXVlc3QsXG4gICAgRXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0UmVjb3JkLFxuICAgIEVzb2x2ZVVzZXJBY2NvdW50LFxuICAgIEVzb2x2ZVVzZXJBY2NvdW50RGF0YSxcbiAgICBFc29sdmVVc2VyQWNjb3VudFJlY29yZCxcbiAgICBFc29sdmVVc2VyQWNjb3VudFJlc3VsdCxcbiAgICBFc29sdmVVc2VyQ2xpZW50QWNjb3VudEJhbGFuY2VzLFxuICAgIEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50QmFsYW5jZXNSZWNvcmQsXG4gICAgRXNvbHZlRXJwRG9jdW1lbnRzUmVxdWVzdFJlc3VsdCxcbiAgICBFc29sdmVVc2VyQ2xpZW50QWNjb3VudCxcbiAgICBFc29sdmVVc2VyQ2xpZW50QWNjb3VudFJlY29yZCxcbiAgICBFc29sdmVDbGllbnRBc3NldFJlY29yZCxcbiAgICBFc29sdmVDbGllbnRBc3NldCxcbiAgICBFc29sdmVDbGllbnRBc3NldHNPcHRpb25zLFxuICAgIEVzb2x2ZUNsaWVudEFzc2V0TGlzdCxcbn0gZnJvbSAnLi91c2VyLWFjY291bnQnO1xuaW1wb3J0IHtcbiAgICBFc29sdmVBY2NvdW50Q29uZmlybWF0aW9uUG9zdFJlc3BvbnNlSXRlbSxcbiAgICBFc29sdmVBY2NvdW50Q29uZmlybWF0aW9uUmVzdWx0LFxufSBmcm9tICcuL2NvbmZpcm1hdGlvbic7XG5pbXBvcnQgeyBFc29sdmVMb2NhdGlvbk9wdGlvbiwgRXNvbHZlTG9jYXRpb25VcGRhdGVSZXN1bHQgfSBmcm9tICcuL2xvY2F0aW9uJztcbmltcG9ydCB7IEVzb2x2ZUNhcHRjaGFPcHRpb25zIH0gZnJvbSAnLi4vY2FwdGNoYSc7XG5cbmltcG9ydCB7IEVzb2x2ZVNlc3Npb25TaGlwcGluZ1VwZGF0ZVJlc3VsdCB9IGZyb20gJy4vZXNvbHZlLXNlc3Npb24tc2hpcHBpbmctdXBkYXRlLXJlc3VsdC5tb2RlbCc7XG5pbXBvcnQgeyBFc29sdmVTZXNzaW9uQ2xpZW50VXBkYXRlUmVzdWx0IH0gZnJvbSAnLi9lc29sdmUtc2Vzc2lvbi1jbGllbnQtdXBkYXRlLXJlc3VsdC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVzb2x2ZUFjY291bnRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChFc29sdmVDb25maWdTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChFc29sdmVTZXNzaW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvckhhbmRsZXIgPSBpbmplY3QoRXNvbHZlRXJyb3JIYW5kbGVyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNwb25zZUhhbmRsZXIgPSBpbmplY3QoRXNvbHZlUmVzcG9uc2VIYW5kbGVyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChFc29sdmVBdXRoU2VydmljZSk7XG5cbiAgICBwcml2YXRlIF91c2VyX2lkID0gMDtcblxuICAgIHB1YmxpYyBnZXQgdXNlcl9pZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlcl9pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHVzZXJfaWQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID4gMCA/IHZhbHVlIDogMDtcblxuICAgICAgICBpZiAodGhpcy5fdXNlcl9pZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJfaWQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFNlc3Npb24oKS5zdWJzY3JpYmUoKHNlc3Npb24pID0+IHtcbiAgICAgICAgICAgIGlmIChzZXNzaW9uLnRva2VuICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlcl9pZCA9IHNlc3Npb24udXNlcl9pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVVzZXJBY2NvdW50KFxuICAgICAgICB1c2VyX2FjY291bnRfZGF0YTogRXNvbHZlVXNlckFjY291bnREYXRhLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlVXNlckFjY291bnRSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGFjY291bnQ6IHVzZXJfYWNjb3VudF9kYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtdXNlci1hY2NvdW50LnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4gbmV3IEVzb2x2ZVVzZXJBY2NvdW50UmVzdWx0KHJlc3BvbnNlKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtdXNlci1hY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VXNlckFjY291bnQoKTogT2JzZXJ2YWJsZTxFc29sdmVVc2VyQWNjb3VudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0PFxuICAgICAgICAgICAgICAgIEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZVVzZXJBY2NvdW50UmVjb3JkW10+XG4gICAgICAgICAgICA+KGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1hY2NvdW50LnBocGApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHJlc3BvbnNlLnJlY29yZHNbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1VzZXJBY2NvdW50KHJlY29yZCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVVc2VyQWNjb3VudCgpOiBPYnNlcnZhYmxlPEVzb2x2ZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZGVsZXRlPEVzb2x2ZURlbGV0ZVJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9kZWxldGUtYWNjb3VudC5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChodHRwX3Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0ID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLnJlc3VsdC5zdGF0dXMgIT09ICdzdWNjZXNzJ1xuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGh0dHBfcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmhhbmRsZUV4dGVybmFsQXV0aGVudGljYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLmFkZGl0aW9uYWxfZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVJlc3VsdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLnJlc3VsdC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cERlbGV0ZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZS1hY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWRkcmVzcyhcbiAgICAgICAgYWRkcmVzc19wb3N0X2RhdGE6IEVzb2x2ZUFkZHJlc3NQb3N0RGF0YSxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUFkZHJlc3NSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NfcG9zdF9kYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPEVzb2x2ZUFkZHJlc3NSZXNwb25zZT4+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L3NldC1hZGRyZXNzLnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4gbmV3IEVzb2x2ZUFkZHJlc3NSZXN1bHQocmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlIHwgYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVIdHRwUG9zdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NldC1hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWRkcmVzc2VzKCk6IE9ic2VydmFibGU8RXNvbHZlQWRkcmVzc1tdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlQWRkcmVzc1JlY29yZFtdPj4oXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1hZGRyZXNzZXMucGhwYCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IHVzZXJfaWQ6IHRoaXMudXNlcl9pZCB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVXNlckFkZHJlc3MocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2xpZW50cygpOiBPYnNlcnZhYmxlPEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50W10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9naW5HdWFyZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAgICAgLmdldDxcbiAgICAgICAgICAgICAgICAgICAgRXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlVXNlckNsaWVudEFjY291bnRSZWNvcmRbXT5cbiAgICAgICAgICAgICAgICA+KGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC11c2VyLWNsaWVudHMucGhwYClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVXNlckNsaWVudHMocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlQWRkcmVzcyhpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFc29sdmVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLmRlbGV0ZTxFc29sdmVEZWxldGVSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZGVsZXRlLWFkZHJlc3MucGhwYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBpZCB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQgPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0LnN0YXR1cyAhPT0gJ3N1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgaHR0cF9yZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlIHwgYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVIdHRwRGVsZXRlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRlLWFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXMsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlcihcbiAgICAgICAgdXNlcl9yZWdpc3RyYXRpb246IEVzb2x2ZVJlZ2lzdHJhdGlvbkRhdGEsXG4gICAgICAgIGd1ZXN0ID0gZmFsc2UsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVSZWdpc3RyYXRpb25SZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIHVzZXI6IHVzZXJfcmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgZ3Vlc3RfcmVnaXN0cmF0aW9uOiBndWVzdCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdDxcbiAgICAgICAgICAgICAgICBFc29sdmVTZXRSZXNwb25zZTxcbiAgICAgICAgICAgICAgICAgICAgRXNvbHZlUmVnaXN0cmF0aW9uUG9zdFJlc3BvbnNlSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgRXNvbHZlQXV0aFJlc3VsdFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgID4oYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LXJlZ2lzdHJhdGlvbi5waHBgLCBib2R5LCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaHR0cF9yZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZUhhbmRsZXIudmFsaWRhdGVTaW5nbGVIdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlLCBhZGRpdGlvbmFsX2RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYXV0b19sb2dpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uX2RhdGEgPSByZXNwb25zZS5zZXNzaW9uX2RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhZGRpdGlvbmFsX2RhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGFkZGl0aW9uYWxfZGF0YS5rZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmhhbmRsZVVwZGF0ZVNlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9pZDogK3Jlc3BvbnNlLmVzb2x2ZV9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiArc2Vzc2lvbl9kYXRhLmxvY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzX2lkOiArc2Vzc2lvbl9kYXRhLmFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkOiArc2Vzc2lvbl9kYXRhLnNoaXBwaW5nX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50c19pZDogK3Nlc3Npb25fZGF0YS5jbGllbnRzX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlUmVnaXN0cmF0aW9uUmVzdWx0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UgfCBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUh0dHBQb3N0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2V0LXJlZ2lzdHJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvclJlcyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZVBhc3N3b3JkKFxuICAgICAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgICAgICBjb25maXJtX3Bhc3N3b3JkOiBzdHJpbmcsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVDaGFuZ2VQYXNzd29yZFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgICBjb25maXJtX3Bhc3N3b3JkLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtY2hhbmdlLXBhc3N3b3JkLnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlQ2hhbmdlUGFzc3dvcmRSZXN1bHQocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtY2hhbmdlLXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdWJtaXRzIHRoZSB1c2VycyBjb25maXJtYXRpb24ga2V5IHRvIHRoZSByZWxldmFudCBiYWNrZW5kIHNlcnZlciBpbiBvcmRlciB0b1xuICAgICAqIGNvbmZpcm0gdGhlIGFjY291bnRzIHZhbGlkaXR5LiBUaGUga2V5IHdhcyBlbWFpbGVkIHRvIHRoZSB1c2VyIGhlbmNlIGlmIGhlIHJlY2VpdmVkXG4gICAgICogaXQgYW5kIGVudGVycyB0aGUgdmFsdWUsIHRoZSBlbWFpbCBhY2NvdW50IGNhbiBiZSBzZWVuIGFzIHZhbGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRoYXQgd2FzIGVtYWlsZWQgdG8gdGhlIHJlZ2lzdGVyZWQgdXNlcidzIGVtYWlsIGFjY291bnQuXG4gICAgICogQHJldHVybnMgQW4gYE9ic2VydmFibGVgIHRoYXQgY29udGFpbnMgdGhlIHJlc3VsdCBvZiB0aGUgYWNjb3VudCBjb25maXJtYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWNjb3VudENvbmZpcm1hdGlvblJlcXVlc3QoXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlQWNjb3VudENvbmZpcm1hdGlvblJlc3VsdD4ge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPEVzb2x2ZUFjY291bnRDb25maXJtYXRpb25Qb3N0UmVzcG9uc2VJdGVtPj4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LWFjY291bnQtY29uZmlybWF0aW9uLnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5hdXRvX2xvZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UuaGFuZGxlVXBkYXRlU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkOiArcmVzcG9uc2UuZXNvbHZlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25faWQ6ICtyZXNwb25zZS5sb2NhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Nlc19pZDogK3Jlc3BvbnNlLmFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkOiArcmVzcG9uc2Uuc2hpcHBpbmdfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRzX2lkOiArcmVzcG9uc2UuY2xpZW50c19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVBY2NvdW50Q29uZmlybWF0aW9uUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtYWNjb3VudC1jb25maXJtYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXMsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZW5kRm9yZ290UGFzc3dvcmRSZXF1ZXN0KFxuICAgICAgICBlbWFpbDogc3RyaW5nLFxuICAgICAgICBjYXB0Y2hhX29wdGlvbnM/OiBFc29sdmVDYXB0Y2hhT3B0aW9ucyxcbiAgICApOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHtcbiAgICAgICAgICAgIGZyb21PYmplY3Q6IHtcbiAgICAgICAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjYXB0Y2hhX29wdGlvbnMpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NhcHRjaGFfa2V5JywgY2FwdGNoYV9vcHRpb25zLmNhcHRjaGFfa2V5KTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NhcHRjaGFfY29kZScsIGNhcHRjaGFfb3B0aW9ucy5jYXB0Y2hhX2NvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLmdldDxFc29sdmVHZXRSZXNwb25zZTxFc29sdmVGb3Jnb3RQYXNzd29yZEdldFJlc3VsdD4+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1mb3Jnb3QtcGFzc3dvcmQucGhwYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWNvcmRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICEoJ3Jlc2V0X2xpbmtfc2VudCcgaW4gcmVzcG9uc2UucmVjb3JkcylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5yZWNvcmRzLnJlc2V0X2xpbmtfc2VudDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0UGFzc3dvcmQoXG4gICAgICAgIHJlc2V0X2tleTogc3RyaW5nLFxuICAgICAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgICAgICBjb25maXJtX3Bhc3N3b3JkOiBzdHJpbmcsXG4gICAgICAgIGF1dG9fbG9naW4gPSB0cnVlLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlUmVzZXRQYXNzd29yZFJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdDxFc29sdmVTZXRSZXNwb25zZTxFc29sdmVGb3Jnb3RQYXNzd29yZFJlc3BvbnNlPj4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LWZvcmdvdC1wYXNzd29yZC5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRfa2V5LFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybV9wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgYXV0b19sb2dpbixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04OycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlOiAnYm9keScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaHR0cF9yZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZUhhbmRsZXIudmFsaWRhdGVTaW5nbGVIdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5sb2dpbl9yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uX2RhdGEgPSByZXNwb25zZS5zZXNzaW9uX2RhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5oYW5kbGVVcGRhdGVTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfaWQ6ICtyZXNwb25zZS5lc29sdmVfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl9pZDogK3Nlc3Npb25fZGF0YS5sb2NhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Nlc19pZDogK3Nlc3Npb25fZGF0YS5hZGRyZXNzZXNfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlwcGluZ19pZDogK3Nlc3Npb25fZGF0YS5zaGlwcGluZ19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudHNfaWQ6ICtzZXNzaW9uX2RhdGEuY2xpZW50c19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVSZXNldFBhc3N3b3JkUmVzdWx0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UgfCBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUh0dHBQb3N0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2V0LWZvcmdvdC1wYXNzd29yZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvclJlcyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUxvY2F0aW9uKFxuICAgICAgICBsb2NhdGlvbl9pZDogbnVtYmVyLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlTG9jYXRpb25VcGRhdGVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlVXNlckxvY2F0aW9uKHsgbG9jYXRpb25faWQgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUxvY2F0aW9uT25FcnAoXG4gICAgICAgIGVycDogc3RyaW5nLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlTG9jYXRpb25VcGRhdGVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlVXNlckxvY2F0aW9uKHsgZXJwIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTZXNzaW9uQ2xpZW50KFxuICAgICAgICBjbGllbnRzX2lkOiBudW1iZXIsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVTZXNzaW9uQ2xpZW50VXBkYXRlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtc2Vzc2lvbi1jbGllbnQucGhwYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWVudHNfaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuZXNvbHZlX2lkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVzcG9uc2UgaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5oYW5kbGVVcGRhdGVTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50c19pZDogK3Jlc3BvbnNlLmVzb2x2ZV9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlU2Vzc2lvbkNsaWVudFVwZGF0ZVJlc3VsdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVNlc3Npb25BZGRyZXNzKFxuICAgICAgICBhZGRyZXNzZXNfaWQ6IG51bWJlcixcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZVNlc3Npb25BZGRyZXNzVXBkYXRlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtc2Vzc2lvbi1hZGRyZXNzLnBocGAsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZXNfaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuZXNvbHZlX2lkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVzcG9uc2UgaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5oYW5kbGVVcGRhdGVTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzX2lkOiArcmVzcG9uc2UuZXNvbHZlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVTZXNzaW9uQWRkcmVzc1VwZGF0ZVJlc3VsdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVNlc3Npb25TaGlwcGluZyhcbiAgICAgICAgc2hpcHBpbmdfaWQ6IG51bWJlcixcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZVNlc3Npb25TaGlwcGluZ1VwZGF0ZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdDxFc29sdmVTZXRSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LXNlc3Npb24tc2hpcHBpbmcucGhwYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTg7JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChodHRwX3Jlc3BvbnNlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlSGFuZGxlci52YWxpZGF0ZVNpbmdsZUh0dHBSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmVzb2x2ZV9pZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlc3BvbnNlIGlkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UuaGFuZGxlVXBkYXRlU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkOiArcmVzcG9uc2UuZXNvbHZlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVTZXNzaW9uU2hpcHBpbmdVcGRhdGVSZXN1bHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBFc29sdmVUcmFuc2FjdGlvbnNTZXJ2aWNlIGZvciBmdXR1cmUgdHJhbnNhY3Rpb24gcmVxdWVzdHNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25zKFxuICAgICAgICBvcHRpb25zOiBFc29sdmVUcmFuc2FjdGlvbk9wdGlvbnMgPSB7fSxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZVRyYW5zYWN0aW9uTGlzdD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5sb2dpbkd1YXJkKCk7XG5cbiAgICAgICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd1c2VyX2lkJywgdGhpcy51c2VyX2lkKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudHlwZSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3R5cGUnLCBvcHRpb25zLnR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wYWdlKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgncGFnZScsIG9wdGlvbnMucGFnZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJvd3MpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdyb3dzJywgb3B0aW9ucy5yb3dzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZnJvbV9kYXRlKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnZnJvbV9kYXRlJywgb3B0aW9ucy5mcm9tX2RhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy50b19kYXRlKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgndG9fZGF0ZScsIG9wdGlvbnMudG9fZGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVycyA9IG9wdGlvbnMuZmlsdGVycztcblxuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzID0gRXNvbHZlRmlsdGVyRmFjdG9yeS5jb3ZlcnRGcm9tT2JqKGZpbHRlcnMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IEVzb2x2ZUZpbHRlckZhY3RvcnkuY29udmVydFRvSHR0cFBhcmFtcyhcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgICAgICAuZ2V0PEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZVRyYW5zYWN0aW9uUmVjb3JkW10+PihcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZ2V0LXRyYW5zYWN0aW9ucy5waHBgLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVjb3JkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5wcm9jZXNzVHJhbnNhY3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWwgPSArKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmFkZGl0aW9uYWxfZGF0YS50b3RhbF9yZWNvcmRzID8/IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dzID0gb3B0aW9ucy5yb3dzID8/IHRvdGFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IG9wdGlvbnMucGFnZSB8fCAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVRyYW5zYWN0aW9uTGlzdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIEVzb2x2ZVRyYW5zYWN0aW9uc1NlcnZpY2UgZm9yIGZ1dHVyZSB0cmFuc2FjdGlvbiByZXF1ZXN0c1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUcmFuc2FjdGlvbihpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFc29sdmVUcmFuc2FjdGlvbj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5sb2dpbkd1YXJkKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgICAgICAuZ2V0PEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZVRyYW5zYWN0aW9uUmVjb3JkW10+PihcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZ2V0LXRyYW5zYWN0aW9ucy5waHBgLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkOiB0aGlzLnVzZXJfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25faWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWNvcmRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWNvcmRzLmxlbmd0aCA8PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnByb2Nlc3NUcmFuc2FjdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVjb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDbGllbnRBY2NvdW50QmFsYW5jZXMoKTogT2JzZXJ2YWJsZTxcbiAgICAgICAgRXNvbHZlVXNlckNsaWVudEFjY291bnRCYWxhbmNlcyB8IHVuZGVmaW5lZFxuICAgID4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5sb2dpbkd1YXJkKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgICAgICAuZ2V0PFxuICAgICAgICAgICAgICAgICAgICBFc29sdmVHZXRSZXNwb25zZTxFc29sdmVVc2VyQ2xpZW50QWNjb3VudEJhbGFuY2VzUmVjb3JkW10+XG4gICAgICAgICAgICAgICAgPihgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtY2xpZW50LWFjY291bnQtYmFsYW5jZXMucGhwYClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQ2xpZW50QmFsYW5jZXMocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2VuZXJhdGVTdGF0ZW1lbnREb3dubG9hZExpbmsoY2xpZW50c19pZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9naW5HdWFyZCgpO1xuXG4gICAgICAgICAgICBpZiAoY2xpZW50c19pZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBiYXNlX3VybCA9IGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1nZW5lcmF0ZWQtcGRmLnBocGA7XG4gICAgICAgICAgICBjb25zdCBxdWVyaWVzID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnd3NfaWQnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25maWcud3NpZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xpZW50c19pZCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjbGllbnRzX2lkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXNzaW9uU2VydmljZS5nZXRUb2tlbigpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBjb25zdCBxdWVyeV9zdHJpbmcgPSBxdWVyaWVzXG4gICAgICAgICAgICAgICAgLm1hcCgocXVlcnkpID0+IGAke3F1ZXJ5LmtleX09JHtxdWVyeS52YWx1ZX1gKVxuICAgICAgICAgICAgICAgIC5qb2luKCcmJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBgJHtiYXNlX3VybH0/JHtxdWVyeV9zdHJpbmd9YDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2VuZXJhdGVDbGllbnRBc3NldERvd25sb2FkTGluayhcbiAgICAgICAgY2xpZW50c19pZDogbnVtYmVyLFxuICAgICAgICBkb2N1bWVudF9udW1iZXI6IHN0cmluZyxcbiAgICAgICAgbW9kaWZpZWRfZGF0ZTogc3RyaW5nLFxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgaWYgKGNsaWVudHNfaWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmFzZV91cmwgPSBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtY2xpZW50LWFzc2V0LWRvd25sb2FkLnBocGA7XG4gICAgICAgICAgICBjb25zdCBxdWVyaWVzID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnd3NfaWQnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25maWcud3NpZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0VG9rZW4oKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xpZW50c19pZCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjbGllbnRzX2lkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdkb2N1bWVudF9udW1iZXInLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZG9jdW1lbnRfbnVtYmVyLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdkYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1vZGlmaWVkX2RhdGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5X3N0cmluZyA9IHF1ZXJpZXNcbiAgICAgICAgICAgICAgICAubWFwKChxdWVyeSkgPT4gYCR7cXVlcnkua2V5fT0ke3F1ZXJ5LnZhbHVlfWApXG4gICAgICAgICAgICAgICAgLmpvaW4oJyYnKTtcblxuICAgICAgICAgICAgcmV0dXJuIGAke2Jhc2VfdXJsfT8ke3F1ZXJ5X3N0cmluZ31gO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG5cbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXF1ZXN0RXJwRG9jdW1lbnRzKFxuICAgICAgICByZXF1ZXN0ZWRfZG9jdW1lbnRzOiBFc29sdmVFcnBEb2N1bWVudFJlcXVlc3RbXSxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUVycERvY3VtZW50c1JlcXVlc3RSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RlZF9kb2N1bWVudHMsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3Q8RXNvbHZlU2V0UmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L3NldC1yZXF1ZXN0LWVycC1kb2N1bWVudC5waHBgLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTg7JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChodHRwX3Jlc3BvbnNlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlSGFuZGxlci52YWxpZGF0ZVNpbmdsZUh0dHBSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVzb2x2ZUVycERvY3VtZW50c1JlcXVlc3RSZXN1bHQocmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlIHwgYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVIdHRwUG9zdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NldC1yZXF1ZXN0LWVycC1kb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvclJlcyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVycERvY3VtZW50UmVxdWVzdHMoXG4gICAgICAgIGNsaWVudHNfaWQ6IG51bWJlcixcbiAgICAgICAgdHlwZSA9ICdpbnZvaWNlJyxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUVycERvY3VtZW50UmVxdWVzdFtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG5cbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NsaWVudHNfaWQnLCBjbGllbnRzX2lkKTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3R5cGUnLCB0eXBlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0UmVjb3JkW10+PihcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZ2V0LWVycC1kb2N1bWVudC1yZXF1ZXN0LnBocGAsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZWNvcmRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0VycERvY3VtZW50UmVxdWVzdChyZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDbGllbnRBc3NldHMoXG4gICAgICAgIG9wdGlvbnM6IEVzb2x2ZUNsaWVudEFzc2V0c09wdGlvbnMsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVDbGllbnRBc3NldExpc3Q+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9naW5HdWFyZCgpO1xuXG4gICAgICAgICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnY2xpZW50c19pZCcsIG9wdGlvbnMuY2xpZW50c19pZCA/PyAwKTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2Fzc2V0X3R5cGUnLCBvcHRpb25zLmFzc2V0X3R5cGUgPz8gJ3F1b3RlJyk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBhZ2UpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgb3B0aW9ucy5wYWdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucm93cykge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3Jvd3MnLCBvcHRpb25zLnJvd3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zb3J0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydCA9IG9wdGlvbnMuc29ydDtcblxuICAgICAgICAgICAgICAgIGlmIChzb3J0LmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3NvcnQnLCBzb3J0LmZpZWxkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc29ydC5vcmRlcikge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdvcmRlcicsIHNvcnQub3JkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlQ2xpZW50QXNzZXRSZWNvcmRbXT4+KFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtY2xpZW50LWFzc2V0cy5waHBgLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVjb3JkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5wcm9jZXNzQ2xpZW50QXNzZXRzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9ICsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuYWRkaXRpb25hbF9kYXRhLnRvdGFsX3JlY29yZHMgPz8gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBvcHRpb25zLnJvd3MgPz8gdG90YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gb3B0aW9ucy5wYWdlIHx8IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlQ2xpZW50QXNzZXRMaXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NVc2VyQWNjb3VudChcbiAgICAgICAgcmVjb3JkOiBFc29sdmVVc2VyQWNjb3VudFJlY29yZCxcbiAgICApOiBFc29sdmVVc2VyQWNjb3VudCB7XG4gICAgICAgIGlmICghcmVjb3JkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVjb3JkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoK3JlY29yZC51c2VyaWQgIT09IHRoaXMuX3VzZXJfaWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGFjY291bnQgcmV0cmlldmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVVzZXJBY2NvdW50KHJlY29yZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzVXNlckFkZHJlc3MoXG4gICAgICAgIHJlY29yZHM6IEVzb2x2ZUFkZHJlc3NSZWNvcmRbXSxcbiAgICApOiBFc29sdmVBZGRyZXNzW10ge1xuICAgICAgICBjb25zdCB1c2VyX2FkZHJlc3NlczogRXNvbHZlQWRkcmVzc1tdID0gW107XG5cbiAgICAgICAgaWYgKCFyZWNvcmRzIHx8IHRoaXMuX3VzZXJfaWQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB1c2VyX2FkZHJlc3NlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGlmICgrcmVjb3JkLnVzZXJpZCAhPT0gdGhpcy5fdXNlcl9pZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1c2VyX2FkZHJlc3Nlcy5wdXNoKG5ldyBFc29sdmVBZGRyZXNzKHJlY29yZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVzZXJfYWRkcmVzc2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1VzZXJDbGllbnRzKFxuICAgICAgICByZWNvcmRzOiBFc29sdmVVc2VyQ2xpZW50QWNjb3VudFJlY29yZFtdLFxuICAgICk6IEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50W10ge1xuICAgICAgICBjb25zdCB1c2VyX2NsaWVudHM6IEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50W10gPSBbXTtcblxuICAgICAgICBpZiAoIXJlY29yZHMgfHwgdGhpcy5fdXNlcl9pZCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVzZXJfY2xpZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIHVzZXJfY2xpZW50cy5wdXNoKG5ldyBFc29sdmVVc2VyQ2xpZW50QWNjb3VudChyZWNvcmQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1c2VyX2NsaWVudHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzVHJhbnNhY3Rpb25zKFxuICAgICAgICByZWNvcmRzOiBFc29sdmVUcmFuc2FjdGlvblJlY29yZFtdLFxuICAgICk6IEVzb2x2ZVRyYW5zYWN0aW9uW10ge1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbnM6IEVzb2x2ZVRyYW5zYWN0aW9uW10gPSBbXTtcblxuICAgICAgICBpZiAocmVjb3Jkcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IEVzb2x2ZVRyYW5zYWN0aW9uKHJlY29yZCk7XG5cbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbnMucHVzaCh0cmFuc2FjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0NsaWVudEJhbGFuY2VzKFxuICAgICAgICByZWNvcmRzOiBFc29sdmVVc2VyQ2xpZW50QWNjb3VudEJhbGFuY2VzUmVjb3JkW10sXG4gICAgKTogRXNvbHZlVXNlckNsaWVudEFjY291bnRCYWxhbmNlcyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGlmICgrcmVjb3JkLmNsaWVudHNfaWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNhcnRfdG90YWxzID0gbmV3IEVzb2x2ZUNhcnRUb3RhbHMocmVjb3JkLmNhcnRfdG90YWxzKTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVVc2VyQ2xpZW50QWNjb3VudEJhbGFuY2VzKFxuICAgICAgICAgICAgICAgICtyZWNvcmQuY2xpZW50c19pZCxcbiAgICAgICAgICAgICAgICByZWNvcmQuYWNjb3VudCxcbiAgICAgICAgICAgICAgICBjYXJ0X3RvdGFscyxcbiAgICAgICAgICAgICAgICArcmVjb3JkLmNyZWRpdF9saW1pdCxcbiAgICAgICAgICAgICAgICArcmVjb3JkLmV4dGVybmFsX2FjY291bnRfYmFsYW5jZSxcbiAgICAgICAgICAgICAgICArcmVjb3JkLmV4dGVybmFsX2F2YWlsYWJsZV9iYWxhbmNlLFxuICAgICAgICAgICAgICAgICtyZWNvcmQubmV3X2V4dGVybmFsX2F2YWlsYWJsZV9iYWxhbmNlLFxuICAgICAgICAgICAgICAgICEhK3JlY29yZC5jcmVkaXRfbGltaXRfb2theSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9naW5HdWFyZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudXNlcl9pZCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlci50aHJvd0Vycm9yKCdsb2dpbl9yZXF1aXJlZCcsICdMb2dpbiBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVVc2VyTG9jYXRpb24oXG4gICAgICAgIGJvZHk6IEVzb2x2ZUxvY2F0aW9uT3B0aW9uLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlTG9jYXRpb25VcGRhdGVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3Q8RXNvbHZlU2V0UmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L3NldC1zZXNzaW9uLWxvY2F0aW9uLnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuZXNvbHZlX2lkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVzcG9uc2UgaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5oYW5kbGVVcGRhdGVTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25faWQ6ICtyZXNwb25zZS5lc29sdmVfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZUxvY2F0aW9uVXBkYXRlUmVzdWx0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzRXJwRG9jdW1lbnRSZXF1ZXN0KFxuICAgICAgICByZWNvcmRzOiBFc29sdmVFcnBEb2N1bWVudFJlcXVlc3RSZWNvcmRbXSxcbiAgICApOiBFc29sdmVFcnBEb2N1bWVudFJlcXVlc3RbXSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RzOiBFc29sdmVFcnBEb2N1bWVudFJlcXVlc3RbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIHJlcXVlc3RzLnB1c2gobmV3IEVzb2x2ZUVycERvY3VtZW50UmVxdWVzdChyZWNvcmQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXF1ZXN0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NDbGllbnRBc3NldHMoXG4gICAgICAgIHJlY29yZHM6IEVzb2x2ZUNsaWVudEFzc2V0UmVjb3JkW10sXG4gICAgKTogRXNvbHZlQ2xpZW50QXNzZXRbXSB7XG4gICAgICAgIGNvbnN0IGFzc2V0czogRXNvbHZlQ2xpZW50QXNzZXRbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGFzc2V0cy5wdXNoKG5ldyBFc29sdmVDbGllbnRBc3NldChyZWNvcmQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc3NldHM7XG4gICAgfVxufVxuIl19
|