{"version":3,"file":"dbg-riskit-angular-auth.mjs","sources":["../../../../pkg/dbg-riskit/angular-auth/src/lib/auth.config.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/jwt.helper.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/auth.storage.service.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/auth.http.interceptor.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/nonce.generator.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/request.utils.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/well.known.service.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/auth.service.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/auth.provider.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/auth.routing.flow.service.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/auth.routing.guard.ts","../../../../pkg/dbg-riskit/angular-auth/src/lib/config.reader.ts","../../../../pkg/dbg-riskit/angular-auth/src/dbg-riskit-angular-auth.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport type AuthFlowNames =\n    'openid-connect/authorization-code' |\n    'openid-connect/implicit' |\n    'openid-connect/hybrid' |\n    'openid-connect/direct';\n\nexport class AuthFlow {\n    private static readonly CONSTANTS_MAP: { [key: string]: AuthFlow } = {};\n    public static readonly AUTHORIZATION_CODE = new AuthFlow('openid-connect/authorization-code');\n    public static readonly IMPLICIT = new AuthFlow('openid-connect/implicit');\n    public static readonly HYBRID = new AuthFlow('openid-connect/hybrid');\n    public static readonly DIRECT = new AuthFlow('openid-connect/direct');\n\n    private constructor(private readonly _type: string) {\n        AuthFlow.CONSTANTS_MAP[_type] = this;\n    }\n\n    public get type(): string {\n        return this._type;\n    }\n\n    public static byType(type: AuthFlowNames): AuthFlow {\n        return AuthFlow.CONSTANTS_MAP[type];\n    }\n}\n\nexport type AuthSpecScopes = 'profile' | 'group' | 'email' | 'address' | 'phone';\n\nexport interface AuthConfig {\n    loginRoute: string;\n    afterLoginRedirectRoute: string;\n    wellKnown: string;\n    clientID: string;\n    clientSecret?: string;\n    flow: AuthFlow;\n    useNonce?: boolean;\n    scope?: Array<AuthSpecScopes | string>;\n}\n\nexport const AUTH_CONFIG = new InjectionToken<AuthConfig>('risk.authConfig');\n","/**\n * Helper class to decode and find JWT expiration.\n */\nimport {base64decode, base64encode} from '@dbg-riskit/common';\nimport {TokenData} from './token.responses';\n\n// @dynamic\nexport class JwtHelper {\n\n    public static decodeToken(token: string): TokenData {\n        const parts = token.split('.');\n\n        if (parts.length !== 3) {\n            throw new Error('JWT must have 3 parts');\n        }\n\n        const decoded = base64decode(parts[1]);\n        if (!decoded) {\n            throw new Error('Cannot decode the token');\n        }\n\n        return JSON.parse(decoded);\n    }\n\n    public static getTokenExpirationDate(token: string,\n                                         property: keyof Pick<TokenData, 'exp' | 'iat'> = 'exp'\n    ): Date | null {\n        const decoded = JwtHelper.decodeToken(token);\n\n        if (!decoded.hasOwnProperty(property)) {\n            return null;\n        }\n\n        const date = new Date(0); // The 0 here is the key, which sets the date to the epoch\n        date.setUTCSeconds(decoded[property]);\n\n        return date;\n    }\n\n    public static isTokenExpired(token: string, offsetSeconds?: number): boolean {\n        const date = JwtHelper.getTokenExpirationDate(token);\n        return JwtHelper.isBefore(date, offsetSeconds);\n    }\n\n    public static isBefore(date: Date | null, offsetSeconds?: number): boolean {\n        offsetSeconds = offsetSeconds || 0;\n\n        if (date == null) {\n            return false;\n        }\n\n        // Token expired?\n        return date.valueOf() < (new Date().valueOf() + (offsetSeconds * 1000));\n    }\n}\n\nexport function encodeTestToken(payload: TokenData): string {\n    // Don't actually check or care about the header or signature in angular2-jwt\n    return `.${base64encode(JSON.stringify(payload))}.`;\n}\n","import {inject, Injectable} from '@angular/core';\n\nimport {LocalStorage, Logger, Maybe} from '@dbg-riskit/common';\n\nimport {JwtHelper} from './jwt.helper';\n\n@Injectable({providedIn: 'root'})\nexport class AuthStorageService {\n    private readonly logger = inject(Logger);\n\n    @LocalStorage('id_token', 'auth')\n    public idToken?: string | null;\n\n    @LocalStorage('access_token', 'auth')\n    public accessToken?: string | null;\n\n    @LocalStorage('refresh_token', 'auth')\n    public refreshToken?: string | null;\n\n    @LocalStorage('sync_diff', 'auth')\n    private _timeSyncDiff?: number | null;\n\n    @LocalStorage('nonce', 'auth')\n    public nonce?: string | null;\n\n    @LocalStorage('req_path', 'auth')\n    public authRequestedPath?: string | null;\n\n    public syncTime(): void {\n        const now = Math.floor((new Date().valueOf()) / 1000);\n        const computeDiff = (token: Maybe<string>, currDiff = 0): number => {\n            if (token) {\n                const tokenData = JwtHelper.decodeToken(token);\n                if (tokenData.iat) {\n                    const diff = tokenData.iat - now;\n                    if (Math.abs(diff) > Math.abs(currDiff)) {\n                        return diff;\n                    }\n                }\n            }\n            return currDiff;\n        };\n\n        this._timeSyncDiff = computeDiff(this.idToken);\n        this._timeSyncDiff = computeDiff(this.accessToken, this._timeSyncDiff);\n        this._timeSyncDiff = computeDiff(this.refreshToken, this._timeSyncDiff);\n        this._timeSyncDiff = Math.floor(this._timeSyncDiff || 0);\n    }\n\n    private get exp(): Date | null {\n        const computeExpiration = (token: Maybe<string>, date: Date | null = null): Date | null => {\n            if (token) {\n                const tokenExp = JwtHelper.getTokenExpirationDate(token);\n                if (date == null || tokenExp == null) {\n                    return tokenExp;\n                }\n\n                if (date > tokenExp) {\n                    return tokenExp;\n                }\n            }\n            return date;\n        };\n\n        let exp = computeExpiration(this.idToken);\n        exp = computeExpiration(this.accessToken, exp);\n        return computeExpiration(this.refreshToken, exp);\n    }\n\n    public get refresh_in(): number {\n        const exp = this.exp;\n        const now = new Date();\n        if (!exp) {\n            return 1;\n        }\n\n        const syncDiff = this._timeSyncDiff || 0;\n\n        const expFromNow = Math.floor((exp.valueOf() - now.valueOf()) / 1000) - syncDiff;\n        const refreshIn = expFromNow - 60; // Refresh at least a minute before\n        this.logger.info(`Tokens will refresh in ${refreshIn}s.`);\n\n        return refreshIn > 0 ? (refreshIn * 1000) : 1;\n    }\n\n    public clear() {\n        this.idToken = null;\n        this.accessToken = null;\n        this.refreshToken = null;\n        this._timeSyncDiff = null;\n        this.nonce = null;\n    }\n}\n","import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {inject, Injectable} from '@angular/core';\nimport {HttpRequestHeaders} from '@dbg-riskit/angular-http';\nimport {AuthTokenType, Maybe} from '@dbg-riskit/common';\nimport {defer, Observable} from 'rxjs';\nimport {AuthStorageService} from './auth.storage.service';\n\nexport class AuthConfigConsts {\n    public static DEFAULT_HEADER_NAME = 'Authorization';\n    public static HEADER_PREFIX_BEARER = 'Bearer ';\n}\n\n@Injectable()\nexport class AuthHttpInterceptor implements HttpInterceptor {\n    private readonly authStorage = inject(AuthStorageService);\n\n    public intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n        return defer(() => {\n            if (request.headers instanceof HttpRequestHeaders) {\n                const tokenType = request.headers.tokenType;\n                switch (tokenType) {\n                    case AuthTokenType.API:\n                        return handleInterception(this.authStorage.idToken, request, next);\n                    case AuthTokenType.AUTH:\n                        return handleInterception(this.authStorage.accessToken, request, next);\n                    default:\n                        return next.handle(request);\n                }\n            }\n            return next.handle(request);\n        });\n    }\n}\n\nfunction handleInterception(token: Maybe<string>, request: HttpRequest<unknown>,\n                            next: HttpHandler): Observable<HttpEvent<unknown>> {\n    if (token) {\n        request = request.clone({\n            setHeaders: {\n                [AuthConfigConsts.DEFAULT_HEADER_NAME]: `${AuthConfigConsts.HEADER_PREFIX_BEARER}${token}`\n            }\n        });\n    }\n    return next.handle(request);\n}\n","import {secureRandom} from '@dbg-riskit/common';\nimport {defer, Observable, of} from 'rxjs';\n\n// @dynamic\nexport class NonceGenerator {\n\n    public static generateNonce(): Observable<string> {\n        return defer(() => {\n            const guidHolder = 'xxx-xxyxxxxx4xxxyxxxxxx-xxxx4xxx';\n            const hex = '0123456789abcdef';\n            let r = 0;\n            let guidResponse = '';\n            for (const placeHolder of guidHolder) {\n                if (placeHolder !== '-' && placeHolder !== '4') {\n                    // each x and y needs to be random\n                    r = Math.floor(secureRandom() * 16);\n                }\n\n                if (placeHolder === 'x') {\n                    guidResponse += hex[r];\n                } else if (placeHolder === 'y') {\n\n                    /* eslint-disable no-bitwise */\n\n                    // clock-seq-and-reserved first hex is filtered and remaining hex values are random\n                    r &= 0x3; // bit and with 0011 to set pos 2 to zero ?0??\n                    r |= 0x8; // set pos 3 to 1 as 1???\n\n                    /* eslint-enable */\n\n                    guidResponse += hex[r];\n                } else {\n                    guidResponse += placeHolder;\n                }\n            }\n            return of(guidResponse);\n        });\n    }\n}\n","import {Location} from '@angular/common';\n\nexport interface OpenIDQueryParams {\n    error: string | null;\n    errorDesc: string | null;\n    code: string | null;\n    id_token: string | null;\n    access_token: string | null;\n}\n\n// @dynamic\nexport class RequestUtils {\n\n    public static get locationHref(): string | null {\n        return window.location.href;\n    }\n\n    public static set locationHref(href: string | null) {\n        if (href) {\n            window.location.href = href;\n        }\n    }\n\n    private static getURLPath(href: string) {\n        const link: HTMLAnchorElement = document.createElement('a');\n        link.href = href;\n        return link.pathname;\n    }\n\n    public static getOrigin(): string {\n        const port = window.location.port ? `:${window.location.port}` : '';\n        return window.location.origin || (`${window.location.protocol}//${window.location.hostname}${port}`);\n    }\n\n    public static getBaseURL(location: Location, relativeURL = '/'): string {\n        let baseURL = '';\n        if (location) {\n            baseURL = RequestUtils.getURLPath(location.prepareExternalUrl('/'));\n        }\n        if (!baseURL.startsWith('/')) {\n            baseURL = '/' + baseURL;\n        }\n        if (!baseURL.endsWith('/')) {\n            baseURL += '/';\n        }\n        if (relativeURL.startsWith('/')) {\n            relativeURL = relativeURL.substring(1);\n        }\n\n        const origin = RequestUtils.getOrigin();\n        return origin + baseURL + relativeURL;\n    }\n\n    public static getQueryParam(name: string): string | null {\n        const url = RequestUtils.locationHref;\n        name = name.replace(/[\\[\\]]/g, '\\\\$&');\n        const regex = new RegExp(`[?#&]${name}(=([^&#]*)|&|#|$)`);\n        const results = regex.exec(url || '');\n        if (!results) {\n            return null;\n        }\n        if (!results[2]) {\n            return '';\n        }\n        return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n    }\n\n    public static getOpenIDQueryParams(): OpenIDQueryParams {\n        const error = RequestUtils.getQueryParam('error');\n        const errorDesc = RequestUtils.getQueryParam('error_description');\n        const code = RequestUtils.getQueryParam('code');\n        const idToken = RequestUtils.getQueryParam('id_token');\n        const accessToken = RequestUtils.getQueryParam('access_token');\n        return {\n            error,\n            errorDesc,\n            code,\n            id_token    : idToken,\n            access_token: accessToken\n        };\n    }\n\n    public static hasOpenIDQueryParams(): boolean {\n        const params = RequestUtils.getOpenIDQueryParams();\n        return params.error != null\n               || params.errorDesc != null\n               || params.code != null\n               || params.id_token != null\n               || params.access_token != null;\n    }\n}\n","import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {inject, Injectable} from '@angular/core';\nimport {CONTENT_TYPE} from '@dbg-riskit/common';\nimport {Observable} from 'rxjs';\nimport {map, shareReplay} from 'rxjs/operators';\nimport {AUTH_CONFIG, AuthConfig} from './auth.config';\n\nexport interface WellKnown {\n    endpoints: {\n        auth: string;\n        token: string;\n        logout: string;\n    };\n    issuer: string;\n}\n\n@Injectable({providedIn: 'root'})\nexport class WellKnownService {\n    private readonly http = inject(HttpClient);\n    private readonly authConfig = inject<AuthConfig>(AUTH_CONFIG);\n\n    private readonly _wellKnown: Observable<WellKnown>;\n\n    public constructor() {\n        const params = new HttpParams();\n        params.append('_', Date.now().toFixed(0));\n        this._wellKnown = this.http.get<{\n            authorization_endpoint: string;\n            token_endpoint: string;\n            end_session_endpoint: string;\n            issuer: string;\n        }>(this.authConfig.wellKnown, {\n            params,\n            headers: new HttpHeaders({\n                accept: CONTENT_TYPE.APPLICATION_JSON\n            })\n        }).pipe(\n            map((wellKnown) => (\n                    {\n                        endpoints: {\n                            auth  : wellKnown.authorization_endpoint,\n                            token : wellKnown.token_endpoint,\n                            logout: wellKnown.end_session_endpoint\n                        },\n                        issuer   : wellKnown.issuer\n                    }\n                )\n            ),\n            shareReplay(1)\n        );\n    }\n\n    public get wellKnown(): Observable<WellKnown> {\n        return this._wellKnown;\n    }\n}\n","import {Location} from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\nimport {HttpService} from '@dbg-riskit/angular-http';\nimport {AuthProvider, AuthTokenType, ErrorType, ReplaySubjectExt, toString, UserInfo} from '@dbg-riskit/common';\nimport {EMPTY, Observable, of, throwError} from 'rxjs';\nimport {catchError, defaultIfEmpty, first, map, shareReplay, switchMap, tap} from 'rxjs/operators';\nimport {AUTH_CONFIG, AuthConfig, AuthFlow} from './auth.config';\nimport {AuthStorageService} from './auth.storage.service';\nimport {JwtHelper} from './jwt.helper';\nimport {NonceGenerator} from './nonce.generator';\nimport {OpenIDQueryParams, RequestUtils} from './request.utils';\nimport {AuthResponse, TokenData} from './token.responses';\nimport {WellKnown, WellKnownService} from './well.known.service';\n\nexport const AUTH_CHECK_INTERVAL = 60000;\n\nconst OPEN_ID_SCOPE = 'openid';\nconst DEFAULT_OPEN_ID_SCOPES = ['profile', 'email', 'address', 'phone'];\n\nconst UNSUPPORTED_AUTH_FLOW_TYPE = 'Unsupported auth flow type!';\n\nfunction unsupportedFlowTypeError(): Error {\n    return new Error(UNSUPPORTED_AUTH_FLOW_TYPE);\n}\n\n@Injectable({providedIn: 'root'})\nexport class AuthService implements AuthProvider {\n    private readonly authConfig = inject<AuthConfig>(AUTH_CONFIG);\n    private readonly wellKnownService = inject(WellKnownService);\n    private readonly http = inject(HttpService);\n    private readonly storage = inject(AuthStorageService);\n\n    private readonly _loggedInStream: ReplaySubjectExt<boolean> = new ReplaySubjectExt<boolean>(1);\n\n    private tokenData?: UserInfo;\n\n    private refreshTimeout?: NodeJS.Timeout | null;\n    private authCheckInterval?: NodeJS.Timeout | null;\n\n    private readonly redirectURL: string;\n    private readonly openIDScope: string;\n    private readonly _initService: Observable<WellKnown>;\n\n    public constructor() {\n        const location = inject(Location);\n\n        // Use false only if === false\n        this.authConfig.useNonce = this.authConfig.useNonce !== false;\n\n        this.redirectURL = RequestUtils.getBaseURL(location, this.authConfig.loginRoute);\n        this.openIDScope = [OPEN_ID_SCOPE].concat(this.authConfig.scope || DEFAULT_OPEN_ID_SCOPES).join(' ');\n\n        // Try to load tokens and process them\n        this._initService = this.wellKnownService.wellKnown.pipe(\n            switchMap((wellKnown: WellKnown) => this.processToken({\n                    id_token     : this.storage.idToken,\n                    access_token : this.storage.accessToken,\n                    refresh_token: this.storage.refreshToken\n                }, false) // Do not sync time as we are now in the future ;)\n                    .pipe(\n                        catchError(() => this.tryToRefresh()),\n                        defaultIfEmpty(0),\n                        map(() => wellKnown)\n                    )\n            ),\n            shareReplay(1)\n        );\n    }\n\n    public get loggedIn(): Observable<boolean> {\n        return this._initService.pipe(\n            map(() => !!this.tokenData)\n        );\n    }\n\n    public get userProfile(): Observable<UserInfo | undefined> {\n        return this._initService.pipe(\n            map(() => this.tokenData)\n        );\n    }\n\n    public get loggedInStream(): Observable<boolean> {\n        return this._loggedInStream.asObservable();\n    }\n\n    public emitLoginStatusChange(status: boolean) {\n        if (this._loggedInStream.lastValue !== status) {\n            this._loggedInStream.next(status);\n        }\n    }\n\n    // <editor-fold defaultstate=\"collapsed\" desc=\"Indirect login\">\n\n    public loginViaAuthService(): Observable<boolean> {\n        return this.wellKnownService.wellKnown.pipe(\n            switchMap((wellKnown: WellKnown) =>\n                NonceGenerator.generateNonce().pipe(\n                    map((nonce) => ({\n                        wellKnown,\n                        nonce\n                    }))\n                )\n            ),\n            map(({\n                     wellKnown,\n                     nonce\n                 }) => {\n                let responseType: string;\n                switch (this.authConfig.flow) {\n                    case AuthFlow.AUTHORIZATION_CODE:\n                        responseType = 'code';\n                        break;\n                    case AuthFlow.IMPLICIT:\n                        responseType = 'id_token token';\n                        break;\n                    case AuthFlow.HYBRID:\n                        responseType = 'code id_token';\n                        break;\n                    default:\n                        throw unsupportedFlowTypeError();\n                }\n                let location = `${wellKnown.endpoints.auth\n                }?response_type=${encodeURIComponent(responseType)\n                }&scope=${encodeURIComponent(this.openIDScope)\n                }&client_id=${encodeURIComponent(this.authConfig.clientID)\n                }&redirect_uri=${encodeURIComponent(this.redirectURL)}`;\n                if (this.authConfig.useNonce) {\n                    this.storage.nonce = nonce;\n                    location += `&nonce=${encodeURIComponent(nonce)}`;\n                }\n                RequestUtils.locationHref = location;\n                return true;\n            })\n        );\n    }\n\n    public checkLocationForLoginData(): Observable<boolean> {\n        return this.wellKnownService.wellKnown.pipe(\n            switchMap(() => {\n                const params = RequestUtils.getOpenIDQueryParams();\n\n                if (params.error) {\n                    return throwError({\n                        message  : `(${params.error}) ${params.errorDesc}`,\n                        status   : 500,\n                        errorType: ErrorType.AUTH\n                    });\n                }\n\n                switch (this.authConfig.flow) {\n                    case AuthFlow.HYBRID:\n                        return this.checkParametersHybridFlow(params);\n                    case AuthFlow.AUTHORIZATION_CODE:\n                        return this.checkParametersAuthCodeFlow(params);\n                    case AuthFlow.IMPLICIT:\n                        return this.checkParametersImplicitFlow(params);\n                    default:\n                        return throwError(unsupportedFlowTypeError());\n                }\n            })\n        );\n    }\n\n    private checkParametersHybridFlow(params: OpenIDQueryParams) {\n        if (!params.id_token || !params.code) {\n            return throwError({\n                message  : 'Authentication server did not sent required data.',\n                status   : 500,\n                errorType: ErrorType.AUTH\n            });\n        }\n        // Login using token first\n        return this.processToken({\n            id_token: params.id_token\n        }).pipe(\n            tap(() => {\n                // Request permanent token + refresh token\n                this.requestTokenBasedOnCode(params.code!, this.redirectURL).pipe(\n                    catchError(() => this.logout())\n                ).subscribe((tokenValid: boolean) => {\n                    if (!tokenValid) {\n                        this.logout().pipe(first()).subscribe();\n                    }\n                });\n            })\n        );\n    }\n\n    private checkParametersAuthCodeFlow(params: OpenIDQueryParams) {\n        if (!params.code) {\n            return throwError({\n                message  : 'Authentication server did not send required data.',\n                status   : 500,\n                errorType: ErrorType.AUTH\n            });\n        }\n        // Request token + refresh token\n        return this.requestTokenBasedOnCode(params.code, this.redirectURL);\n    }\n\n    private checkParametersImplicitFlow(params: OpenIDQueryParams) {\n        if (!params.id_token || !params.access_token) {\n            return throwError({\n                message  : 'Authentication server did not send required data.',\n                status   : 500,\n                errorType: ErrorType.AUTH\n            });\n        }\n        // Login using id_token and access_token. Refresh is not permited here\n        return this.processToken({\n            id_token    : params.id_token,\n            access_token: params.access_token\n        });\n    }\n\n    private requestTokenBasedOnCode(code: string, redirectURI: string): Observable<boolean> {\n        return this.wellKnownService.wellKnown.pipe(\n            switchMap((wellKnown: WellKnown) => this.http.post<AuthResponse>({\n                resourceURL: wellKnown.endpoints.token,\n                data       : HttpService.toHttpParams({\n                    code,\n                    redirect_uri : redirectURI,\n                    grant_type   : 'authorization_code',\n                    nonce        : this.authConfig.useNonce ? this.storage.nonce : null,\n                    client_id    : this.authConfig.clientID,\n                    client_secret: this.authConfig.clientSecret\n                }),\n                tokenType  : AuthTokenType.NONE,\n                endpoint   : '' // Do not use any prefix\n            })),\n            switchMap((response: AuthResponse) => this.processToken(response))\n        );\n    }\n\n    // </editor-fold>\n\n    // <editor-fold defaultstate=\"collapsed\" desc=\"Direct login\">\n\n    public directLogin(username: string, password: string): Observable<boolean> {\n        return this.wellKnownService.wellKnown.pipe(\n            switchMap((wellKnown: WellKnown) => this.http.post<AuthResponse>({\n                resourceURL: wellKnown.endpoints.token,\n                data       : HttpService.toHttpParams({\n                    username,\n                    password,\n                    grant_type   : 'password',\n                    scope        : this.openIDScope,\n                    client_id    : this.authConfig.clientID,\n                    client_secret: this.authConfig.clientSecret\n                }),\n                tokenType  : AuthTokenType.NONE,\n                endpoint   : '' // Do not use any prefix\n            })),\n            switchMap((response: AuthResponse) => this.processToken(response))\n        );\n    }\n\n    // </editor-fold>\n\n    public processToken(response: AuthResponse, syncTime = true): Observable<boolean> {\n        return this.wellKnownService.wellKnown.pipe(\n            switchMap(() => {\n                if (this.validateResponseNonce(response)) {\n                    return throwError({\n                        status   : 401,\n                        message  : 'Non-matching nonce.',\n                        errorType: ErrorType.AUTH\n                    });\n                }\n                if (AuthService.validateResponseTokenType(response)) {\n                    return throwError({\n                        status   : 401,\n                        message  : 'Invalid token type.',\n                        errorType: ErrorType.AUTH\n                    });\n                }\n\n                return this.storeTokensIfValid(response, syncTime);\n            })\n        );\n    }\n\n    private validateResponseNonce(response: AuthResponse) {\n        return this.authConfig.useNonce && response.nonce && response.nonce !== this.storage.nonce;\n    }\n\n    private static validateResponseTokenType(response: AuthResponse) {\n        return response.token_type && response.token_type.toLocaleLowerCase() !== 'bearer';\n    }\n\n    private storeTokensIfValid(response: AuthResponse, syncTime: boolean) {\n        if (response.id_token == null) {\n            return throwError({\n                status   : 401,\n                message  : 'Authentication failed. Server did not generate a token.',\n                errorType: ErrorType.AUTH\n            });\n        }\n\n        this.storage.idToken = response.id_token;\n        const chain = this.validateToken(response.id_token).pipe(\n            tap((tokenData: TokenData) => {\n                this.tokenData = tokenData;\n            })\n        );\n        if (response.access_token != null) {\n            chain.pipe(switchMap(() => this.validateToken(response.access_token!)));\n        }\n        return chain.pipe(\n            map(() => {\n                // store username and token in local storage to keep user logged in between page refreshes\n                this.storage.idToken = response.id_token;\n                this.storage.accessToken = response.access_token;\n                if (response.refresh_token) {\n                    this.storage.refreshToken = response.refresh_token;\n                }\n                if (syncTime) {\n                    // Sync our local time with the auth server time as we need to refresh tokens\n                    // at correct time point. We use token iat here as this is the\n                    // \"current server time\" - \"request duration (ignored as it is small, max. few sec.)\".\n                    this.storage.syncTime();\n                }\n                this.afterLogin();\n                return true;\n            })\n        );\n    }\n\n    private afterLogin(): void {\n        switch (this.authConfig.flow) {\n            case AuthFlow.DIRECT:\n            case AuthFlow.AUTHORIZATION_CODE:\n                this.setupAuthCheck();\n                this.setupTokenRefresh();\n                this.emitLoginStatusChange(true);\n                break;\n            case AuthFlow.HYBRID:\n                if (this.storage.accessToken) {\n                    this.setupAuthCheck();\n                    this.setupTokenRefresh();\n                }\n                this.emitLoginStatusChange(true);\n                break;\n            case AuthFlow.IMPLICIT:\n                this.setupAuthCheck();\n                this.emitLoginStatusChange(true);\n                break;\n            default:\n                throw unsupportedFlowTypeError();\n        }\n    }\n\n    public logout(): Observable<never> {\n        const logout = () => {\n            // remove user from local storage and clear http auth header\n            delete this.tokenData;\n            this.storage.clear();\n            this.disableAuthCheck();\n            this.disableTokenRefresh();\n            this.emitLoginStatusChange(false);\n            return EMPTY;\n        };\n        const idToken = this.storage.idToken;\n        if (idToken) {\n            // Send logout request first...\n            return this.wellKnownService.wellKnown.pipe(\n                switchMap((wellKnown: WellKnown) => this.http.get<void>({\n                    resourceURL: wellKnown.endpoints.logout,\n                    params     : {\n                        id_token_hint: idToken\n                    },\n                    tokenType  : AuthTokenType.NONE,\n                    endpoint   : '' // Do not use any prefix\n                })),\n                catchError(logout),\n                switchMap(logout)\n            );\n        } else {\n            return this.wellKnownService.wellKnown.pipe(\n                catchError(logout),\n                switchMap(logout)\n            );\n        }\n    }\n\n    // <editor-fold defaultstate=\"collapsed\" desc=\"Periodic Auth check\">\n\n    private setupAuthCheck() {\n        this.disableAuthCheck();\n        this.authCheckInterval = setInterval(() => this.checkAuth(), AUTH_CHECK_INTERVAL);\n    }\n\n    private disableAuthCheck() {\n        if (this.authCheckInterval != null) {\n            clearInterval(this.authCheckInterval);\n            this.authCheckInterval = null;\n        }\n    }\n\n    private checkAuth(): void {\n        this.wellKnownService.wellKnown.pipe(\n            switchMap(() => {\n                if (!this.tokenData\n                    || !this.storage.idToken\n                    || !this.storage.accessToken\n                    || this.storage.refresh_in <= 0) {\n                    return this.logout();\n                }\n                return of(true);\n            })\n        ).subscribe();\n    }\n\n    // </editor-fold>\n\n    // <editor-fold defaultstate=\"collapsed\" desc=\"Token refresh\">\n\n    private setupTokenRefresh(): void {\n        this.disableTokenRefresh();\n        this.refreshTimeout = setTimeout(() => this.refreshToken(), this.storage.refresh_in);\n    }\n\n    private disableTokenRefresh(): void {\n        if (this.refreshTimeout != null) {\n            clearTimeout(this.refreshTimeout);\n            this.refreshTimeout = null;\n        }\n    }\n\n    private tryToRefresh(): Observable<boolean> {\n        return this.wellKnownService.wellKnown.pipe(\n            switchMap((wellKnown: WellKnown) => {\n                if (!this.storage.refreshToken) {\n                    return throwError({\n                        message  : 'Could not refresh. Not logged in!',\n                        status   : 500,\n                        errorType: ErrorType.AUTH\n                    });\n                }\n                return this.http.post<AuthResponse>({\n                    resourceURL: wellKnown.endpoints.token,\n                    data       : HttpService.toHttpParams({\n                        grant_type   : 'refresh_token',\n                        client_id    : this.authConfig.clientID,\n                        client_secret: this.authConfig.clientSecret,\n                        refresh_token: this.storage.refreshToken\n                    }),\n                    tokenType  : AuthTokenType.NONE,\n                    endpoint   : '' // Do not use any prefix\n                });\n            }),\n            switchMap((response: AuthResponse) => this.processToken(response)),\n            catchError(() => of(false))\n        );\n    }\n\n    public refreshToken(): void {\n        this.tryToRefresh().pipe(\n            switchMap((refreshed: boolean) => {\n                if (!refreshed) {\n                    return this.logout();\n                }\n                return EMPTY;\n            })\n        ).subscribe();\n    }\n\n    // </editor-fold>\n\n    // <editor-fold defaultstate=\"collapsed\" desc=\"Token validation\">\n\n    private validateToken(token: string): Observable<TokenData> {\n        return this.wellKnownService.wellKnown.pipe(\n            switchMap((wellKnown: WellKnown) => {\n\n                function throwCatchedError(err: unknown) {\n                    return throwError({\n                        status   : 500,\n                        message  : err ? toString(err) : 'Error parsing token from auth response!',\n                        errorType: ErrorType.AUTH\n                    });\n                }\n\n                try {\n                    const tokenData: TokenData = JwtHelper.decodeToken(token);\n\n                    // Check expiration\n                    return AuthService.checkTokenExpiration(token).pipe(\n                        // Check nonce\n                        switchMap(() => this.checkTokenNonce(tokenData)),\n\n                        // Check issuer\n                        switchMap(() => AuthService.checkTokenIssuer(tokenData, wellKnown)),\n\n                        // Check audience\n                        switchMap(() => this.checkTokenAudience(tokenData)),\n\n                        map(() => tokenData),\n                        catchError(throwCatchedError)\n                    );\n                } catch (err) {\n                    return throwCatchedError(err);\n                }\n            }));\n    }\n\n    private static checkTokenExpiration(token: string): Observable<void> {\n        if (JwtHelper.isTokenExpired(token)) {\n            return throwError({\n                status   : 500,\n                message  : 'Invalid token expiration!',\n                errorType: ErrorType.AUTH\n            });\n        }\n        return of(undefined);\n    }\n\n    private checkTokenNonce(tokenData: TokenData): Observable<void> {\n        if (this.authConfig.useNonce) {\n            switch (this.authConfig.flow) {\n                case AuthFlow.AUTHORIZATION_CODE:\n                case AuthFlow.HYBRID:\n                case AuthFlow.IMPLICIT:\n                    if (tokenData.nonce !== this.storage.nonce) {\n                        return throwError({\n                            status   : 500,\n                            message  : 'Non-matching nonce!',\n                            errorType: ErrorType.AUTH\n                        });\n                    }\n                    break;\n                case AuthFlow.DIRECT:\n                    // No check here - nonce not supported\n                    break;\n                default:\n                    return throwError({\n                        status   : 500,\n                        message  : UNSUPPORTED_AUTH_FLOW_TYPE,\n                        errorType: ErrorType.AUTH\n                    });\n            }\n        }\n\n        return of(undefined);\n    }\n\n    private static checkTokenIssuer(tokenData: TokenData, wellKnown: WellKnown): Observable<void> {\n        if (tokenData.iss !== wellKnown.issuer) {\n            return throwError({\n                status   : 500,\n                message  : 'Invalid token issuer!',\n                errorType: ErrorType.AUTH\n            });\n        }\n\n        return of(undefined);\n    }\n\n    private checkTokenAudience(tokenData: TokenData): Observable<void> {\n        if (Array.isArray(tokenData.aud)) {\n            if (!tokenData.aud.some((aud: string) => aud === this.authConfig.clientID)\n                || tokenData.azp !== this.authConfig.clientID) {\n                return throwError({\n                    status   : 500,\n                    message  : 'Invalid token audience!',\n                    errorType: ErrorType.AUTH\n                });\n            }\n\n        } else if (tokenData.aud !== this.authConfig.clientID) {\n            return throwError({\n                status   : 500,\n                message  : 'Invalid token audience!',\n                errorType: ErrorType.AUTH\n            });\n        }\n\n        return of(undefined);\n    }\n\n    // </editor-fold>\n}\n","import {HTTP_INTERCEPTORS} from '@angular/common/http';\nimport {Provider} from '@angular/core';\nimport {AUTH_PROVIDER} from '@dbg-riskit/angular-common';\nimport {AUTH_CONFIG, AuthConfig} from './auth.config';\nimport {AuthHttpInterceptor} from './auth.http.interceptor';\nimport {AuthService} from './auth.service';\n\nexport function provideAuthService(config: () => AuthConfig): Provider[] {\n    return [\n        {\n            provide   : AUTH_CONFIG,\n            useFactory: config\n        },\n        {\n            provide    : AUTH_PROVIDER,\n            useExisting: AuthService\n        },\n        {\n            provide : HTTP_INTERCEPTORS,\n            useClass: AuthHttpInterceptor,\n            multi   : true\n        }\n    ];\n}\n","import {inject, Injectable} from '@angular/core';\nimport {Router, RouterStateSnapshot} from '@angular/router';\nimport {HttpService} from '@dbg-riskit/angular-http';\nimport {defer, EMPTY, merge, Observable, of} from 'rxjs';\nimport {defaultIfEmpty, first, map, switchMap} from 'rxjs/operators';\nimport {AUTH_CONFIG, AuthConfig, AuthFlow} from './auth.config';\nimport {AuthService} from './auth.service';\nimport {AuthStorageService} from './auth.storage.service';\nimport {RequestUtils} from './request.utils';\nimport {WellKnownService} from './well.known.service';\n\n@Injectable({providedIn: 'root'})\nexport class AuthRoutingFlowService {\n    private readonly router = inject(Router);\n    private readonly http = inject(HttpService);\n    private readonly authService = inject(AuthService);\n    private readonly storage = inject(AuthStorageService);\n    private readonly authConfig = inject<AuthConfig>(AUTH_CONFIG);\n    private readonly wellKnownService = inject(WellKnownService);\n\n    public constructor() {\n        // Subscribe for login changes so we do correct navigation after logout\n        this.authService.loggedIn\n            .subscribe(\n                () => {\n                    try {\n                        merge(this.http.unauthorized.pipe(map(() => false)),\n                            this.authService.loggedInStream)\n                            .subscribe((loggedIn: boolean) => {\n                                if (!loggedIn) {\n                                    this.logout().pipe(first()).subscribe();\n                                }\n                            });\n                    } catch (ignore) {\n                        // Happens in tests only\n                    }\n                });\n    }\n\n    public get authFlow(): AuthFlow {\n        return this.authConfig.flow;\n    }\n\n    public get authorizationCodeFlow(): boolean {\n        return this.authFlow === AuthFlow.AUTHORIZATION_CODE;\n    }\n\n    public get implicitFlow(): boolean {\n        return this.authFlow === AuthFlow.IMPLICIT;\n    }\n\n    public get hybridFlow(): boolean {\n        return this.authFlow === AuthFlow.HYBRID;\n    }\n\n    public get directFlow(): boolean {\n        return this.authFlow === AuthFlow.DIRECT;\n    }\n\n    public logout(state?: RouterStateSnapshot): Observable<boolean> {\n        return this.authService.loggedIn.pipe(\n            switchMap((res: boolean) => {\n                if (res) {\n                    return this.authService.logout();\n                }\n                return EMPTY;\n            }),\n            defaultIfEmpty(0),\n            switchMap(() => {\n                this.storeRequestedPath(state);\n                return this.doLogin();\n            })\n        );\n    }\n\n    public login(username?: string, password?: string): Observable<boolean> {\n        return defer(() => {\n            switch (this.authFlow) {\n                case AuthFlow.DIRECT:\n                    if (username == null || password == null) {\n                        throw new Error('Username and password expexted!');\n                    }\n                    return this.authService.directLogin(username, password).pipe(\n                        switchMap((res: boolean) => this.loginRedirect(res))\n                    );\n                case AuthFlow.AUTHORIZATION_CODE:\n                case AuthFlow.IMPLICIT:\n                case AuthFlow.HYBRID:\n                    return this.doLogin();\n                default:\n                    throw new Error('Unsupported auth flow detected!');\n            }\n        });\n    }\n\n    public loginViaService(): Observable<boolean> {\n        return this.authService.loggedIn.pipe(\n            switchMap((res: boolean) => {\n                switch (this.authFlow) {\n                    case AuthFlow.AUTHORIZATION_CODE:\n                    case AuthFlow.IMPLICIT:\n                    case AuthFlow.HYBRID:\n                        if (res) {\n                            return this.loginRedirect(res);\n                        }\n                        if (!RequestUtils.hasOpenIDQueryParams()) {\n                            return this.doLogin().pipe(map(() => res));\n                        }\n                        return this.authService.checkLocationForLoginData().pipe(\n                            switchMap((loggedIn: boolean) => this.loginRedirect(loggedIn))\n                        );\n                    case AuthFlow.DIRECT:\n                        return of(true);\n                    default:\n                        throw new Error('Unknown auth flow detected!');\n                }\n            })\n        );\n    }\n\n    public storeRequestedPath(state: RouterStateSnapshot = this.router.routerState.snapshot): void {\n        if (state.url.startsWith(this.authConfig.loginRoute)) {\n            this.storage.authRequestedPath = null;\n        } else {\n            this.storage.authRequestedPath = state.url;\n        }\n    }\n\n    private loginRedirect(res: boolean): Observable<boolean> {\n        return this.wellKnownService.wellKnown.pipe(\n            switchMap(() => {\n                if (res) {\n                    if (this.storage.authRequestedPath) {\n                        this.router.navigateByUrl(this.storage.authRequestedPath);\n                        this.storage.authRequestedPath = null;\n                    } else {\n                        this.router.navigate([this.authConfig.afterLoginRedirectRoute]);\n                    }\n                    return of(res);\n                } else {\n                    return this.doLogin().pipe(map(() => res));\n                }\n            })\n        );\n    }\n\n    private doLogin(): Observable<boolean> {\n        switch (this.authFlow) {\n            case  AuthFlow.DIRECT:\n                return this.wellKnownService.wellKnown.pipe(\n                    map(() => {\n                        this.router.navigate([this.authConfig.loginRoute]);\n                        return true;\n                    })\n                );\n            case AuthFlow.AUTHORIZATION_CODE:\n            case AuthFlow.IMPLICIT:\n            case AuthFlow.HYBRID:\n                return this.authService.loginViaAuthService();\n            default:\n                throw new Error('Unknown auth flow detected!');\n        }\n    }\n}\n","import {inject} from '@angular/core';\nimport {CanActivateFn, Router} from '@angular/router';\nimport {of} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\nimport {AuthRoutingFlowService} from './auth.routing.flow.service';\nimport {AuthService} from './auth.service';\n\nexport const authGuard = () => {\n    const authService = inject(AuthService);\n    const authRoutingFlowService = inject(AuthRoutingFlowService);\n    const router = inject(Router);\n    return authService.loggedIn.pipe(\n        switchMap((res: boolean) => {\n            if (res) {\n                return of(true);\n            }\n\n            return authRoutingFlowService.logout(router.routerState.snapshot).pipe(\n                map(() => false)\n            );\n        })\n    );\n};\n\n// Check we implement the interface correctly\nexport const ɵauthGuard: CanActivateFn = authGuard;\n","import {AuthConfig, AuthFlow, AuthFlowNames, AuthSpecScopes} from './auth.config';\n\ndeclare namespace window {\n    let authWellKnownEndpoint: string;\n    let authClientID: string;\n    let authClientSecret: string;\n    let authUseNonce: boolean;\n    let authScopes: AuthSpecScopes[];\n    let authFlow: AuthFlowNames;\n}\n\nexport type PartialAuthConfig = Pick<AuthConfig, Exclude<keyof AuthConfig, 'loginRoute' | 'afterLoginRedirectRoute'>>;\n\nexport function readAuthConfig(): PartialAuthConfig {\n    return {\n        wellKnown   : window.authWellKnownEndpoint,\n        clientID    : window.authClientID,\n        clientSecret: window.authClientSecret,\n        flow        : AuthFlow.byType(window.authFlow),\n        scope       : window.authScopes,\n        useNonce    : window.authUseNonce == null ? true : window.authUseNonce\n    };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;MAQa,QAAQ,CAAA;aACO,IAAA,CAAA,aAAa,GAAgC,EAAE,CAAC;AACjD,IAAA,SAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,QAAQ,CAAC,mCAAmC,CAAC,CAAC;AACvE,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACnD,IAAA,SAAA,IAAA,CAAA,MAAM,GAAG,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAC/C,IAAA,SAAA,IAAA,CAAA,MAAM,GAAG,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAEtE,IAAA,WAAA,CAAqC,KAAa,EAAA;QAAb,IAAA,CAAA,KAAK,GAAL,KAAK;AACtC,QAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI;IACxC;AAEA,IAAA,IAAW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,KAAK;IACrB;IAEO,OAAO,MAAM,CAAC,IAAmB,EAAA;AACpC,QAAA,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;IACvC;;MAgBS,WAAW,GAAG,IAAI,cAAc,CAAa,iBAAiB;;ACzC3E;;AAEG;AAIH;MACa,SAAS,CAAA;IAEX,OAAO,WAAW,CAAC,KAAa,EAAA;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAE9B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;QAC5C;QAEA,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC9C;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9B;AAEO,IAAA,OAAO,sBAAsB,CAAC,KAAa,EACb,WAAiD,KAAK,EAAA;QAEvF,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;QAE5C,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI;QACf;QAEA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErC,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,OAAO,cAAc,CAAC,KAAa,EAAE,aAAsB,EAAA;QAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,sBAAsB,CAAC,KAAK,CAAC;QACpD,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAClD;AAEO,IAAA,OAAO,QAAQ,CAAC,IAAiB,EAAE,aAAsB,EAAA;AAC5D,QAAA,aAAa,GAAG,aAAa,IAAI,CAAC;AAElC,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AACd,YAAA,OAAO,KAAK;QAChB;;AAGA,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,aAAa,GAAG,IAAI,CAAC,CAAC;IAC3E;AACH;AAEK,SAAU,eAAe,CAAC,OAAkB,EAAA;;IAE9C,OAAO,CAAA,CAAA,EAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA,CAAA,CAAG;AACvD;;MCpDa,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAEqB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAoF3C,IAAA;IAhEU,QAAQ,GAAA;AACX,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC;QACrD,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,QAAQ,GAAG,CAAC,KAAY;YAC/D,IAAI,KAAK,EAAE;gBACP,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;AAC9C,gBAAA,IAAI,SAAS,CAAC,GAAG,EAAE;AACf,oBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG;AAChC,oBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACrC,wBAAA,OAAO,IAAI;oBACf;gBACJ;YACJ;AACA,YAAA,OAAO,QAAQ;AACnB,QAAA,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;AACtE,QAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC;AACvE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;IAC5D;AAEA,IAAA,IAAY,GAAG,GAAA;QACX,MAAM,iBAAiB,GAAG,CAAC,KAAoB,EAAE,IAAA,GAAoB,IAAI,KAAiB;YACtF,IAAI,KAAK,EAAE;gBACP,MAAM,QAAQ,GAAG,SAAS,CAAC,sBAAsB,CAAC,KAAK,CAAC;gBACxD,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClC,oBAAA,OAAO,QAAQ;gBACnB;AAEA,gBAAA,IAAI,IAAI,GAAG,QAAQ,EAAE;AACjB,oBAAA,OAAO,QAAQ;gBACnB;YACJ;AACA,YAAA,OAAO,IAAI;AACf,QAAA,CAAC;QAED,IAAI,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QACzC,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAC9C,OAAO,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC;IACpD;AAEA,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,CAAC,GAAG,EAAE;AACN,YAAA,OAAO,CAAC;QACZ;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,QAAQ;AAChF,QAAA,MAAM,SAAS,GAAG,UAAU,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,uBAAA,EAA0B,SAAS,CAAA,EAAA,CAAI,CAAC;AAEzD,QAAA,OAAO,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC;IACjD;IAEO,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACrB;+GApFS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADN,MAAM,EAAA,CAAA,CAAA;;AAKpB,UAAA,CAAA;AADN,IAAA,YAAY,CAAC,UAAU,EAAE,MAAM;AACD,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;AAGxB,UAAA,CAAA;AADN,IAAA,YAAY,CAAC,cAAc,EAAE,MAAM;AACD,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA;AAG5B,UAAA,CAAA;AADN,IAAA,YAAY,CAAC,eAAe,EAAE,MAAM;AACD,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA;AAG5B,UAAA,CAAA;AADP,IAAA,YAAY,CAAC,WAAW,EAAE,MAAM;AACK,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA;AAG/B,UAAA,CAAA;AADN,IAAA,YAAY,CAAC,OAAO,EAAE,MAAM;AACA,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AAGtB,UAAA,CAAA;AADN,IAAA,YAAY,CAAC,UAAU,EAAE,MAAM;AACS,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA;4FAnBhC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MCCnB,gBAAgB,CAAA;aACX,IAAA,CAAA,mBAAmB,GAAG,eAAe,CAAC;aACtC,IAAA,CAAA,oBAAoB,GAAG,SAAS,CAAC;;MAItC,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAEqB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAkB5D,IAAA;IAhBU,SAAS,CAAC,OAA6B,EAAE,IAAiB,EAAA;QAC7D,OAAO,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,OAAO,CAAC,OAAO,YAAY,kBAAkB,EAAE;AAC/C,gBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS;gBAC3C,QAAQ,SAAS;oBACb,KAAK,aAAa,CAAC,GAAG;AAClB,wBAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;oBACtE,KAAK,aAAa,CAAC,IAAI;AACnB,wBAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAC1E,oBAAA;AACI,wBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;;YAEvC;AACA,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAC/B,QAAA,CAAC,CAAC;IACN;+GAlBS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;AAsBD,SAAS,kBAAkB,CAAC,KAAoB,EAAE,OAA6B,EACnD,IAAiB,EAAA;IACzC,IAAI,KAAK,EAAE;AACP,QAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AACpB,YAAA,UAAU,EAAE;gBACR,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,CAAA,EAAG,gBAAgB,CAAC,oBAAoB,CAAA,EAAG,KAAK,CAAA;AAC3F;AACJ,SAAA,CAAC;IACN;AACA,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAC/B;;ACzCA;MACa,cAAc,CAAA;AAEhB,IAAA,OAAO,aAAa,GAAA;QACvB,OAAO,KAAK,CAAC,MAAK;YACd,MAAM,UAAU,GAAG,kCAAkC;YACrD,MAAM,GAAG,GAAG,kBAAkB;YAC9B,IAAI,CAAC,GAAG,CAAC;YACT,IAAI,YAAY,GAAG,EAAE;AACrB,YAAA,KAAK,MAAM,WAAW,IAAI,UAAU,EAAE;gBAClC,IAAI,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,GAAG,EAAE;;oBAE5C,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC;gBACvC;AAEA,gBAAA,IAAI,WAAW,KAAK,GAAG,EAAE;AACrB,oBAAA,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC;gBAC1B;AAAO,qBAAA,IAAI,WAAW,KAAK,GAAG,EAAE;;;AAK5B,oBAAA,CAAC,IAAI,GAAG,CAAC;AACT,oBAAA,CAAC,IAAI,GAAG,CAAC;;AAIT,oBAAA,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC;gBAC1B;qBAAO;oBACH,YAAY,IAAI,WAAW;gBAC/B;YACJ;AACA,YAAA,OAAO,EAAE,CAAC,YAAY,CAAC;AAC3B,QAAA,CAAC,CAAC;IACN;AACH;;AC5BD;MACa,YAAY,CAAA;AAEd,IAAA,WAAW,YAAY,GAAA;AAC1B,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI;IAC/B;IAEO,WAAW,YAAY,CAAC,IAAmB,EAAA;QAC9C,IAAI,IAAI,EAAE;AACN,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI;QAC/B;IACJ;IAEQ,OAAO,UAAU,CAAC,IAAY,EAAA;QAClC,MAAM,IAAI,GAAsB,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC3D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,OAAO,IAAI,CAAC,QAAQ;IACxB;AAEO,IAAA,OAAO,SAAS,GAAA;QACnB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;QACnE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAA,EAAA,EAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC;IACxG;AAEO,IAAA,OAAO,UAAU,CAAC,QAAkB,EAAE,WAAW,GAAG,GAAG,EAAA;QAC1D,IAAI,OAAO,GAAG,EAAE;QAChB,IAAI,QAAQ,EAAE;AACV,YAAA,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACvE;QACA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC1B,YAAA,OAAO,GAAG,GAAG,GAAG,OAAO;QAC3B;QACA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxB,OAAO,IAAI,GAAG;QAClB;AACA,QAAA,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC7B,YAAA,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1C;AAEA,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE;AACvC,QAAA,OAAO,MAAM,GAAG,OAAO,GAAG,WAAW;IACzC;IAEO,OAAO,aAAa,CAAC,IAAY,EAAA;AACpC,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY;QACrC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAA,iBAAA,CAAmB,CAAC;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,OAAO,IAAI;QACf;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACb,YAAA,OAAO,EAAE;QACb;AACA,QAAA,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7D;AAEO,IAAA,OAAO,oBAAoB,GAAA;QAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;QACjD,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,mBAAmB,CAAC;QACjE,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;QAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC;QACtD,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC,cAAc,CAAC;QAC9D,OAAO;YACH,KAAK;YACL,SAAS;YACT,IAAI;AACJ,YAAA,QAAQ,EAAM,OAAO;AACrB,YAAA,YAAY,EAAE;SACjB;IACL;AAEO,IAAA,OAAO,oBAAoB,GAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,oBAAoB,EAAE;AAClD,QAAA,OAAO,MAAM,CAAC,KAAK,IAAI;eACb,MAAM,CAAC,SAAS,IAAI;eACpB,MAAM,CAAC,IAAI,IAAI;eACf,MAAM,CAAC,QAAQ,IAAI;AACnB,eAAA,MAAM,CAAC,YAAY,IAAI,IAAI;IACzC;AACH;;MCzEY,gBAAgB,CAAA;AAMzB,IAAA,WAAA,GAAA;AALiB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAa,WAAW,CAAC;AAKzD,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAK5B,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YAC1B,MAAM;YACN,OAAO,EAAE,IAAI,WAAW,CAAC;gBACrB,MAAM,EAAE,YAAY,CAAC;aACxB;SACJ,CAAC,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,SAAS,MACN;AACI,YAAA,SAAS,EAAE;gBACP,IAAI,EAAI,SAAS,CAAC,sBAAsB;gBACxC,KAAK,EAAG,SAAS,CAAC,cAAc;gBAChC,MAAM,EAAE,SAAS,CAAC;AACrB,aAAA;YACD,MAAM,EAAK,SAAS,CAAC;AACxB,SAAA,CACJ,CACJ,EACD,WAAW,CAAC,CAAC,CAAC,CACjB;IACL;AAEA,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU;IAC1B;+GArCS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADJ,MAAM,EAAA,CAAA,CAAA;;4FAClB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACFzB,MAAM,mBAAmB,GAAG,KAAK;AAExC,MAAM,aAAa,GAAG,QAAQ;AAC9B,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;AAEvE,MAAM,0BAA0B,GAAG,6BAA6B;AAEhE,SAAS,wBAAwB,GAAA;AAC7B,IAAA,OAAO,IAAI,KAAK,CAAC,0BAA0B,CAAC;AAChD;MAGa,WAAW,CAAA;AAiBpB,IAAA,WAAA,GAAA;AAhBiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAa,WAAW,CAAC;AAC5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AAC1B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAEpC,QAAA,IAAA,CAAA,eAAe,GAA8B,IAAI,gBAAgB,CAAU,CAAC,CAAC;AAY1F,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAGjC,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,KAAK;AAE7D,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAChF,IAAI,CAAC,WAAW,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;QAGpG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACpD,SAAS,CAAC,CAAC,SAAoB,KAAK,IAAI,CAAC,YAAY,CAAC;AAC9C,YAAA,QAAQ,EAAO,IAAI,CAAC,OAAO,CAAC,OAAO;AACnC,YAAA,YAAY,EAAG,IAAI,CAAC,OAAO,CAAC,WAAW;AACvC,YAAA,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC;SAC/B,EAAE,KAAK,CAAC;AACJ,aAAA,IAAI,CACD,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,EACrC,cAAc,CAAC,CAAC,CAAC,EACjB,GAAG,CAAC,MAAM,SAAS,CAAC,CACvB,CACR,EACD,WAAW,CAAC,CAAC,CAAC,CACjB;IACL;AAEA,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CACzB,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAC9B;IACL;AAEA,IAAA,IAAW,WAAW,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CACzB,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAC5B;IACL;AAEA,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IAC9C;AAEO,IAAA,qBAAqB,CAAC,MAAe,EAAA;QACxC,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,KAAK,MAAM,EAAE;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;QACrC;IACJ;;IAIO,mBAAmB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,SAAS,CAAC,CAAC,SAAoB,KAC3B,cAAc,CAAC,aAAa,EAAE,CAAC,IAAI,CAC/B,GAAG,CAAC,CAAC,KAAK,MAAM;YACZ,SAAS;YACT;AACH,SAAA,CAAC,CAAC,CACN,CACJ,EACD,GAAG,CAAC,CAAC,EACI,SAAS,EACT,KAAK,EACR,KAAI;AACN,YAAA,IAAI,YAAoB;AACxB,YAAA,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI;gBACxB,KAAK,QAAQ,CAAC,kBAAkB;oBAC5B,YAAY,GAAG,MAAM;oBACrB;gBACJ,KAAK,QAAQ,CAAC,QAAQ;oBAClB,YAAY,GAAG,gBAAgB;oBAC/B;gBACJ,KAAK,QAAQ,CAAC,MAAM;oBAChB,YAAY,GAAG,eAAe;oBAC9B;AACJ,gBAAA;oBACI,MAAM,wBAAwB,EAAE;;AAExC,YAAA,IAAI,QAAQ,GAAG,CAAA,EAAG,SAAS,CAAC,SAAS,CAAC,IACtC,CAAA,eAAA,EAAkB,kBAAkB,CAAC,YAAY,CACjD,CAAA,OAAA,EAAU,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAC7C,cAAc,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CACzD,CAAA,cAAA,EAAiB,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACvD,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC1B,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK;AAC1B,gBAAA,QAAQ,IAAI,CAAA,OAAA,EAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE;YACrD;AACA,YAAA,YAAY,CAAC,YAAY,GAAG,QAAQ;AACpC,YAAA,OAAO,IAAI;QACf,CAAC,CAAC,CACL;IACL;IAEO,yBAAyB,GAAA;QAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,SAAS,CAAC,MAAK;AACX,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,oBAAoB,EAAE;AAElD,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AACd,gBAAA,OAAO,UAAU,CAAC;oBACd,OAAO,EAAI,IAAI,MAAM,CAAC,KAAK,CAAA,EAAA,EAAK,MAAM,CAAC,SAAS,CAAA,CAAE;AAClD,oBAAA,MAAM,EAAK,GAAG;oBACd,SAAS,EAAE,SAAS,CAAC;AACxB,iBAAA,CAAC;YACN;AAEA,YAAA,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI;gBACxB,KAAK,QAAQ,CAAC,MAAM;AAChB,oBAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;gBACjD,KAAK,QAAQ,CAAC,kBAAkB;AAC5B,oBAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC;gBACnD,KAAK,QAAQ,CAAC,QAAQ;AAClB,oBAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC;AACnD,gBAAA;AACI,oBAAA,OAAO,UAAU,CAAC,wBAAwB,EAAE,CAAC;;QAEzD,CAAC,CAAC,CACL;IACL;AAEQ,IAAA,yBAAyB,CAAC,MAAyB,EAAA;QACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAClC,YAAA,OAAO,UAAU,CAAC;AACd,gBAAA,OAAO,EAAI,mDAAmD;AAC9D,gBAAA,MAAM,EAAK,GAAG;gBACd,SAAS,EAAE,SAAS,CAAC;AACxB,aAAA,CAAC;QACN;;QAEA,OAAO,IAAI,CAAC,YAAY,CAAC;YACrB,QAAQ,EAAE,MAAM,CAAC;AACpB,SAAA,CAAC,CAAC,IAAI,CACH,GAAG,CAAC,MAAK;;AAEL,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAC7D,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAClC,CAAC,SAAS,CAAC,CAAC,UAAmB,KAAI;gBAChC,IAAI,CAAC,UAAU,EAAE;AACb,oBAAA,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;gBAC3C;AACJ,YAAA,CAAC,CAAC;QACN,CAAC,CAAC,CACL;IACL;AAEQ,IAAA,2BAA2B,CAAC,MAAyB,EAAA;AACzD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACd,YAAA,OAAO,UAAU,CAAC;AACd,gBAAA,OAAO,EAAI,mDAAmD;AAC9D,gBAAA,MAAM,EAAK,GAAG;gBACd,SAAS,EAAE,SAAS,CAAC;AACxB,aAAA,CAAC;QACN;;AAEA,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;IACtE;AAEQ,IAAA,2BAA2B,CAAC,MAAyB,EAAA;QACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC1C,YAAA,OAAO,UAAU,CAAC;AACd,gBAAA,OAAO,EAAI,mDAAmD;AAC9D,gBAAA,MAAM,EAAK,GAAG;gBACd,SAAS,EAAE,SAAS,CAAC;AACxB,aAAA,CAAC;QACN;;QAEA,OAAO,IAAI,CAAC,YAAY,CAAC;YACrB,QAAQ,EAAM,MAAM,CAAC,QAAQ;YAC7B,YAAY,EAAE,MAAM,CAAC;AACxB,SAAA,CAAC;IACN;IAEQ,uBAAuB,CAAC,IAAY,EAAE,WAAmB,EAAA;QAC7D,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,SAAS,CAAC,CAAC,SAAoB,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAe;AAC7D,YAAA,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK;AACtC,YAAA,IAAI,EAAS,WAAW,CAAC,YAAY,CAAC;gBAClC,IAAI;AACJ,gBAAA,YAAY,EAAG,WAAW;AAC1B,gBAAA,UAAU,EAAK,oBAAoB;AACnC,gBAAA,KAAK,EAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI;AACnE,gBAAA,SAAS,EAAM,IAAI,CAAC,UAAU,CAAC,QAAQ;AACvC,gBAAA,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC;aAClC,CAAC;YACF,SAAS,EAAI,aAAa,CAAC,IAAI;YAC/B,QAAQ,EAAK,EAAE;AAClB,SAAA,CAAC,CAAC,EACH,SAAS,CAAC,CAAC,QAAsB,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CACrE;IACL;;;IAMO,WAAW,CAAC,QAAgB,EAAE,QAAgB,EAAA;QACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,SAAS,CAAC,CAAC,SAAoB,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAe;AAC7D,YAAA,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK;AACtC,YAAA,IAAI,EAAS,WAAW,CAAC,YAAY,CAAC;gBAClC,QAAQ;gBACR,QAAQ;AACR,gBAAA,UAAU,EAAK,UAAU;gBACzB,KAAK,EAAU,IAAI,CAAC,WAAW;AAC/B,gBAAA,SAAS,EAAM,IAAI,CAAC,UAAU,CAAC,QAAQ;AACvC,gBAAA,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC;aAClC,CAAC;YACF,SAAS,EAAI,aAAa,CAAC,IAAI;YAC/B,QAAQ,EAAK,EAAE;AAClB,SAAA,CAAC,CAAC,EACH,SAAS,CAAC,CAAC,QAAsB,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CACrE;IACL;;AAIO,IAAA,YAAY,CAAC,QAAsB,EAAE,QAAQ,GAAG,IAAI,EAAA;QACvD,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,SAAS,CAAC,MAAK;AACX,YAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE;AACtC,gBAAA,OAAO,UAAU,CAAC;AACd,oBAAA,MAAM,EAAK,GAAG;AACd,oBAAA,OAAO,EAAI,qBAAqB;oBAChC,SAAS,EAAE,SAAS,CAAC;AACxB,iBAAA,CAAC;YACN;AACA,YAAA,IAAI,WAAW,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE;AACjD,gBAAA,OAAO,UAAU,CAAC;AACd,oBAAA,MAAM,EAAK,GAAG;AACd,oBAAA,OAAO,EAAI,qBAAqB;oBAChC,SAAS,EAAE,SAAS,CAAC;AACxB,iBAAA,CAAC;YACN;YAEA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACtD,CAAC,CAAC,CACL;IACL;AAEQ,IAAA,qBAAqB,CAAC,QAAsB,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK;IAC9F;IAEQ,OAAO,yBAAyB,CAAC,QAAsB,EAAA;AAC3D,QAAA,OAAO,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,KAAK,QAAQ;IACtF;IAEQ,kBAAkB,CAAC,QAAsB,EAAE,QAAiB,EAAA;AAChE,QAAA,IAAI,QAAQ,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC3B,YAAA,OAAO,UAAU,CAAC;AACd,gBAAA,MAAM,EAAK,GAAG;AACd,gBAAA,OAAO,EAAI,yDAAyD;gBACpE,SAAS,EAAE,SAAS,CAAC;AACxB,aAAA,CAAC;QACN;QAEA,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,QAAQ;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CACpD,GAAG,CAAC,CAAC,SAAoB,KAAI;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC9B,CAAC,CAAC,CACL;AACD,QAAA,IAAI,QAAQ,CAAC,YAAY,IAAI,IAAI,EAAE;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAa,CAAC,CAAC,CAAC;QAC3E;AACA,QAAA,OAAO,KAAK,CAAC,IAAI,CACb,GAAG,CAAC,MAAK;;YAEL,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,QAAQ;YACxC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC,YAAY;AAChD,YAAA,IAAI,QAAQ,CAAC,aAAa,EAAE;gBACxB,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa;YACtD;YACA,IAAI,QAAQ,EAAE;;;;AAIV,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC3B;YACA,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,OAAO,IAAI;QACf,CAAC,CAAC,CACL;IACL;IAEQ,UAAU,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI;YACxB,KAAK,QAAQ,CAAC,MAAM;YACpB,KAAK,QAAQ,CAAC,kBAAkB;gBAC5B,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,iBAAiB,EAAE;AACxB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;gBAChC;YACJ,KAAK,QAAQ,CAAC,MAAM;AAChB,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;oBAC1B,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,CAAC,iBAAiB,EAAE;gBAC5B;AACA,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;gBAChC;YACJ,KAAK,QAAQ,CAAC,QAAQ;gBAClB,IAAI,CAAC,cAAc,EAAE;AACrB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;gBAChC;AACJ,YAAA;gBACI,MAAM,wBAAwB,EAAE;;IAE5C;IAEO,MAAM,GAAA;QACT,MAAM,MAAM,GAAG,MAAK;;YAEhB,OAAO,IAAI,CAAC,SAAS;AACrB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACjC,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC;AACD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;QACpC,IAAI,OAAO,EAAE;;YAET,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,SAAS,CAAC,CAAC,SAAoB,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAO;AACpD,gBAAA,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM;AACvC,gBAAA,MAAM,EAAO;AACT,oBAAA,aAAa,EAAE;AAClB,iBAAA;gBACD,SAAS,EAAI,aAAa,CAAC,IAAI;gBAC/B,QAAQ,EAAK,EAAE;AAClB,aAAA,CAAC,CAAC,EACH,UAAU,CAAC,MAAM,CAAC,EAClB,SAAS,CAAC,MAAM,CAAC,CACpB;QACL;aAAO;AACH,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,UAAU,CAAC,MAAM,CAAC,EAClB,SAAS,CAAC,MAAM,CAAC,CACpB;QACL;IACJ;;IAIQ,cAAc,GAAA;QAClB,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,mBAAmB,CAAC;IACrF;IAEQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE;AAChC,YAAA,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QACjC;IACJ;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAChC,SAAS,CAAC,MAAK;YACX,IAAI,CAAC,IAAI,CAAC;AACH,mBAAA,CAAC,IAAI,CAAC,OAAO,CAAC;AACd,mBAAA,CAAC,IAAI,CAAC,OAAO,CAAC;AACd,mBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE;AACjC,gBAAA,OAAO,IAAI,CAAC,MAAM,EAAE;YACxB;AACA,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACnB,QAAA,CAAC,CAAC,CACL,CAAC,SAAS,EAAE;IACjB;;;IAMQ,iBAAiB,GAAA;QACrB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACxF;IAEQ,mBAAmB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;AAC7B,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC9B;IACJ;IAEQ,YAAY,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,SAAS,CAAC,CAAC,SAAoB,KAAI;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AAC5B,gBAAA,OAAO,UAAU,CAAC;AACd,oBAAA,OAAO,EAAI,mCAAmC;AAC9C,oBAAA,MAAM,EAAK,GAAG;oBACd,SAAS,EAAE,SAAS,CAAC;AACxB,iBAAA,CAAC;YACN;AACA,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAe;AAChC,gBAAA,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK;AACtC,gBAAA,IAAI,EAAS,WAAW,CAAC,YAAY,CAAC;AAClC,oBAAA,UAAU,EAAK,eAAe;AAC9B,oBAAA,SAAS,EAAM,IAAI,CAAC,UAAU,CAAC,QAAQ;AACvC,oBAAA,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY;AAC3C,oBAAA,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC;iBAC/B,CAAC;gBACF,SAAS,EAAI,aAAa,CAAC,IAAI;gBAC/B,QAAQ,EAAK,EAAE;AAClB,aAAA,CAAC;AACN,QAAA,CAAC,CAAC,EACF,SAAS,CAAC,CAAC,QAAsB,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAClE,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAC9B;IACL;IAEO,YAAY,GAAA;QACf,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CACpB,SAAS,CAAC,CAAC,SAAkB,KAAI;YAC7B,IAAI,CAAC,SAAS,EAAE;AACZ,gBAAA,OAAO,IAAI,CAAC,MAAM,EAAE;YACxB;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC,CACL,CAAC,SAAS,EAAE;IACjB;;;AAMQ,IAAA,aAAa,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,SAAS,CAAC,CAAC,SAAoB,KAAI;YAE/B,SAAS,iBAAiB,CAAC,GAAY,EAAA;AACnC,gBAAA,OAAO,UAAU,CAAC;AACd,oBAAA,MAAM,EAAK,GAAG;AACd,oBAAA,OAAO,EAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,yCAAyC;oBAC1E,SAAS,EAAE,SAAS,CAAC;AACxB,iBAAA,CAAC;YACN;AAEA,YAAA,IAAI;gBACA,MAAM,SAAS,GAAc,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;;AAGzD,gBAAA,OAAO,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,IAAI;;gBAE/C,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;;AAGhD,gBAAA,SAAS,CAAC,MAAM,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;gBAGnE,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAEnD,GAAG,CAAC,MAAM,SAAS,CAAC,EACpB,UAAU,CAAC,iBAAiB,CAAC,CAChC;YACL;YAAE,OAAO,GAAG,EAAE;AACV,gBAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC;YACjC;QACJ,CAAC,CAAC,CAAC;IACX;IAEQ,OAAO,oBAAoB,CAAC,KAAa,EAAA;AAC7C,QAAA,IAAI,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AACjC,YAAA,OAAO,UAAU,CAAC;AACd,gBAAA,MAAM,EAAK,GAAG;AACd,gBAAA,OAAO,EAAI,2BAA2B;gBACtC,SAAS,EAAE,SAAS,CAAC;AACxB,aAAA,CAAC;QACN;AACA,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC;IACxB;AAEQ,IAAA,eAAe,CAAC,SAAoB,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC1B,YAAA,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI;gBACxB,KAAK,QAAQ,CAAC,kBAAkB;gBAChC,KAAK,QAAQ,CAAC,MAAM;gBACpB,KAAK,QAAQ,CAAC,QAAQ;oBAClB,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACxC,wBAAA,OAAO,UAAU,CAAC;AACd,4BAAA,MAAM,EAAK,GAAG;AACd,4BAAA,OAAO,EAAI,qBAAqB;4BAChC,SAAS,EAAE,SAAS,CAAC;AACxB,yBAAA,CAAC;oBACN;oBACA;gBACJ,KAAK,QAAQ,CAAC,MAAM;;oBAEhB;AACJ,gBAAA;AACI,oBAAA,OAAO,UAAU,CAAC;AACd,wBAAA,MAAM,EAAK,GAAG;AACd,wBAAA,OAAO,EAAI,0BAA0B;wBACrC,SAAS,EAAE,SAAS,CAAC;AACxB,qBAAA,CAAC;;QAEd;AAEA,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC;IACxB;AAEQ,IAAA,OAAO,gBAAgB,CAAC,SAAoB,EAAE,SAAoB,EAAA;QACtE,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,MAAM,EAAE;AACpC,YAAA,OAAO,UAAU,CAAC;AACd,gBAAA,MAAM,EAAK,GAAG;AACd,gBAAA,OAAO,EAAI,uBAAuB;gBAClC,SAAS,EAAE,SAAS,CAAC;AACxB,aAAA,CAAC;QACN;AAEA,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC;IACxB;AAEQ,IAAA,kBAAkB,CAAC,SAAoB,EAAA;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAW,KAAK,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ;mBAClE,SAAS,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC/C,gBAAA,OAAO,UAAU,CAAC;AACd,oBAAA,MAAM,EAAK,GAAG;AACd,oBAAA,OAAO,EAAI,yBAAyB;oBACpC,SAAS,EAAE,SAAS,CAAC;AACxB,iBAAA,CAAC;YACN;QAEJ;aAAO,IAAI,SAAS,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AACnD,YAAA,OAAO,UAAU,CAAC;AACd,gBAAA,MAAM,EAAK,GAAG;AACd,gBAAA,OAAO,EAAI,yBAAyB;gBACpC,SAAS,EAAE,SAAS,CAAC;AACxB,aAAA,CAAC;QACN;AAEA,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC;IACxB;+GAxiBS,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADC,MAAM,EAAA,CAAA,CAAA;;4FAClB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;AClB1B,SAAU,kBAAkB,CAAC,MAAwB,EAAA;IACvD,OAAO;AACH,QAAA;AACI,YAAA,OAAO,EAAK,WAAW;AACvB,YAAA,UAAU,EAAE;AACf,SAAA;AACD,QAAA;AACI,YAAA,OAAO,EAAM,aAAa;AAC1B,YAAA,WAAW,EAAE;AAChB,SAAA;AACD,QAAA;AACI,YAAA,OAAO,EAAG,iBAAiB;AAC3B,YAAA,QAAQ,EAAE,mBAAmB;AAC7B,YAAA,KAAK,EAAK;AACb;KACJ;AACL;;MCXa,sBAAsB,CAAA;AAQ/B,IAAA,WAAA,GAAA;AAPiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AAC1B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAa,WAAW,CAAC;AAC5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;;QAIxD,IAAI,CAAC,WAAW,CAAC;aACZ,SAAS,CACN,MAAK;AACD,YAAA,IAAI;gBACA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,EAC/C,IAAI,CAAC,WAAW,CAAC,cAAc;AAC9B,qBAAA,SAAS,CAAC,CAAC,QAAiB,KAAI;oBAC7B,IAAI,CAAC,QAAQ,EAAE;AACX,wBAAA,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;oBAC3C;AACJ,gBAAA,CAAC,CAAC;YACV;YAAE,OAAO,MAAM,EAAE;;YAEjB;AACJ,QAAA,CAAC,CAAC;IACd;AAEA,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI;IAC/B;AAEA,IAAA,IAAW,qBAAqB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,kBAAkB;IACxD;AAEA,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;IAC9C;AAEA,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM;IAC5C;AAEA,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM;IAC5C;AAEO,IAAA,MAAM,CAAC,KAA2B,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CACjC,SAAS,CAAC,CAAC,GAAY,KAAI;YACvB,IAAI,GAAG,EAAE;AACL,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACpC;AACA,YAAA,OAAO,KAAK;QAChB,CAAC,CAAC,EACF,cAAc,CAAC,CAAC,CAAC,EACjB,SAAS,CAAC,MAAK;AACX,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC9B,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACzB,CAAC,CAAC,CACL;IACL;IAEO,KAAK,CAAC,QAAiB,EAAE,QAAiB,EAAA;QAC7C,OAAO,KAAK,CAAC,MAAK;AACd,YAAA,QAAQ,IAAI,CAAC,QAAQ;gBACjB,KAAK,QAAQ,CAAC,MAAM;oBAChB,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;AACtC,wBAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;oBACtD;AACA,oBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CACxD,SAAS,CAAC,CAAC,GAAY,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CACvD;gBACL,KAAK,QAAQ,CAAC,kBAAkB;gBAChC,KAAK,QAAQ,CAAC,QAAQ;gBACtB,KAAK,QAAQ,CAAC,MAAM;AAChB,oBAAA,OAAO,IAAI,CAAC,OAAO,EAAE;AACzB,gBAAA;AACI,oBAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;;AAE9D,QAAA,CAAC,CAAC;IACN;IAEO,eAAe,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CACjC,SAAS,CAAC,CAAC,GAAY,KAAI;AACvB,YAAA,QAAQ,IAAI,CAAC,QAAQ;gBACjB,KAAK,QAAQ,CAAC,kBAAkB;gBAChC,KAAK,QAAQ,CAAC,QAAQ;gBACtB,KAAK,QAAQ,CAAC,MAAM;oBAChB,IAAI,GAAG,EAAE;AACL,wBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;oBAClC;AACA,oBAAA,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE;AACtC,wBAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC9C;oBACA,OAAO,IAAI,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC,IAAI,CACpD,SAAS,CAAC,CAAC,QAAiB,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CACjE;gBACL,KAAK,QAAQ,CAAC,MAAM;AAChB,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACnB,gBAAA;AACI,oBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;;QAE1D,CAAC,CAAC,CACL;IACL;IAEO,kBAAkB,CAAC,QAA6B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAA;AACnF,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,IAAI;QACzC;aAAO;YACH,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC,GAAG;QAC9C;IACJ;AAEQ,IAAA,aAAa,CAAC,GAAY,EAAA;QAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,SAAS,CAAC,MAAK;YACX,IAAI,GAAG,EAAE;AACL,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;oBAChC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;AACzD,oBAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,IAAI;gBACzC;qBAAO;AACH,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;gBACnE;AACA,gBAAA,OAAO,EAAE,CAAC,GAAG,CAAC;YAClB;iBAAO;AACH,gBAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9C;QACJ,CAAC,CAAC,CACL;IACL;IAEQ,OAAO,GAAA;AACX,QAAA,QAAQ,IAAI,CAAC,QAAQ;YACjB,KAAM,QAAQ,CAAC,MAAM;gBACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CACvC,GAAG,CAAC,MAAK;AACL,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAClD,oBAAA,OAAO,IAAI;gBACf,CAAC,CAAC,CACL;YACL,KAAK,QAAQ,CAAC,kBAAkB;YAChC,KAAK,QAAQ,CAAC,QAAQ;YACtB,KAAK,QAAQ,CAAC,MAAM;AAChB,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;AACjD,YAAA;AACI,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;;IAE1D;+GAtJS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADV,MAAM,EAAA,CAAA,CAAA;;4FAClB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACJzB,MAAM,SAAS,GAAG,MAAK;AAC1B,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACvC,IAAA,MAAM,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC7D,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,CAC5B,SAAS,CAAC,CAAC,GAAY,KAAI;QACvB,IAAI,GAAG,EAAE;AACL,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACnB;QAEA,OAAO,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAClE,GAAG,CAAC,MAAM,KAAK,CAAC,CACnB;IACL,CAAC,CAAC,CACL;AACL;AAEA;AACO,MAAM,UAAU,GAAkB,SAAS;;SCZlC,cAAc,GAAA;IAC1B,OAAO;QACH,SAAS,EAAK,MAAM,CAAC,qBAAqB;QAC1C,QAAQ,EAAM,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,gBAAgB;QACrC,IAAI,EAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9C,KAAK,EAAS,MAAM,CAAC,UAAU;AAC/B,QAAA,QAAQ,EAAM,MAAM,CAAC,YAAY,IAAI,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;KAC7D;AACL;;ACtBA;;AAEG;;;;"}