feathers-ucan 0.1.21 → 0.1.23
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 +2 -2
- package/lib/env/version.d.ts +1 -1
- package/lib/hooks/ucan-auth.d.ts +1 -1
- package/lib/index.cjs +4 -2
- package/lib/index.cjs.map +1 -1
- package/lib/index.modern.js +4 -2
- package/lib/index.modern.js.map +1 -1
- package/lib/index.umd.js +4 -2
- package/lib/index.umd.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -128,7 +128,7 @@ Note: the way ucans works, you cannot simply provide a “greatest ability” an
|
|
|
128
128
|
```jsx
|
|
129
129
|
declare type UcanAuthOptions = {
|
|
130
130
|
creatorPass?: '*' | Array<string>,
|
|
131
|
-
loginPass?: Array<[Array<string>, Array<string> | '*']>,
|
|
131
|
+
loginPass?: Array<[Array<string>, Array<string> | '*', Array<string>|undefined]>,
|
|
132
132
|
or?: Array<string>,
|
|
133
133
|
adminPass?: Array<string>,
|
|
134
134
|
specialChange?: Array<string>|'*',
|
|
@@ -138,7 +138,7 @@ declare type UcanAuthOptions = {
|
|
|
138
138
|
|
|
139
139
|
### This section needs to be reworked to be open-sourcable. This is too specific to our internal material still
|
|
140
140
|
- **************************creatorPass:************************** allows for a pass if the `login._id` calling the method is the same as the record in question `record.createdBy.login`
|
|
141
|
-
- **********************loginPass:********************** allows for a free pass list of record paths that match the `login._id` calling the method. This is an array of loginPass config options. The first element of each array are the paths such as `[owner.id]` (dot notation for nested paths). In the future we expect to add `$in` functionality that can handle nested arrays as well (the current version will pass an array that includes the correct id, but only a flat array of simple ObjectIds - true for either the path on the login or the record, both can be an array of ids). Furthermore, if you want to match the id to something other than the _id field of the login (such as a `person` or other relationship) you can do so by using `[owner.id/person]`. The `person` will match `owner.id` on the record in question to the `person` path of the login making the call.
|
|
141
|
+
- **********************loginPass:********************** allows for a free pass list of record paths that match the `login._id` calling the method. This is an array of loginPass config options. The first element of each array are the paths such as `[owner.id]` (dot notation for nested paths). In the future we expect to add `$in` functionality that can handle nested arrays as well (the current version will pass an array that includes the correct id, but only a flat array of simple ObjectIds - true for either the path on the login or the record, both can be an array of ids). Furthermore, if you want to match the id to something other than the _id field of the login (such as a `person` or other relationship) you can do so by using `[owner.id/person]`. The `person` will match `owner.id` on the record in question to the `person` path of the login making the call. Optionally as a third argument in the loginPass array you can pass an array of string ids to match against rather than checking on the context record itself.
|
|
142
142
|
-
|
|
143
143
|
- You can use a wildcard '*' to check nested paths on the record subject, you can do so by using `*` which will iterate through objects or arrays at the specified depth. So `owner.contacts*id` for either an array or object of many owners ("owner" is unimportant, just an example path). If the subject is an array of ids - no need to do this because `owners` or `owners.contacts` will already check an array if the field at that path is an array.'
|
|
144
144
|
The second element are the methods you want to allow this on ie: `['patch', 'create']`Use the `*` superuser for allowing all methods to pass. If you want more granular field permissions - such as only allowing `patch` for the fields `color` and `name`, we support that. You would write the second argument of loginPass with a `patch/color,name` as follows (this is the full loginPass argument to avoid confusion here) [[{first argument}], ['patch/color,name', 'create']] (allowed for create as well just to illustrate how this is used);
|
package/lib/env/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.23";
|
package/lib/hooks/ucan-auth.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export declare const anyAuth: AnyAuth;
|
|
|
16
16
|
type NoThrow = '$';
|
|
17
17
|
export declare const noThrow: NoThrow;
|
|
18
18
|
export type CapabilityParts = Partial<Capability> | [string, Array<string> | string];
|
|
19
|
-
export declare type LoginPassOption = [Array<string>, Array<string> | '*'];
|
|
19
|
+
export declare type LoginPassOption = [Array<string>, Array<string> | '*'] | [Array<string>, Array<string> | '*', Array<string>];
|
|
20
20
|
export declare type UcanAuthOptions = {
|
|
21
21
|
creatorPass?: '*' | Array<string>;
|
|
22
22
|
loginPass?: Array<LoginPassOption>;
|
package/lib/index.cjs
CHANGED
|
@@ -807,7 +807,9 @@ const checkUcan = (requiredCapabilities, options) => {
|
|
|
807
807
|
};
|
|
808
808
|
if (existing) {
|
|
809
809
|
context = setExists(context, existing);
|
|
810
|
-
|
|
810
|
+
/**perform the check*/
|
|
811
|
+
const idArr = Array.isArray(lpass[2]) ? lpass[2] : lpass[0] || [];
|
|
812
|
+
for (const passPath of idArr || []) {
|
|
811
813
|
const spl = String(passPath).split('/');
|
|
812
814
|
if (spl[0].includes('*')) {
|
|
813
815
|
const spl2 = spl[0].split('*');
|
|
@@ -885,7 +887,7 @@ const ucanAuth = (requiredCapabilities, options) => {
|
|
|
885
887
|
const core_path = configuration.core_path || 'core';
|
|
886
888
|
const entity = configuration.entity || 'login';
|
|
887
889
|
const existingLogin = symbolUcan._get(context.params, [core_path, entity]) || symbolUcan._get(context.params, 'login') || symbolUcan._get(context.params.connection, entity);
|
|
888
|
-
if (existingLogin) context.params[entity] = existingLogin;
|
|
890
|
+
if (existingLogin != null && existingLogin._id) context.params[entity] = existingLogin;
|
|
889
891
|
const loginId = typeof existingLogin === 'string' ? existingLogin : existingLogin == null ? void 0 : existingLogin._id;
|
|
890
892
|
const hasLogin = !!(existingLogin && (typeof existingLogin === 'string' || !!loginId));
|
|
891
893
|
const existingUcan = symbolUcan._get(context.params, configuration.client_ucan || 'client_ucan');
|
package/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/auth-service/ucan-strategy.ts","../src/auth-service/index.ts","../src/core/methods.ts","../src/utils/check-exists.ts","../src/hooks/ucan-auth.ts","../src/hooks/update-ucan.ts"],"sourcesContent":["import {IncomingMessage} from 'http';\nimport {\n AuthenticationBase,\n AuthenticationBaseStrategy,\n AuthenticationRequest,\n AuthenticationResult,\n ConnectionEvent\n} from '@feathersjs/authentication';\n// @ts-ignore\nimport lt from 'long-timeout';\nimport {_get, _unset, ucanToken, validateUcan} from 'symbol-ucan';\n\nexport class NotAuthError extends Error {\n constructor(message?: string) {\n super(message)\n }\n}\nconst SPLIT_HEADER = /(\\S+)\\s+(\\S+)/;\n\ntype AnyObj = { [key: string]: any };\n\nexport class UcanStrategy extends AuthenticationBaseStrategy {\n expirationTimers = new WeakMap();\n\n setAuthentication(auth: AuthenticationBase) {\n // console.log('set authentication', auth);\n auth.verifyAccessToken = (accessToken: string) => {\n return {} as any;\n };\n super.setAuthentication(auth);\n }\n\n get configuration() {\n const authConfig = this.authentication?.configuration || {\n service: undefined,\n entity: undefined,\n entityId: undefined\n };\n const config = super.configuration;\n\n return {\n service: authConfig.service,\n entity: authConfig.entity,\n entityId: authConfig.entityId,\n header: 'Authorization',\n schemes: ['Bearer', 'JWT'],\n ...config\n };\n }\n\n async handleConnection(event: ConnectionEvent, connection: any, authResult?: AuthenticationResult) {\n const isValidLogout = event === 'logout' && connection.authentication && authResult &&\n connection.authentication.accessToken === authResult.accessToken;\n\n const {accessToken, entity} = authResult || {};\n\n if (accessToken && event === 'login') {\n const validUcan = await validateUcan(accessToken)\n .catch(err => {\n console.log('Could not validate ucan in connection: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n throw new Error(errObj.message);\n });\n const {payload: {exp}} = validUcan || {payload: {exp: 0}}\n // The time (in ms) until the token expires\n const duration = (exp * 1000) - Date.now();\n // This may have to be a `logout` event but right now we don't want\n // the whole context object lingering around until the timer is gone\n const timer = lt.setTimeout(() => (this.app as any).emit('disconnect', connection), duration);\n\n lt.clearTimeout(this.expirationTimers.get(connection));\n this.expirationTimers.set(connection, timer);\n\n connection.authentication = {\n strategy: this.name,\n accessToken\n };\n } else if (event === 'disconnect' || isValidLogout) {\n const {entity} = this.configuration;\n\n delete connection[entity];\n delete connection.authentication;\n\n lt.clearTimeout(this.expirationTimers.get(connection));\n this.expirationTimers.delete(connection);\n }\n }\n\n verifyConfiguration() {\n const allowedKeys = ['entity', 'entityId', 'service', 'header', 'schemes', 'audience'];\n\n for (const key of Object.keys(this.configuration)) {\n if (!allowedKeys.includes(key)) {\n throw new Error(`Invalid ucanStrategy option 'authentication.${this.name}.${key}'. Did you mean to set it in 'authentication.jwtOptions'?`);\n }\n }\n\n if (typeof this.configuration.header !== 'string') {\n throw new Error(`The 'header' option for the ${this.name} strategy must be a string`);\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n async getEntityQuery(_params: any) {\n return {};\n }\n\n /**\n * Return the entity for a given id\n * @param id The id to use\n * @param params Service call parameters\n */\n async getEntity(id: string, params: any) {\n const entityService = this.entityService;\n const {entity} = this.configuration;\n\n if (entityService === null) {\n throw new NotAuthError('Could not find entity service');\n }\n\n const query = await this.getEntityQuery(params);\n const getParams = Object.assign({}, _unset(params, 'provider'), {query});\n const result = await entityService.get(id, getParams);\n\n if (!params.provider) {\n return result;\n }\n\n return entityService.get(id, {...params, [entity]: result});\n }\n\n async getEntityId(authResult: AuthenticationResult, _params: AnyObj) {\n let {query, loginId} = _params;\n if (loginId) return loginId;\n else {\n const {service, core_path = 'core'} = this.configuration;\n const pms = {\n query: {...query, $limit: 1},\n [core_path]: {skipJoins: true, ..._params[core_path]}\n }\n const entities = await this.app?.service(service).find({...pms, skipJoins: true, skip_hooks: true, admin_pass: true} as any);\n if (entities.total) return entities.data[0]._id;\n else throw new NotAuthError('Could not find login associated with this ucan');\n }\n }\n\n async authenticate(authentication: AuthenticationRequest, params: AnyObj) {\n let {accessToken, loginId, ucan} = authentication;\n const {entity, core_path} = this.configuration;\n if (!accessToken) {\n\n if (ucan) accessToken = ucanToken(ucan);\n else throw new NotAuthError('Error generating ucan');\n // } else throw new NotAuthenticated('No access token');\n }\n //\n // await verifyUcan(accessToken, {audience: ucan_audience || params.ucan_aud, requiredCapabilities})\n // .catch(err => {\n // console.error('error verifying ucan', err);\n // throw new NotAuthenticated('Could not verify ucan: ' + err.message);\n // });\n\n const decodedUcan = await validateUcan(accessToken)\n .catch(err => {\n console.log('Could not validate ucan during authentication: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n throw new Error(errObj.message);\n });\n\n const result = {\n accessToken,\n authentication: {\n strategy: 'jwt',\n accessToken\n }\n };\n\n if (entity === null) {\n return result;\n }\n\n let value;\n const coreEntity = _get(params, [core_path, entity]);\n if (!coreEntity) {\n const entityId = await this.getEntityId(result, {\n ...params,\n loginId,\n query: {did: decodedUcan?.payload.aud}\n });\n value = await this.getEntity(entityId, params);\n } else value = coreEntity;\n return {\n ...result,\n [entity]: value\n };\n\n }\n\n async parse(req: IncomingMessage) {\n const {header, schemes} = this.configuration;\n const headerValue = req.headers && req.headers[header.toLowerCase()];\n\n if (!headerValue || typeof headerValue !== 'string') {\n return null;\n }\n\n const [, scheme, schemeValue] = headerValue.match(SPLIT_HEADER) || [];\n const hasScheme = scheme && schemes.some(\n (current: any) => new RegExp(current, 'i').test(scheme)\n );\n\n if (scheme && !hasScheme) {\n return null;\n }\n\n return {\n strategy: this.name,\n accessToken: hasScheme ? schemeValue : headerValue\n };\n }\n}\n\n\n","import {_get, buildUcan, encodeKeyPair, parseUcan, ucanToken, validateUcan} from 'symbol-ucan';\nimport {AuthenticationParams, AuthenticationRequest, AuthenticationService} from '@feathersjs/authentication';\nimport {NullableId} from '../core';\n\ntype AnyObj = any\n\nexport class NotAuthError extends Error {\n constructor(message?: string) {\n super(message)\n }\n}\nexport type AuthServiceOptions = {\n NotAuthenticated?: any\n}\nexport * from './ucan-strategy';\n\nexport class AuthService extends AuthenticationService {\n options: AuthServiceOptions\n constructor(app: any, configKey = 'authentication', opts:AnyObj&AuthServiceOptions = {}) {\n const { NotAuthenticated, ...rest } = opts\n super(app, configKey, rest)\n this.app = app;\n this.options = { NotAuthenticated }\n };\n\n async create(data: AuthenticationRequest, params?: AuthenticationParams) {\n const NotAuth = this.options?.NotAuthenticated || NotAuthError;\n\n const {entity, service, ucan_path = 'ucan'} = this.app.get('authentication');\n\n const authStrategies = params?.authStrategies || this.configuration.authStrategies\n\n if (!params) params = {}\n\n if (!authStrategies.length) {\n throw new NotAuth('No authentication strategies allowed for creating a JWT (`authStrategies`)')\n }\n\n const authResult = await this.authenticate(data, params, ...authStrategies)\n .catch((err: any) => {\n throw new Error(err.message)\n })\n\n if (authResult.accessToken) {\n return authResult\n }\n const did = data.did || _get(authResult, [entity, 'did']);\n let ucan = data.ucan || _get(authResult, [entity, 'ucan']);\n\n if (!did) throw new Error('No did audience provided');\n if (!ucan) throw new Error('No ucan provided to authentication call');\n // const {secret} = this.configuration;\n\n const validatedUcan = await validateUcan(ucan)\n .catch(err => {\n console.log('Could not validate ucan creating authentication: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n console.warn('Could not validate ucan creating authentication', ucan, errObj.message);\n return null;\n });\n if (!validatedUcan) {\n const parsed = parseUcan(ucan);\n let {secret} = this.app.get('authentication');\n\n const issuer = encodeKeyPair({secretKey: secret});\n ucan = await buildUcan({\n audience: parsed.payload.aud,\n issuer,\n lifetimeInSeconds: 60 * 60 * 24 * 60,\n capabilities: parsed.payload.att\n })\n params.admin_pass = true;\n await this.app.service(service).patch(_get(authResult, [entity, '_id']) as NullableId, {[ucan_path]: ucanToken(ucan)}, {...params})\n }\n\n\n const accessToken = ucanToken(ucan);\n\n return {\n accessToken,\n ...authResult,\n authentication: {\n ...authResult.authentication,\n payload: accessToken\n }\n }\n }\n}\n\n","type AnyObj = any\n\nexport type Id = number | string\nexport type NullableId = Id | null\n\nexport type CallFindResult<T = AnyObj> = {\n total:number,\n limit: number,\n skip:number,\n data: Array<T>\n}\nexport type AnyParams = Iterable<AnyObj>\n\ndeclare type CoreOpts = {\n skipJoins?: boolean,\n admin_pass?: boolean\n}\nexport class CoreCall {\n context:any;\n service:string;\n core:AnyObj;\n entity:string;\n constructor(service:string, context:any, coreOptions?:CoreOpts){\n this.service = service\n this.context = context\n const entity = (context.app.get('authentication') || { entity: 'login' }).entity || 'login';\n this.entity = entity;\n const core = context.params?.core || {};\n if(!core[entity]) core[entity] = context.params[entity];\n this.core = { ...core, ...coreOptions }\n }\n\n async get(id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).get(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async find (params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).find({...params as AnyParams, [this.entity]: params[this.entity], skip_hooks:true, admin_pass:true, ...{ [core_path]: this.core }})\n }\n async create (data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).create(data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async patch (id:NullableId, data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).patch(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async update (id:NullableId, data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).update(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async remove (id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).remove(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n\n async _get(id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._get(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _find (params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._find({...params as AnyParams, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _create (data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._create(data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _patch (id:NullableId, data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._patch(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _update (id:NullableId, data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._update(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _remove (id:NullableId, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._remove(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n\n}\n\n","import {_get, _set} from 'symbol-ucan';\nimport {HookContext} from '../types';\nimport {CoreCall} from '../core';\n\ntype AnyObj = any\n\nexport const existsPath = '_exists';\n\nexport const getExists = (context:Partial<HookContext>):any => {\n const path = context.app.get('existsPath') || existsPath;\n return _get(context.params, `core.${path}.${context.path}.${context.id}`) || undefined;\n}\n\nexport const loadExists = async (context:HookContext, options?:{ skipJoins?: boolean, params?: AnyObj }):Promise<any> => {\n let ex = getExists(context);\n if(!ex && context.id) {\n ex = await new CoreCall(context.path, context, { skipJoins: options?.skipJoins !== false }).get(context.id, { exists_check: true, admin_pass: true, skip_hooks: true, ...options?.params || {} })\n }\n return ex;\n}\n\nexport const setExists = (context:HookContext, val:any):HookContext => {\n const path = context.app.get('existsPath') || existsPath;\n context.params = _set(context.params, `core.${path}.${context.path}.${val?._id || context.id}`, val)\n return context;\n};\n","import {HookContext} from '../types';\nimport {authenticate} from '@feathersjs/authentication';\nimport {\n _get,\n _set,\n Capability,\n encodeKeyPair,\n genCapability,\n parseUcan,\n ucanToken,\n VerifyOptions,\n verifyUcan\n} from 'symbol-ucan';\nimport {loadExists, setExists} from '../utils';\nimport {CoreCall} from '../core';\n\ntype AnyObj = any\n\nconst SUPERUSER = '*'\n\nexport type UcanAuthConfig = {\n entity: string,\n service: string,\n client_ucan: string,\n ucan_aud: string,\n ucan_path: string,\n core_path: string,\n defaultHierPart: string,\n defaultScheme: string\n}\n\ntype AuthConfig = {\n [key: string]: string\n}\n\ntype AnyAuth = '*'\nexport const anyAuth: AnyAuth = '*' as AnyAuth;\ntype NoThrow = '$'\nexport const noThrow: NoThrow = '$' as NoThrow;\n\n\nexport type CapabilityParts = Partial<Capability> | [string, Array<string> | string];\n\nexport declare type LoginPassOption = [Array<string>, Array<string> | '*']\nexport declare type UcanAuthOptions = {\n creatorPass?: '*' | Array<string>,\n loginPass?: Array<LoginPassOption>,\n or?: '*' | Array<string>\n adminPass?: Array<string>,\n noThrow?: boolean,\n log?: boolean,\n existingParams?: AnyObj,\n specialChange?: Array<string> | AnyAuth,\n cap_subjects?: Array<string>,\n audience?: string\n}\ntype RequiredCapability = { capability: Capability, rootIssuer: string }\nexport type UcanCap = Array<CapabilityParts> | AnyAuth | NoThrow;\nexport type UcanAllArgs = {\n all?: UcanCap,\n get?: UcanCap,\n find?: UcanCap,\n create?: UcanCap,\n patch?: UcanCap,\n update?: UcanCap,\n remove?: UcanCap\n};\n\ntype VerifyOne = { ucan: string } & VerifyOptions;\n\ntype Auth = <S>(method: string) => (context: HookContext<S>) => Promise<HookContext<S>>\ntype Config = { entity: string, service: string, defaultScheme: string, defaultHierPart: string };\ntype VerifyRes = { ok: boolean, value?: Array<any>, err?: Array<any> };\n\nexport const noThrowAuth = async <S>(context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n const entity = _get(context, ['auth', config.entity]);\n if (entity) {\n context = _set(context, [config.core_path, config.entity], entity)\n }\n try {\n context = await authenticate('jwt')(context as any)\n .catch(() => {\n return context;\n })\n } catch (e) {\n return context;\n }\n return context;\n}\n\nexport const bareAuth = async <S>(context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n const entity = _get(context, ['auth', config.entity]);\n if (entity) context = _set(context, [config.core_path, config.entity], entity)\n return authenticate('jwt')(context as any);\n}\n\nconst verifyOne = async (ucan: string, options: VerifyOptions, log?: boolean) => {\n try {\n let v = await verifyUcan(ucan, options);\n if (!v?.ok && options.requiredCapabilities) {\n const newCapabilities = options.requiredCapabilities.map(a => {\n if (a.capability.can !== SUPERUSER) a.capability.can.segments = ['*']\n return a\n })\n if (log) console.log('set new req capabilities', newCapabilities, parseUcan(ucan))\n v = await verifyUcan(ucan, {\n ...options, requiredCapabilities: newCapabilities\n })\n if (log) console.log('Second verification result:', v);\n }\n return v;\n } catch (e: any) {\n return {ok: false, err: [e.message]}\n }\n};\nexport const orVerifyLoop = async (arr: Array<VerifyOne>, log?: boolean): Promise<VerifyRes> => {\n let v: any = {ok: false, value: []};\n\n try {\n for (const i in arr) {\n if (log) console.log('or verify loop', arr[i], parseUcan(arr[i].ucan));\n if (!v?.ok) {\n const {ucan, ...options} = arr[i];\n v = await verifyOne(ucan, options, log)\n if (log) console.log('got in verify loop', v);\n } else break;\n }\n return v;\n } catch (e: any) {\n return {ok: false, err: [e.message]}\n }\n}\n\nexport type VerifyConfig = {\n client_ucan: string,\n ucan_aud: string,\n [key: string]: any\n};\n\ntype MethodOpts = { aud?: string }\nexport const verifyAgainstReqs = <S>(reqs: Array<RequiredCapability>, config: VerifyConfig, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<VerifyRes> => {\n const log = options?.log\n const ucan = _get(context.params, config.client_ucan) as string;\n const audience = options?.audience || _get(context.params, config.ucan_aud) as string;\n if (log) console.log('verify against reqs', reqs)\n let vMethod: (uc?: string, methodOpts?: MethodOpts) => Promise<VerifyRes>\n const or = options?.or || []\n if (ucan && (or === '*' || or.includes(context.method))) vMethod = (uc?: string, methodOpts?: MethodOpts) => orVerifyLoop((reqs || []).map(a => {\n return {\n ucan: uc || ucan,\n audience: methodOpts?.aud || audience,\n requiredCapabilities: [a]\n }\n }), log)\n else vMethod = (uc?: string, methodOpts?: MethodOpts) => verifyOne(uc || ucan, {\n audience: methodOpts?.aud || audience,\n requiredCapabilities: reqs\n }, log) as Promise<VerifyRes>\n let v = await vMethod()\n if (log) console.log('first verify try', v);\n if (v?.ok) return v;\n const cs = (options?.cap_subjects || []).filter(a => !!a)\n if (log) console.log('check cap_subjects', cs);\n if (cs) {\n const configuration = config?.loginConfig || context.app.get('authentication') as AnyObj;\n const loginCheckId = String(_get(context.params, `${configuration.entity}._id` || '')) as any;\n const caps = await new CoreCall(configuration.capability_service || 'caps', context).find({\n query: {\n $limit: cs.length,\n subject: {$in: cs}\n },\n skip_hooks: true,\n admin_pass: true\n })\n .catch(err => console.log(`Error finding caps in ucan auth: ${err.message}`))\n if (log) console.log('caps', caps);\n if (caps?.data) {\n for (const cap of caps.data) {\n for (const k in cap.caps || {}) {\n if (log) console.log('check cap', k, cap.caps[k].logins, loginCheckId);\n if ((cap.caps[k].logins || []).map((a: any) => String(a)).includes(loginCheckId)) {\n try {\n const ucanString = ucanToken(cap.caps[k].ucan)\n if (log) console.log('got ucan string', ucanString);\n if (ucanString) {\n v = await vMethod(ucanString, {aud: cap.did})\n if (log) console.log('tried v on cap', v);\n }\n } catch (e: any) {\n console.log(`Error verifying ucan from cap: ${cap._id}. Err:${e.message}`)\n }\n if (options?.log) console.log('tried v on cap', v);\n if (v?.ok) return v;\n }\n }\n }\n }\n }\n return v;\n }\n}\n\nexport type CapabilityModelConfig = {\n defaultScheme: string,\n defaultHierPart: string,\n secret: string,\n [key: string]: any\n};\n\nexport const modelCapabilities = (reqs: Array<CapabilityParts>, config: CapabilityModelConfig): Array<RequiredCapability> => {\n\n const rootIssuer = encodeKeyPair({secretKey: config.secret}).did();\n if (!Array.isArray(reqs)) return []\n return reqs.map(a => {\n return {\n capability: Array.isArray(a) ? genCapability({\n with: {scheme: config.defaultScheme, hierPart: config.defaultHierPart},\n can: {namespace: a[0], segments: typeof a[1] === 'string' ? [a[1]] : a[1]}\n }, config) : genCapability(a, config),\n rootIssuer\n };\n }) as Array<RequiredCapability>\n};\n\nexport declare type PassConfig = {\n loginConfig?: VerifyConfig\n}\nexport const checkUcan = (requiredCapabilities: UcanCap, options?: UcanAuthOptions & PassConfig) => {\n return async (context: HookContext): Promise<HookContext> => {\n const configuration = options?.loginConfig || context.app.get('authentication') as AnyObj;\n\n let v: any = {ok: false, value: []};\n\n const reqs: Array<RequiredCapability> = modelCapabilities(requiredCapabilities as Array<CapabilityParts>, configuration as CapabilityModelConfig);\n\n if (reqs.length) {\n v = await verifyAgainstReqs(reqs, configuration as VerifyConfig, options)(context)\n\n /** if the anyAuth setting is used along with specialChange, a user could get through to this point despite not being authenticated, so this step does not allow a pass for anyAuth setting even though no requiredCapabilities are present - because it was intended to throw if not authenticated unless special change conditions are met */\n } else if (requiredCapabilities !== '*') v.ok = true;\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context\n } else {\n\n // if (!v?.ok) {\n // let hasSplitNamespace = false;\n // const reducedReqs: Array<RequiredCapability> = [];\n // reqs.forEach((req, i) => {\n // const splt = (_get<RequiredCapability, string>(req, 'capability.can.namespace') || '').split(':')\n // if (splt[1]) {\n // req = _set(req, 'capability.can.namespace', splt[0]);\n // hasSplitNamespace = true;\n // }\n // reducedReqs.push(req)\n // })\n // if (hasSplitNamespace) v = await verifyAgainstReqs(reqs, configuration as VerifyConfig, options)(context);\n // }\n\n\n if (options?.log) console.log('checking special change', options?.specialChange);\n if (options?.specialChange) {\n if (options.specialChange === anyAuth) {\n context.params.canU = true;\n return context;\n } else if (Array.isArray(options.specialChange)) {\n if (['create', 'patch', 'update'].includes(context.method)) {\n if (Array.isArray(context.data)) throw new Error('No multi data allowed with special change')\n for (const k in context.data || {}) {\n if (['$set', '$unset', '$addToSet', '$pull', '$push'].includes(k)) {\n for (const sk in context.data[k] || {}) {\n if (!options.specialChange.includes(sk)) {\n const spl = sk.split('.');\n if (spl.length === 1) delete context.data[k][sk];\n else if (!options.specialChange.includes(spl[0])) delete context.data[k][sk]\n }\n }\n } else if (!options.specialChange.includes(k)) delete context.data[k];\n }\n context.params.canU = true;\n return context;\n }\n }\n }\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context;\n } else {\n\n //If creator pass enabled, check to see if the auth login is the creator of the record\n const {loginPass} = options || {loginPass: [[['*'], ['nonExistentMethod']]]}\n if (loginPass?.length) {\n //object of scrubbed data object for pass that includes only limited access or full context.data object if no limits were present\n let scrubbedData: AnyObj = {};\n //scruData defaults to true - is only set to false\n let scrubData = true;\n const checkLoginPass = async (lpass: LoginPassOption) => {\n let methodsOnly = [];\n const allMethods = lpass[1] === '*';\n let methodIdx = -1;\n if (allMethods) methodIdx = 0;\n else {\n //separate out any field specific methods e.g. patch/name,avatar\n methodsOnly = (lpass[1] as string[]).map(a => a.split('/')[0]);\n methodIdx = methodsOnly.indexOf(context.method);\n }\n /**ensure loginPass is allowed for this method*/\n if (methodIdx > -1) {\n /**retrieve existing record to check ids for login id*/\n const existing = await loadExists(context, {params: options?.existingParams});\n let loginOk = false;\n\n /** function for comparing record login id with context login*/\n const checkLogin = (recordLoginPassId: string, loginIdPath: string = '_id') => {\n const loginCheckId = _get(context.params, `${configuration.entity}.${loginIdPath}`) as any;\n /**Make sure both are present to avoid pass on undefined*/\n if (loginCheckId && recordLoginPassId) {\n /** change login path result to array no matter what */\n const checkArr = Array.isArray(loginCheckId) ? loginCheckId.map(a => String(a)) : [String(loginCheckId)];\n if (Array.isArray(recordLoginPassId)) {\n /**loop through to see if there is a match present use for loops for performance instead of some*/\n for (let i = 0; i < checkArr.length; i++) {\n const checkId = String(checkArr[i])\n for (let rl = 0; rl < recordLoginPassId.length;) {\n const rlId = String(recordLoginPassId[rl]);\n if (rlId === checkId) loginOk = true;\n else rl++;\n }\n if (loginOk) return;\n }\n } else if (checkArr.includes(String(recordLoginPassId))) {\n return loginOk = true;\n }\n } else return\n }\n\n if (existing) {\n context = setExists(context, existing);\n /**perform the check*/\n let recordLoginPassId;\n for (const passPath of lpass[0] || []) {\n const spl = String(passPath).split('/');\n if (spl[0].includes('*')) {\n const spl2 = spl[0].split('*');\n const obj = _get(existing, spl2[0]);\n if (obj && typeof obj === 'object') {\n if (Array.isArray(obj)) {\n /** IF array, iterate through array and check the sub-path */\n for (const o of obj) {\n checkLogin(_get(o, spl2[1]) as string, spl[1] || '_id');\n if (loginOk) break;\n }\n } else {\n /** IF object, iterate through object and check the sub-path */\n for (const k in obj) {\n checkLogin(_get(obj, `${k}.${spl2[1]}`) as string, spl[1] || '_id')\n if (loginOk) break;\n }\n }\n }\n\n } else checkLogin(_get(existing, spl[0]) as string, spl[1] || '_id');\n\n }\n }\n\n if (loginOk) {\n v.ok = true\n /**loginPass is true - but check for granular field permissions such as patch/owner,color,status that imply limited permission*/\n //TODO: possibly a throw option here. If loginPass is ok, it will go forward, but could send an empty or modified patch object\n if (lpass[1] !== '*' && !['find', 'get', 'remove'].some(a => lpass[1].includes(a))) {\n const currentMethod = allMethods ? '*' : lpass[1][methodIdx];\n const splitMethod = currentMethod.split('/')[0];\n //check if current method contains a split '/' signaling limited permission check\n if (splitMethod !== currentMethod) {\n //get an array of the allowed fields\n const fields = currentMethod.split('/').slice(1).join('').split(',') || [];\n\n for (const field of fields) {\n const topLevel = _get(context.data, field);\n if (topLevel) scrubbedData = _set(scrubbedData, field, topLevel);\n else {\n for (const operator of ['$addToSet', '$pull']) {\n const operatorLevel = _get(context.data, `${operator}.${field}`);\n if (operatorLevel) scrubbedData = _set(scrubbedData, `${operator}.${field}`, operatorLevel);\n }\n }\n }\n } else scrubData = false;\n } else scrubData = false;\n }\n }\n }\n\n for await (const lpass of loginPass) {\n if (scrubData) await checkLoginPass(lpass);\n else break;\n }\n if (scrubData) context = _set(context, 'data', scrubbedData);\n }\n\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context;\n } else {\n\n if (options?.log) console.error('Ucan capabilities requirements not met: ', v, context.type, context.path);\n if (!options?.noThrow) throw new Error('Missing proper capabilities for this action: ' + context.type + ': ' + context.path + ' - ' + context.method);\n else {\n context.params._no_throw_error = {\n type: context.type,\n method: context.method,\n path: context.path\n }\n return context;\n }\n }\n }\n }\n }\n}\n\nexport const ucanAuth = <S>(requiredCapabilities?: UcanCap, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<HookContext<S>> => {\n const configuration = context.app.get('authentication') as AnyObj;\n const core_path = configuration.core_path || 'core';\n const entity = configuration.entity || 'login';\n\n const existingLogin:any = _get(context.params, [core_path, entity]) || _get(context.params, 'login') || _get(context.params.connection, entity);\n if(existingLogin) context.params[entity] = existingLogin;\n const loginId = typeof existingLogin === 'string' ? existingLogin : existingLogin?._id;\n const hasLogin = !!(existingLogin && (typeof existingLogin === 'string' || !!loginId));\n const existingUcan = _get(context.params, configuration.client_ucan || 'client_ucan');\n if (options?.log) console.log('ucan auth', 'hasLogin', hasLogin, 'loginId', loginId, 'existingUcan', !!existingUcan, 'core_path', core_path, 'entity', entity, 'core', context.params[core_path], 'params login', context.params.login, 'required capabilities', requiredCapabilities);\n //Below for passing through auth with no required capabilities\n if (requiredCapabilities === noThrow || (requiredCapabilities && requiredCapabilities[context.method] === noThrow)) return hasLogin ? context : await noThrowAuth(context);\n const adminPass = (options?.adminPass || []).includes(context.method) && (_get(context.params, 'admin_pass') || _get(context.params, [configuration.core_path, 'admin_pass'])) as any\n // If no login is present and no client UCAN is provided, perform authentication. Otherwise, reuse existing state/ucan.\n if (!hasLogin && !existingUcan) context = (adminPass || options?.specialChange) ? await noThrowAuth(context) : await bareAuth(context);\n if (requiredCapabilities === anyAuth && !options?.specialChange) {\n context.params.authenticated = !!context.params[entity];\n return context;\n }\n if (adminPass) return context;\n if (!requiredCapabilities) return context;\n return await checkUcan(requiredCapabilities, options)(context)\n }\n}\n\nexport const allUcanAuth = <S>(methods: UcanAllArgs, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n // if a login is already present in params[core_path][entity], don't overwrite it\n const corePath = (config as any).core_path || 'core';\n const entityKey = (config as any).entity || 'login';\n const existingLogin = _get(context.params, [corePath, entityKey]);\n if (!existingLogin) {\n const entity = _get(context, ['auth', entityKey]);\n if (entity) context = _set(context, [corePath, entityKey], entity)\n }\n if (context.type === 'before') {\n const {method} = context as { method: keyof UcanAllArgs } & HookContext<S>;\n if (methods[method as keyof UcanAllArgs] || methods['all']) {\n return await ucanAuth(methods[method] || methods['all'], options)(context) as any;\n } else return context;\n } else return context;\n }\n}\n","import {\n buildUcan,\n encodeKeyPair,\n parseUcan,\n ucanToken,\n validateUcan,\n stackAbilities,\n verifyUcan,\n reduceAbilities,\n _get\n} from 'symbol-ucan';\nimport { CoreCall } from '../core'\n\n\nexport const updateUcan = () => {\n return async (context:any) => {\n\n const { add = [], remove = [] } = context.data;\n //ensure capabilities were passed\n if(!add?.length && !remove?.length) throw new Error('No new capabilities passed');\n\n //check ability to edit the affected capabilities\n const {secret, ucan_aud, entity, ucan} = context.app.get('authentication');\n const rootIssuer = encodeKeyPair({secretKey: secret}).did();\n\n const checkAbilities = stackAbilities([...add, ...remove]);\n\n const canEdit = await verifyUcan(_get(context.params, [entity, ucan]) as string, {\n audience: _get(context.params, ucan_aud) as string,\n requiredCapabilities: checkAbilities.map(a => {\n return {\n //TODO: possibly READ shouldn't have the ability to allow others to READ\n capability: a,\n rootIssuer\n }\n })\n })\n\n if(!canEdit?.ok) throw new Error('You don\\'t have sufficient capabilities to grant those capabilities')\n\n //prep edited ucan\n const subjectId = context.id;\n const service = context.data.service || 'logins';\n const path = context.data.path || 'ucan';\n const subject = await new CoreCall(service, context, { skipJoins: true }).get(subjectId);\n\n const decoded = parseUcan(_get(subject, path) as string);\n const {aud, att, fct, nbf, prf} = decoded.payload;\n\n let capabilities = [...att];\n if(remove?.length) capabilities = reduceAbilities(remove, att);\n if(add?.length) capabilities = stackAbilities([...att, ...add]);\n\n\n const raw = await buildUcan({\n issuer: encodeKeyPair({secretKey: secret}),\n audience: aud,\n lifetimeInSeconds: 60 * 60 * 24 * 60,\n proofs: prf,\n ...context.data,\n capabilities\n });\n\n const encoded = ucanToken(raw);\n const isValid = await validateUcan(encoded);\n if (!isValid) throw new Error('Invalid ucan generated when updating');\n const patched = await new CoreCall(service, context).patch(subjectId, { [path]: encoded });\n context.result = {raw: context.data, encoded, subject: patched};\n return context;\n }\n};\n"],"names":["NotAuthError","Error","constructor","message","SPLIT_HEADER","UcanStrategy","AuthenticationBaseStrategy","args","expirationTimers","WeakMap","setAuthentication","auth","verifyAccessToken","accessToken","configuration","_this$authentication","authConfig","authentication","service","undefined","entity","entityId","config","header","schemes","handleConnection","event","connection","authResult","isValidLogout","validUcan","validateUcan","catch","err","console","log","errObj","code","indexOf","payload","exp","duration","Date","now","timer","lt","setTimeout","app","emit","clearTimeout","get","set","strategy","name","delete","verifyConfiguration","allowedKeys","key","Object","keys","includes","getEntityQuery","_params","getEntity","id","params","entityService","query","getParams","assign","_unset","result","provider","getEntityId","loginId","_this$app","core_path","pms","$limit","skipJoins","entities","find","skip_hooks","admin_pass","total","data","_id","authenticate","ucan","ucanToken","decodedUcan","value","coreEntity","_get","did","aud","parse","req","headerValue","headers","toLowerCase","scheme","schemeValue","match","hasScheme","some","current","RegExp","test","AuthService","AuthenticationService","configKey","opts","NotAuthenticated","rest","options","create","_this$options","NotAuth","ucan_path","authStrategies","length","validatedUcan","warn","parsed","parseUcan","secret","issuer","encodeKeyPair","secretKey","buildUcan","audience","lifetimeInSeconds","capabilities","att","patch","CoreCall","context","coreOptions","_context$params","core","_this$context$app","_this$context$app2","_this$context$app3","_this$context$app4","update","_this$context$app5","remove","_this$context$app6","_this$context$app7","_find","_this$context$app8","_create","_this$context$app9","_patch","_this$context$app10","_update","_this$context$app11","_remove","_this$context$app12","existsPath","getExists","path","loadExists","ex","exists_check","setExists","val","_set","SUPERUSER","anyAuth","noThrow","noThrowAuth","e","bareAuth","verifyOne","_v","v","verifyUcan","ok","requiredCapabilities","newCapabilities","map","a","capability","can","segments","orVerifyLoop","arr","i","_v2","verifyAgainstReqs","reqs","_v3","client_ucan","ucan_aud","vMethod","or","method","uc","methodOpts","cs","cap_subjects","filter","loginConfig","loginCheckId","String","caps","capability_service","subject","$in","cap","k","logins","_v4","ucanString","modelCapabilities","rootIssuer","Array","isArray","genCapability","with","defaultScheme","hierPart","defaultHierPart","namespace","checkUcan","_v5","authenticated","canU","_v6","specialChange","sk","spl","split","_v7","loginPass","scrubbedData","scrubData","checkLoginPass","lpass","methodsOnly","allMethods","methodIdx","existing","existingParams","loginOk","checkLogin","recordLoginPassId","loginIdPath","checkArr","checkId","rl","rlId","passPath","spl2","obj","o","currentMethod","splitMethod","fields","slice","join","field","topLevel","operator","operatorLevel","error","type","_no_throw_error","ucanAuth","existingLogin","hasLogin","existingUcan","login","adminPass","allUcanAuth","methods","corePath","entityKey","updateUcan","add","checkAbilities","stackAbilities","canEdit","subjectId","decoded","fct","nbf","prf","reduceAbilities","raw","proofs","encoded","isValid","patched"],"mappings":";;;;;;;;AAYM,MAAOA,cAAa,SAAQC,KAAK,CAAA;EACnCC,WAAAA,CAAYC,OAAgB,EAAA;IACxB,KAAK,CAACA,OAAO,CAAC,CAAA;AAClB,GAAA;AACH,CAAA;AACD,MAAMC,YAAY,GAAG,eAAe,CAAA;AAI9B,MAAOC,YAAa,SAAQC,yCAA0B,CAAA;AAAAJ,EAAAA,WAAAA,CAAA,GAAAK,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACxDC,gBAAgB,GAAG,IAAIC,OAAO,EAAE,CAAA;AAAA,GAAA;EAEhCC,iBAAiBA,CAACC,IAAwB,EAAA;AACtC;AACAA,IAAAA,IAAI,CAACC,iBAAiB,GAAIC,WAAmB,IAAI;AAC7C,MAAA,OAAO,EAAS,CAAA;KACnB,CAAA;AACD,IAAA,KAAK,CAACH,iBAAiB,CAACC,IAAI,CAAC,CAAA;AACjC,GAAA;EAEA,IAAIG,aAAaA,GAAA;AAAA,IAAA,IAAAC,oBAAA,CAAA;IACb,MAAMC,UAAU,GAAG,CAAA,CAAAD,oBAAA,GAAA,IAAI,CAACE,cAAc,KAAnBF,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,oBAAA,CAAqBD,aAAa,KAAI;AACrDI,MAAAA,OAAO,EAAEC,SAAS;AAClBC,MAAAA,MAAM,EAAED,SAAS;AACjBE,MAAAA,QAAQ,EAAEF,SAAAA;KACb,CAAA;AACD,IAAA,MAAMG,MAAM,GAAG,KAAK,CAACR,aAAa,CAAA;IAElC,OAAO;MACHI,OAAO,EAAEF,UAAU,CAACE,OAAO;MAC3BE,MAAM,EAAEJ,UAAU,CAACI,MAAM;MACzBC,QAAQ,EAAEL,UAAU,CAACK,QAAQ;AAC7BE,MAAAA,MAAM,EAAE,eAAe;AACvBC,MAAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;MAC1B,GAAGF,MAAAA;KACN,CAAA;AACL,GAAA;AAEA,EAAA,MAAMG,gBAAgBA,CAACC,KAAsB,EAAEC,UAAe,EAAEC,UAAiC,EAAA;IAC7F,MAAMC,aAAa,GAAGH,KAAK,KAAK,QAAQ,IAAIC,UAAU,CAACV,cAAc,IAAIW,UAAU,IAC/ED,UAAU,CAACV,cAAc,CAACJ,WAAW,KAAKe,UAAU,CAACf,WAAW,CAAA;IAEpE,MAAM;MAACA,WAAW;AAAEO,MAAAA,MAAAA;KAAO,GAAGQ,UAAU,IAAI,EAAE,CAAA;AAE9C,IAAA,IAAIf,WAAW,IAAIa,KAAK,KAAK,OAAO,EAAE;MAClC,MAAMI,SAAS,GAAG,MAAMC,uBAAY,CAAClB,WAAW,CAAC,CAC5CmB,KAAK,CAACC,GAAG,IAAG;QACTC,OAAO,CAACC,GAAG,CAAC,yCAAyC,EAAEF,GAAG,CAAC9B,OAAO,CAAC,CAAA;AACnE,QAAA,MAAMiC,MAAM,GAAG;AACXC,UAAAA,IAAI,EAAE,CAAC;AACPlC,UAAAA,OAAO,EAAE,+BAAA;SACZ,CAAA;QACD,IAAI8B,GAAG,CAAC9B,OAAO,CAACmC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;UACtCF,MAAM,CAACC,IAAI,GAAG,CAAC,CAAA;UACfD,MAAM,CAACjC,OAAO,GAAG,cAAc,CAAA;AACnC,SAAA;AACA,QAAA,MAAM,IAAIF,KAAK,CAACmC,MAAM,CAACjC,OAAO,CAAC,CAAA;AACnC,OAAC,CAAC,CAAA;MACN,MAAM;AAACoC,QAAAA,OAAO,EAAE;AAACC,UAAAA,GAAAA;AAAG,SAAA;OAAE,GAAGV,SAAS,IAAI;AAACS,QAAAA,OAAO,EAAE;AAACC,UAAAA,GAAG,EAAE,CAAA;AAAC,SAAA;OAAE,CAAA;AACzD;MACA,MAAMC,QAAQ,GAAID,GAAG,GAAG,IAAI,GAAIE,IAAI,CAACC,GAAG,EAAE,CAAA;AAC1C;AACA;AACA,MAAA,MAAMC,KAAK,GAAGC,sBAAE,CAACC,UAAU,CAAC,MAAO,IAAI,CAACC,GAAW,CAACC,IAAI,CAAC,YAAY,EAAErB,UAAU,CAAC,EAAEc,QAAQ,CAAC,CAAA;MAE7FI,sBAAE,CAACI,YAAY,CAAC,IAAI,CAACzC,gBAAgB,CAAC0C,GAAG,CAACvB,UAAU,CAAC,CAAC,CAAA;MACtD,IAAI,CAACnB,gBAAgB,CAAC2C,GAAG,CAACxB,UAAU,EAAEiB,KAAK,CAAC,CAAA;MAE5CjB,UAAU,CAACV,cAAc,GAAG;QACxBmC,QAAQ,EAAE,IAAI,CAACC,IAAI;AACnBxC,QAAAA,WAAAA;OACH,CAAA;AACL,KAAC,MAAM,IAAIa,KAAK,KAAK,YAAY,IAAIG,aAAa,EAAE;MAChD,MAAM;AAACT,QAAAA,MAAAA;OAAO,GAAG,IAAI,CAACN,aAAa,CAAA;MAEnC,OAAOa,UAAU,CAACP,MAAM,CAAC,CAAA;MACzB,OAAOO,UAAU,CAACV,cAAc,CAAA;MAEhC4B,sBAAE,CAACI,YAAY,CAAC,IAAI,CAACzC,gBAAgB,CAAC0C,GAAG,CAACvB,UAAU,CAAC,CAAC,CAAA;AACtD,MAAA,IAAI,CAACnB,gBAAgB,CAAC8C,MAAM,CAAC3B,UAAU,CAAC,CAAA;AAC5C,KAAA;AACJ,GAAA;AAEA4B,EAAAA,mBAAmBA,GAAA;AACf,IAAA,MAAMC,WAAW,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;IAEtF,KAAK,MAAMC,GAAG,IAAIC,MAAM,CAACC,IAAI,CAAC,IAAI,CAAC7C,aAAa,CAAC,EAAE;AAC/C,MAAA,IAAI,CAAC0C,WAAW,CAACI,QAAQ,CAACH,GAAG,CAAC,EAAE;QAC5B,MAAM,IAAIxD,KAAK,CAAgD,CAAA,4CAAA,EAAA,IAAI,CAACoD,IAAQ,CAAA,CAAA,EAAAI,GAA8D,CAAA,yDAAA,CAAA,CAAC,CAAA;AAC/I,OAAA;AACJ,KAAA;IAEA,IAAI,OAAO,IAAI,CAAC3C,aAAa,CAACS,MAAM,KAAK,QAAQ,EAAE;MAC/C,MAAM,IAAItB,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAACoD,IAAgC,4BAAA,CAAC,CAAA;AACzF,KAAA;AACJ,GAAA;AAEA;EACA,MAAMQ,cAAcA,CAACC,OAAY,EAAA;AAC7B,IAAA,OAAO,EAAE,CAAA;AACb,GAAA;AAEA;;;;AAIG;AACH,EAAA,MAAMC,SAASA,CAACC,EAAU,EAAEC,MAAW,EAAA;AACnC,IAAA,MAAMC,aAAa,GAAG,IAAI,CAACA,aAAa,CAAA;IACxC,MAAM;AAAC9C,MAAAA,MAAAA;KAAO,GAAG,IAAI,CAACN,aAAa,CAAA;IAEnC,IAAIoD,aAAa,KAAK,IAAI,EAAE;AACxB,MAAA,MAAM,IAAIlE,cAAY,CAAC,+BAA+B,CAAC,CAAA;AAC3D,KAAA;IAEA,MAAMmE,KAAK,GAAG,MAAM,IAAI,CAACN,cAAc,CAACI,MAAM,CAAC,CAAA;AAC/C,IAAA,MAAMG,SAAS,GAAGV,MAAM,CAACW,MAAM,CAAC,EAAE,EAAEC,iBAAM,CAACL,MAAM,EAAE,UAAU,CAAC,EAAE;AAACE,MAAAA,KAAAA;AAAK,KAAC,CAAC,CAAA;IACxE,MAAMI,MAAM,GAAG,MAAML,aAAa,CAAChB,GAAG,CAACc,EAAE,EAAEI,SAAS,CAAC,CAAA;AAErD,IAAA,IAAI,CAACH,MAAM,CAACO,QAAQ,EAAE;AAClB,MAAA,OAAOD,MAAM,CAAA;AACjB,KAAA;AAEA,IAAA,OAAOL,aAAa,CAAChB,GAAG,CAACc,EAAE,EAAE;AAAC,MAAA,GAAGC,MAAM;AAAE,MAAA,CAAC7C,MAAM,GAAGmD,MAAAA;AAAM,KAAC,CAAC,CAAA;AAC/D,GAAA;AAEA,EAAA,MAAME,WAAWA,CAAC7C,UAAgC,EAAEkC,OAAe,EAAA;IAC/D,IAAI;MAACK,KAAK;AAAEO,MAAAA,OAAAA;AAAQ,KAAA,GAAGZ,OAAO,CAAA;AAC9B,IAAA,IAAIY,OAAO,EAAE,OAAOA,OAAO,CAAC,KACvB;AAAA,MAAA,IAAAC,SAAA,CAAA;MACD,MAAM;QAACzD,OAAO;AAAE0D,QAAAA,SAAS,GAAG,MAAA;OAAO,GAAG,IAAI,CAAC9D,aAAa,CAAA;AACxD,MAAA,MAAM+D,GAAG,GAAG;AACRV,QAAAA,KAAK,EAAE;AAAC,UAAA,GAAGA,KAAK;AAAEW,UAAAA,MAAM,EAAE,CAAA;SAAE;AAC5B,QAAA,CAACF,SAAS,GAAG;AAACG,UAAAA,SAAS,EAAE,IAAI;UAAE,GAAGjB,OAAO,CAACc,SAAS,CAAA;AAAE,SAAA;OACxD,CAAA;AACD,MAAA,MAAMI,QAAQ,GAAG,OAAA,CAAAL,SAAA,GAAM,IAAI,CAAC5B,GAAG,KAAR4B,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAA,CAAUzD,OAAO,CAACA,OAAO,CAAC,CAAC+D,IAAI,CAAC;AAAC,QAAA,GAAGJ,GAAG;AAAEE,QAAAA,SAAS,EAAE,IAAI;AAAEG,QAAAA,UAAU,EAAE,IAAI;AAAEC,QAAAA,UAAU,EAAE,IAAA;AAAI,OAAQ,CAAC,CAAA,CAAA;MAC5H,IAAIH,QAAQ,CAACI,KAAK,EAAE,OAAOJ,QAAQ,CAACK,IAAI,CAAC,CAAC,CAAC,CAACC,GAAG,CAAC,KAC3C,MAAM,IAAItF,cAAY,CAAC,gDAAgD,CAAC,CAAA;AACjF,KAAA;AACJ,GAAA;AAEA,EAAA,MAAMuF,YAAYA,CAACtE,cAAqC,EAAEgD,MAAc,EAAA;IACpE,IAAI;MAACpD,WAAW;MAAE6D,OAAO;AAAEc,MAAAA,IAAAA;AAAI,KAAC,GAAGvE,cAAc,CAAA;IACjD,MAAM;MAACG,MAAM;AAAEwD,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC9D,aAAa,CAAA;IAC9C,IAAI,CAACD,WAAW,EAAE;AAEd,MAAA,IAAI2E,IAAI,EAAE3E,WAAW,GAAG4E,oBAAS,CAACD,IAAI,CAAC,CAAC,KACnC,MAAM,IAAIxF,cAAY,CAAC,uBAAuB,CAAC,CAAA;AACpD;AACJ,KAAA;AACA;AACA;AACA;AACA;AACA;AACA;IAEA,MAAM0F,WAAW,GAAG,MAAM3D,uBAAY,CAAClB,WAAW,CAAC,CAC9CmB,KAAK,CAACC,GAAG,IAAG;MACTC,OAAO,CAACC,GAAG,CAAC,iDAAiD,EAAEF,GAAG,CAAC9B,OAAO,CAAC,CAAA;AAC3E,MAAA,MAAMiC,MAAM,GAAG;AACXC,QAAAA,IAAI,EAAE,CAAC;AACPlC,QAAAA,OAAO,EAAE,+BAAA;OACZ,CAAA;MACD,IAAI8B,GAAG,CAAC9B,OAAO,CAACmC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;QACtCF,MAAM,CAACC,IAAI,GAAG,CAAC,CAAA;QACfD,MAAM,CAACjC,OAAO,GAAG,cAAc,CAAA;AACnC,OAAA;AACA,MAAA,MAAM,IAAIF,KAAK,CAACmC,MAAM,CAACjC,OAAO,CAAC,CAAA;AACnC,KAAC,CAAC,CAAA;AAEN,IAAA,MAAMoE,MAAM,GAAG;MACX1D,WAAW;AACXI,MAAAA,cAAc,EAAE;AACZmC,QAAAA,QAAQ,EAAE,KAAK;AACfvC,QAAAA,WAAAA;AACH,OAAA;KACJ,CAAA;IAED,IAAIO,MAAM,KAAK,IAAI,EAAE;AACjB,MAAA,OAAOmD,MAAM,CAAA;AACjB,KAAA;AAEA,IAAA,IAAIoB,KAAK,CAAA;IACT,MAAMC,UAAU,GAAGC,eAAI,CAAC5B,MAAM,EAAE,CAACW,SAAS,EAAExD,MAAM,CAAC,CAAC,CAAA;IACpD,IAAI,CAACwE,UAAU,EAAE;MACb,MAAMvE,QAAQ,GAAG,MAAM,IAAI,CAACoD,WAAW,CAACF,MAAM,EAAE;AAC5C,QAAA,GAAGN,MAAM;QACTS,OAAO;AACPP,QAAAA,KAAK,EAAE;AAAC2B,UAAAA,GAAG,EAAEJ,WAAW,IAAA,IAAA,GAAA,KAAA,CAAA,GAAXA,WAAW,CAAEnD,OAAO,CAACwD,GAAAA;AAAI,SAAA;AACzC,OAAA,CAAC,CAAA;MACFJ,KAAK,GAAG,MAAM,IAAI,CAAC5B,SAAS,CAAC1C,QAAQ,EAAE4C,MAAM,CAAC,CAAA;KACjD,MAAM0B,KAAK,GAAGC,UAAU,CAAA;IACzB,OAAO;AACH,MAAA,GAAGrB,MAAM;AACT,MAAA,CAACnD,MAAM,GAAGuE,KAAAA;KACb,CAAA;AAEL,GAAA;EAEA,MAAMK,KAAKA,CAACC,GAAoB,EAAA;IAC5B,MAAM;MAAC1E,MAAM;AAAEC,MAAAA,OAAAA;KAAQ,GAAG,IAAI,CAACV,aAAa,CAAA;AAC5C,IAAA,MAAMoF,WAAW,GAAGD,GAAG,CAACE,OAAO,IAAIF,GAAG,CAACE,OAAO,CAAC5E,MAAM,CAAC6E,WAAW,EAAE,CAAC,CAAA;AAEpE,IAAA,IAAI,CAACF,WAAW,IAAI,OAAOA,WAAW,KAAK,QAAQ,EAAE;AACjD,MAAA,OAAO,IAAI,CAAA;AACf,KAAA;AAEA,IAAA,MAAM,GAAGG,MAAM,EAAEC,WAAW,CAAC,GAAGJ,WAAW,CAACK,KAAK,CAACnG,YAAY,CAAC,IAAI,EAAE,CAAA;IACrE,MAAMoG,SAAS,GAAGH,MAAM,IAAI7E,OAAO,CAACiF,IAAI,CACnCC,OAAY,IAAK,IAAIC,MAAM,CAACD,OAAO,EAAE,GAAG,CAAC,CAACE,IAAI,CAACP,MAAM,CAAC,CAC1D,CAAA;AAED,IAAA,IAAIA,MAAM,IAAI,CAACG,SAAS,EAAE;AACtB,MAAA,OAAO,IAAI,CAAA;AACf,KAAA;IAEA,OAAO;MACHpD,QAAQ,EAAE,IAAI,CAACC,IAAI;AACnBxC,MAAAA,WAAW,EAAE2F,SAAS,GAAGF,WAAW,GAAGJ,WAAAA;KAC1C,CAAA;AACL,GAAA;AACH;;ACpOK,MAAOlG,YAAa,SAAQC,KAAK,CAAA;EACnCC,WAAAA,CAAYC,OAAgB,EAAA;IACxB,KAAK,CAACA,OAAO,CAAC,CAAA;AAClB,GAAA;AACH,CAAA;AAMK,MAAO0G,WAAY,SAAQC,oCAAqB,CAAA;EAElD5G,WAAAA,CAAY6C,GAAQ,EAAEgE,SAAS,GAAG,gBAAgB,EAAEC,OAAiC,EAAE,EAAA;IACnF,MAAM;MAAEC,gBAAgB;MAAE,GAAGC,IAAAA;AAAM,KAAA,GAAGF,IAAI,CAAA;AAC1C,IAAA,KAAK,CAACjE,GAAG,EAAEgE,SAAS,EAAEG,IAAI,CAAC,CAAA;AAAA,IAAA,IAAA,CAH/BC,OAAO,GAAA,KAAA,CAAA,CAAA;IAIH,IAAI,CAACpE,GAAG,GAAGA,GAAG,CAAA;IACd,IAAI,CAACoE,OAAO,GAAG;AAAEF,MAAAA,gBAAAA;KAAkB,CAAA;AACvC,GAAA;AAEA,EAAA,MAAMG,MAAMA,CAAC/B,IAA2B,EAAEpB,MAA6B,EAAA;IAAA,IAAAoD,aAAA,EAAAvD,OAAA,CAAA;AACnE,IAAA,MAAMwD,OAAO,GAAG,CAAAD,CAAAA,aAAA,GAAI,IAAA,CAACF,OAAO,KAAA,IAAA,GAAA,KAAA,CAAA,GAAZE,aAAA,CAAcJ,gBAAgB,KAAIjH,YAAY,CAAA;IAE9D,MAAM;MAACoB,MAAM;MAAEF,OAAO;AAAEqG,MAAAA,SAAS,GAAG,MAAA;KAAO,GAAG,IAAI,CAACxE,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAE5E,IAAA,MAAMsE,cAAc,GAAG,CAAA1D,CAAAA,OAAA,GAAAG,MAAM,KAAA,IAAA,GAAA,KAAA,CAAA,GAANH,OAAA,CAAQ0D,cAAc,KAAI,IAAI,CAAC1G,aAAa,CAAC0G,cAAc,CAAA;AAElF,IAAA,IAAI,CAACvD,MAAM,EAAEA,MAAM,GAAG,EAAE,CAAA;AAExB,IAAA,IAAI,CAACuD,cAAc,CAACC,MAAM,EAAE;AACxB,MAAA,MAAM,IAAIH,OAAO,CAAC,4EAA4E,CAAC,CAAA;AACnG,KAAA;AAEA,IAAA,MAAM1F,UAAU,GAAG,MAAM,IAAI,CAAC2D,YAAY,CAACF,IAAI,EAAEpB,MAAM,EAAE,GAAGuD,cAAc,CAAC,CACtExF,KAAK,CAAEC,GAAQ,IAAI;AAChB,MAAA,MAAM,IAAIhC,KAAK,CAACgC,GAAG,CAAC9B,OAAO,CAAC,CAAA;AAChC,KAAC,CAAC,CAAA;IAEN,IAAIyB,UAAU,CAACf,WAAW,EAAE;AACxB,MAAA,OAAOe,UAAU,CAAA;AACrB,KAAA;AACA,IAAA,MAAMkE,GAAG,GAAGT,IAAI,CAACS,GAAG,IAAID,eAAI,CAACjE,UAAU,EAAE,CAACR,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;AACzD,IAAA,IAAIoE,IAAI,GAAGH,IAAI,CAACG,IAAI,IAAIK,eAAI,CAACjE,UAAU,EAAE,CAACR,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAE1D,IAAI,CAAC0E,GAAG,EAAE,MAAM,IAAI7F,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACrD,IAAI,CAACuF,IAAI,EAAE,MAAM,IAAIvF,KAAK,CAAC,yCAAyC,CAAC,CAAA;AACrE;IAEA,MAAMyH,aAAa,GAAG,MAAM3F,uBAAY,CAACyD,IAAI,CAAC,CACzCxD,KAAK,CAACC,GAAG,IAAG;MACTC,OAAO,CAACC,GAAG,CAAC,mDAAmD,EAAEF,GAAG,CAAC9B,OAAO,CAAC,CAAA;AAC7E,MAAA,MAAMiC,MAAM,GAAG;AACXC,QAAAA,IAAI,EAAE,CAAC;AACPlC,QAAAA,OAAO,EAAE,+BAAA;OACZ,CAAA;MACD,IAAI8B,GAAG,CAAC9B,OAAO,CAACmC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;QACtCF,MAAM,CAACC,IAAI,GAAG,CAAC,CAAA;QACfD,MAAM,CAACjC,OAAO,GAAG,cAAc,CAAA;AACnC,OAAA;MACA+B,OAAO,CAACyF,IAAI,CAAC,iDAAiD,EAAEnC,IAAI,EAAEpD,MAAM,CAACjC,OAAO,CAAC,CAAA;AACrF,MAAA,OAAO,IAAI,CAAA;AACf,KAAC,CAAC,CAAA;IACN,IAAI,CAACuH,aAAa,EAAE;AAChB,MAAA,MAAME,MAAM,GAAGC,oBAAS,CAACrC,IAAI,CAAC,CAAA;MAC9B,IAAI;AAACsC,QAAAA,MAAAA;OAAO,GAAG,IAAI,CAAC/E,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;MAE7C,MAAM6E,MAAM,GAAGC,wBAAa,CAAC;AAACC,QAAAA,SAAS,EAAEH,MAAAA;AAAO,OAAA,CAAC,CAAA;MACjDtC,IAAI,GAAG,MAAM0C,oBAAS,CAAC;AACnBC,QAAAA,QAAQ,EAAEP,MAAM,CAACrF,OAAO,CAACwD,GAAG;QAC5BgC,MAAM;AACNK,QAAAA,iBAAiB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACpCC,QAAAA,YAAY,EAAET,MAAM,CAACrF,OAAO,CAAC+F,GAAAA;AAChC,OAAA,CAAC,CAAA;MACFrE,MAAM,CAACkB,UAAU,GAAG,IAAI,CAAA;MACxB,MAAM,IAAI,CAACpC,GAAG,CAAC7B,OAAO,CAACA,OAAO,CAAC,CAACqH,KAAK,CAAC1C,eAAI,CAACjE,UAAU,EAAE,CAACR,MAAM,EAAE,KAAK,CAAC,CAAe,EAAE;AAAC,QAAA,CAACmG,SAAS,GAAG9B,oBAAS,CAACD,IAAI,CAAA;OAAE,EAAE;QAAC,GAAGvB,MAAAA;AAAM,OAAC,CAAC,CAAA;AACvI,KAAA;AAGA,IAAA,MAAMpD,WAAW,GAAG4E,oBAAS,CAACD,IAAI,CAAC,CAAA;IAEnC,OAAO;MACH3E,WAAW;AACX,MAAA,GAAGe,UAAU;AACbX,MAAAA,cAAc,EAAE;QACZ,GAAGW,UAAU,CAACX,cAAc;AAC5BsB,QAAAA,OAAO,EAAE1B,WAAAA;AACZ,OAAA;KACJ,CAAA;AACL,GAAA;AACH;;MC7EY2H,QAAQ,CAAA;AAKjBtI,EAAAA,WAAAA,CAAYgB,OAAc,EAAEuH,OAAW,EAAEC,WAAqB,EAAA;AAAA,IAAA,IAAAC,eAAA,CAAA;AAAA,IAAA,IAAA,CAJ9DF,OAAO,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACPvH,OAAO,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACP0H,IAAI,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACJxH,MAAM,GAAA,KAAA,CAAA,CAAA;IAEF,IAAI,CAACF,OAAO,GAAGA,OAAO,CAAA;IACtB,IAAI,CAACuH,OAAO,GAAGA,OAAO,CAAA;IACtB,MAAMrH,MAAM,GAAG,CAACqH,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,IAAI;AAAE9B,MAAAA,MAAM,EAAE,OAAA;KAAS,EAAEA,MAAM,IAAI,OAAO,CAAA;IAC3F,IAAI,CAACA,MAAM,GAAGA,MAAM,CAAA;AACpB,IAAA,MAAMwH,IAAI,GAAG,CAAAD,CAAAA,eAAA,GAAAF,OAAO,CAACxE,MAAM,KAAA,IAAA,GAAA,KAAA,CAAA,GAAd0E,eAAA,CAAgBC,IAAI,KAAI,EAAE,CAAA;AACvC,IAAA,IAAG,CAACA,IAAI,CAACxH,MAAM,CAAC,EAAEwH,IAAI,CAACxH,MAAM,CAAC,GAAGqH,OAAO,CAACxE,MAAM,CAAC7C,MAAM,CAAC,CAAA;IACvD,IAAI,CAACwH,IAAI,GAAG;AAAE,MAAA,GAAGA,IAAI;MAAE,GAAGF,WAAAA;KAAa,CAAA;AAC3C,GAAA;EAEA,MAAMxF,GAAGA,CAACc,EAAa,EAAEC,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAA4E,iBAAA,CAAA;IACvC,MAAM;AAACjE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAA2F,CAAAA,iBAAA,GAAO,IAAI,CAACJ,OAAO,CAAC1F,GAAG,qBAAhB8F,iBAAA,CAAkB3H,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACgC,GAAG,CAACc,EAAE,EAAE;AAAC,MAAA,GAAGC,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAC1I,GAAA;AACA,EAAA,MAAM3D,IAAIA,CAAEhB,MAAA,GAAgB,EAAE,EAAA;AAAA,IAAA,IAAA6E,kBAAA,CAAA;IAC1B,MAAM;AAAClE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC1D,IAAA,OAAA,CAAA4F,kBAAA,GAAO,IAAI,CAACL,OAAO,CAAC1F,GAAG,KAAhB+F,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAkB5H,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC+D,IAAI,CAAC;AAAC,MAAA,GAAGhB,MAAmB;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;AAAE8D,MAAAA,UAAU,EAAC,IAAI;AAAEC,MAAAA,UAAU,EAAC,IAAI;MAAE,GAAG;QAAE,CAACP,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AACtL,GAAA;EACA,MAAMxB,MAAMA,CAAE/B,IAAW,EAAEpB,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAA8E,kBAAA,CAAA;IACzC,MAAM;AAACnE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAA6F,CAAAA,kBAAA,GAAO,IAAI,CAACN,OAAO,CAAC1F,GAAG,qBAAhBgG,kBAAA,CAAkB7H,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACkG,MAAM,CAAC/B,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAC/I,GAAA;EACA,MAAML,KAAKA,CAAEvE,EAAa,EAAEqB,IAAW,EAAEpB,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAA+E,kBAAA,CAAA;IACvD,MAAM;AAACpE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAA8F,CAAAA,kBAAA,GAAO,IAAI,CAACP,OAAO,CAAC1F,GAAG,KAAhBiG,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAkB9H,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACqH,KAAK,CAACvE,EAAE,EAAEqB,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAClJ,GAAA;EACA,MAAMK,MAAMA,CAAEjF,EAAa,EAAEqB,IAAW,EAAEpB,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAAiF,kBAAA,CAAA;IACxD,MAAM;AAACtE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAAgG,CAAAA,kBAAA,GAAO,IAAI,CAACT,OAAO,CAAC1F,GAAG,KAAhBmG,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAkBhI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC+H,MAAM,CAACjF,EAAE,EAAEqB,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AACnJ,GAAA;EACA,MAAMO,MAAMA,CAAEnF,EAAa,EAAEC,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAAmF,kBAAA,CAAA;IAC3C,MAAM;AAACxE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAAkG,CAAAA,kBAAA,GAAO,IAAI,CAACX,OAAO,CAAC1F,GAAG,qBAAhBqG,kBAAA,CAAkBlI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACiI,MAAM,CAACnF,EAAE,EAAE;AAAC,MAAA,GAAGC,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAC7I,GAAA;EAEA,MAAM/C,IAAIA,CAAC7B,EAAa,EAAEC,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAAoF,kBAAA,CAAA;IACxC,MAAM;AAACzE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAAmG,CAAAA,kBAAA,GAAO,IAAI,CAACZ,OAAO,CAAC1F,GAAG,qBAAhBsG,kBAAA,CAAkBnI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC2E,IAAI,CAAC7B,EAAE,EAAE;AAAC,MAAA,GAAGC,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAC3I,GAAA;AACA,EAAA,MAAMU,KAAKA,CAAErF,MAAA,GAAgB,EAAE,EAAA;AAAA,IAAA,IAAAsF,kBAAA,CAAA;IAC3B,MAAM;AAAC3E,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC1D,IAAA,OAAA,CAAAqG,kBAAA,GAAO,IAAI,CAACd,OAAO,CAAC1F,GAAG,KAAhBwG,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAkBrI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACoI,KAAK,CAAC;AAAC,MAAA,GAAGrF,MAAmB;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAM,OAAA;AAAA,KAAC,CAAC,CAAA;AACrJ,GAAA;EACA,MAAMY,OAAOA,CAAEnE,IAAW,EAAEpB,SAAe,EAAE,EAAA;AAAA,IAAA,IAAAwF,kBAAA,CAAA;IACzC,MAAM;AAAC7E,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAAuG,CAAAA,kBAAA,GAAO,IAAI,CAAChB,OAAO,CAAC1F,GAAG,qBAAhB0G,kBAAA,CAAkBvI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACsI,OAAO,CAACnE,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAChJ,GAAA;EACA,MAAMc,MAAMA,CAAE1F,EAAa,EAAEqB,IAAW,EAAEpB,SAAe,EAAE,EAAA;AAAA,IAAA,IAAA0F,mBAAA,CAAA;IACvD,MAAM;AAAC/E,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAAyG,CAAAA,mBAAA,GAAO,IAAI,CAAClB,OAAO,CAAC1F,GAAG,KAAhB4G,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,mBAAA,CAAkBzI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACwI,MAAM,CAAC1F,EAAE,EAAEqB,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AACnJ,GAAA;EACA,MAAMgB,OAAOA,CAAE5F,EAAa,EAAEqB,IAAW,EAAEpB,SAAe,EAAE,EAAA;AAAA,IAAA,IAAA4F,mBAAA,CAAA;IACxD,MAAM;AAACjF,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAA2G,CAAAA,mBAAA,GAAO,IAAI,CAACpB,OAAO,CAAC1F,GAAG,KAAhB8G,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,mBAAA,CAAkB3I,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC0I,OAAO,CAAC5F,EAAE,EAAEqB,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AACpJ,GAAA;EACA,MAAMkB,OAAOA,CAAE9F,EAAa,EAAEC,SAAe,EAAE,EAAA;AAAA,IAAA,IAAA8F,mBAAA,CAAA;IAC3C,MAAM;AAACnF,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAA6G,CAAAA,mBAAA,GAAO,IAAI,CAACtB,OAAO,CAAC1F,GAAG,qBAAhBgH,mBAAA,CAAkB7I,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC4I,OAAO,CAAC9F,EAAE,EAAE;AAAC,MAAA,GAAGC,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAC9I,GAAA;AAEH;;AC5EM,MAAMoB,UAAU,GAAG,UAAS;AAEtBC,MAAAA,SAAS,GAAIxB,OAA4B,IAAQ;EAC1D,MAAMyB,IAAI,GAAGzB,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,YAAY,CAAC,IAAI8G,UAAU,CAAA;AACxD,EAAA,OAAOnE,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,QAAQiG,IAAQ,CAAA,CAAA,EAAAzB,OAAO,CAACyB,IAAI,IAAIzB,OAAO,CAACzE,GAAI,CAAA,CAAC,IAAI7C,SAAS,CAAA;AAC1F,EAAC;AAEM,MAAMgJ,UAAU,GAAG,OAAO1B,OAAmB,EAAEtB,OAAiD,KAAiB;AACpH,EAAA,IAAIiD,EAAE,GAAGH,SAAS,CAACxB,OAAO,CAAC,CAAA;AAC3B,EAAA,IAAG,CAAC2B,EAAE,IAAI3B,OAAO,CAACzE,EAAE,EAAE;IAClBoG,EAAE,GAAG,MAAM,IAAI5B,QAAQ,CAACC,OAAO,CAACyB,IAAI,EAAEzB,OAAO,EAAE;AAAE1D,MAAAA,SAAS,EAAE,CAAAoC,OAAO,oBAAPA,OAAO,CAAEpC,SAAS,MAAK,KAAA;AAAK,KAAE,CAAC,CAAC7B,GAAG,CAACuF,OAAO,CAACzE,EAAE,EAAE;AAAEqG,MAAAA,YAAY,EAAE,IAAI;AAAElF,MAAAA,UAAU,EAAE,IAAI;AAAED,MAAAA,UAAU,EAAE,IAAI;MAAE,IAAG,CAAAiC,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAElD,MAAM,KAAI,EAAE,CAAA;AAAE,KAAA,CAAC,CAAA;AACrM,GAAA;AACA,EAAA,OAAOmG,EAAE,CAAA;AACb,EAAC;MAEYE,SAAS,GAAGA,CAAC7B,OAAmB,EAAE8B,GAAO,KAAgB;EAClE,MAAML,IAAI,GAAGzB,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,YAAY,CAAC,IAAI8G,UAAU,CAAA;AACxDvB,EAAAA,OAAO,CAACxE,MAAM,GAAGuG,eAAI,CAAC/B,OAAO,CAACxE,MAAM,EAAU,CAAA,KAAA,EAAAiG,IAAQ,CAAA,CAAA,EAAAzB,OAAO,CAACyB,IAAQ,CAAA,CAAA,EAAA,CAAAK,GAAG,IAAHA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAG,CAAEjF,GAAG,KAAImD,OAAO,CAACzE,EAAI,CAAA,CAAA,EAAEuG,GAAG,CAAC,CAAA;AACpG,EAAA,OAAO9B,OAAO,CAAA;AAClB;;ACPA,MAAMgC,SAAS,GAAG,GAAG,CAAA;AAkBd,MAAMC,OAAO,GAAY,IAAc;AAEvC,MAAMC,OAAO,GAAY,IAAc;AAoCjCC,MAAAA,WAAW,GAAG,MAAUnC,OAAuB,IAA6B;EACrF,MAAMnH,MAAM,GAAGmH,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAe,CAAA;AAC9D,EAAA,MAAM9B,MAAM,GAAGyE,eAAI,CAAC4C,OAAO,EAAE,CAAC,MAAM,EAAEnH,MAAM,CAACF,MAAM,CAAC,CAAC,CAAA;AACrD,EAAA,IAAIA,MAAM,EAAE;AACRqH,IAAAA,OAAO,GAAG+B,eAAI,CAAC/B,OAAO,EAAE,CAACnH,MAAM,CAACsD,SAAS,EAAEtD,MAAM,CAACF,MAAM,CAAC,EAAEA,MAAM,CAAC,CAAA;AACtE,GAAA;EACA,IAAI;AACAqH,IAAAA,OAAO,GAAG,MAAMlD,2BAAY,CAAC,KAAK,CAAC,CAACkD,OAAc,CAAC,CAC9CzG,KAAK,CAAC,MAAK;AACR,MAAA,OAAOyG,OAAO,CAAA;AAClB,KAAC,CAAC,CAAA;GACT,CAAC,OAAOoC,CAAC,EAAE;AACR,IAAA,OAAOpC,OAAO,CAAA;AAClB,GAAA;AACA,EAAA,OAAOA,OAAO,CAAA;AAClB,EAAC;AAEYqC,MAAAA,QAAQ,GAAG,MAAUrC,OAAuB,IAA6B;EAClF,MAAMnH,MAAM,GAAGmH,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAe,CAAA;AAC9D,EAAA,MAAM9B,MAAM,GAAGyE,eAAI,CAAC4C,OAAO,EAAE,CAAC,MAAM,EAAEnH,MAAM,CAACF,MAAM,CAAC,CAAC,CAAA;AACrD,EAAA,IAAIA,MAAM,EAAEqH,OAAO,GAAG+B,eAAI,CAAC/B,OAAO,EAAE,CAACnH,MAAM,CAACsD,SAAS,EAAEtD,MAAM,CAACF,MAAM,CAAC,EAAEA,MAAM,CAAC,CAAA;AAC9E,EAAA,OAAOmE,2BAAY,CAAC,KAAK,CAAC,CAACkD,OAAc,CAAC,CAAA;AAC9C,EAAC;AAED,MAAMsC,SAAS,GAAG,OAAOvF,IAAY,EAAE2B,OAAsB,EAAEhF,GAAa,KAAI;EAC5E,IAAI;AAAA,IAAA,IAAA6I,EAAA,CAAA;IACA,IAAIC,CAAC,GAAG,MAAMC,qBAAU,CAAC1F,IAAI,EAAE2B,OAAO,CAAC,CAAA;AACvC,IAAA,IAAI,EAAA6D,CAAAA,EAAA,GAACC,CAAC,KAADD,IAAAA,IAAAA,EAAA,CAAGG,EAAE,CAAIhE,IAAAA,OAAO,CAACiE,oBAAoB,EAAE;MACxC,MAAMC,eAAe,GAAGlE,OAAO,CAACiE,oBAAoB,CAACE,GAAG,CAACC,CAAC,IAAG;AACzD,QAAA,IAAIA,CAAC,CAACC,UAAU,CAACC,GAAG,KAAKhB,SAAS,EAAEc,CAAC,CAACC,UAAU,CAACC,GAAG,CAACC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAA;AACrE,QAAA,OAAOH,CAAC,CAAA;AACZ,OAAC,CAAC,CAAA;AACF,MAAA,IAAIpJ,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,0BAA0B,EAAEkJ,eAAe,EAAExD,oBAAS,CAACrC,IAAI,CAAC,CAAC,CAAA;AAClFyF,MAAAA,CAAC,GAAG,MAAMC,qBAAU,CAAC1F,IAAI,EAAE;AACvB,QAAA,GAAG2B,OAAO;AAAEiE,QAAAA,oBAAoB,EAAEC,eAAAA;AACrC,OAAA,CAAC,CAAA;MACF,IAAIlJ,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,6BAA6B,EAAE8I,CAAC,CAAC,CAAA;AAC1D,KAAA;AACA,IAAA,OAAOA,CAAC,CAAA;GACX,CAAC,OAAOJ,CAAM,EAAE;IACb,OAAO;AAACM,MAAAA,EAAE,EAAE,KAAK;AAAElJ,MAAAA,GAAG,EAAE,CAAC4I,CAAC,CAAC1K,OAAO,CAAA;KAAE,CAAA;AACxC,GAAA;AACJ,CAAC,CAAA;AACM,MAAMwL,YAAY,GAAG,OAAOC,GAAqB,EAAEzJ,GAAa,KAAwB;AAC3F,EAAA,IAAI8I,CAAC,GAAQ;AAACE,IAAAA,EAAE,EAAE,KAAK;AAAExF,IAAAA,KAAK,EAAE,EAAA;GAAG,CAAA;EAEnC,IAAI;AACA,IAAA,KAAK,MAAMkG,CAAC,IAAID,GAAG,EAAE;AAAA,MAAA,IAAAE,GAAA,CAAA;MACjB,IAAI3J,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAEyJ,GAAG,CAACC,CAAC,CAAC,EAAEhE,oBAAS,CAAC+D,GAAG,CAACC,CAAC,CAAC,CAACrG,IAAI,CAAC,CAAC,CAAA;MACtE,IAAI,EAAA,CAAAsG,GAAA,GAACb,CAAC,aAADa,GAAA,CAAGX,EAAE,CAAE,EAAA;QACR,MAAM;UAAC3F,IAAI;UAAE,GAAG2B,OAAAA;AAAQ,SAAA,GAAGyE,GAAG,CAACC,CAAC,CAAC,CAAA;QACjCZ,CAAC,GAAG,MAAMF,SAAS,CAACvF,IAAI,EAAE2B,OAAO,EAAEhF,GAAG,CAAC,CAAA;QACvC,IAAIA,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAE8I,CAAC,CAAC,CAAA;AACjD,OAAC,MAAM,MAAA;AACX,KAAA;AACA,IAAA,OAAOA,CAAC,CAAA;GACX,CAAC,OAAOJ,CAAM,EAAE;IACb,OAAO;AAACM,MAAAA,EAAE,EAAE,KAAK;AAAElJ,MAAAA,GAAG,EAAE,CAAC4I,CAAC,CAAC1K,OAAO,CAAA;KAAE,CAAA;AACxC,GAAA;AACJ,EAAC;AASM,MAAM4L,iBAAiB,GAAGA,CAAIC,IAA+B,EAAE1K,MAAoB,EAAE6F,OAAyB,KAAI;EACrH,OAAO,MAAOsB,OAAuB,IAAwB;AAAA,IAAA,IAAAwD,GAAA,CAAA;AACzD,IAAA,MAAM9J,GAAG,GAAGgF,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAEhF,GAAG,CAAA;IACxB,MAAMqD,IAAI,GAAGK,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE3C,MAAM,CAAC4K,WAAW,CAAW,CAAA;AAC/D,IAAA,MAAM/D,QAAQ,GAAG,CAAAhB,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAEgB,QAAQ,KAAItC,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE3C,MAAM,CAAC6K,QAAQ,CAAW,CAAA;IACrF,IAAIhK,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,qBAAqB,EAAE6J,IAAI,CAAC,CAAA;AACjD,IAAA,IAAII,OAAqE,CAAA;IACzE,MAAMC,EAAE,GAAG,CAAAlF,OAAO,oBAAPA,OAAO,CAAEkF,EAAE,KAAI,EAAE,CAAA;AAC5B,IAAA,IAAI7G,IAAI,KAAK6G,EAAE,KAAK,GAAG,IAAIA,EAAE,CAACzI,QAAQ,CAAC6E,OAAO,CAAC6D,MAAM,CAAC,CAAC,EAAEF,OAAO,GAAGA,CAACG,EAAW,EAAEC,UAAuB,KAAKb,YAAY,CAAC,CAACK,IAAI,IAAI,EAAE,EAAEV,GAAG,CAACC,CAAC,IAAG;MAC3I,OAAO;QACH/F,IAAI,EAAE+G,EAAE,IAAI/G,IAAI;QAChB2C,QAAQ,EAAE,CAAAqE,UAAU,IAAA,IAAA,GAAA,KAAA,CAAA,GAAVA,UAAU,CAAEzG,GAAG,KAAIoC,QAAQ;QACrCiD,oBAAoB,EAAE,CAACG,CAAC,CAAA;OAC3B,CAAA;AACL,KAAC,CAAC,EAAEpJ,GAAG,CAAC,CAAA,KACHiK,OAAO,GAAGA,CAACG,EAAW,EAAEC,UAAuB,KAAKzB,SAAS,CAACwB,EAAE,IAAI/G,IAAI,EAAE;MAC3E2C,QAAQ,EAAE,CAAAqE,UAAU,IAAA,IAAA,GAAA,KAAA,CAAA,GAAVA,UAAU,CAAEzG,GAAG,KAAIoC,QAAQ;AACrCiD,MAAAA,oBAAoB,EAAEY,IAAAA;KACzB,EAAE7J,GAAG,CAAuB,CAAA;AAC7B,IAAA,IAAI8I,CAAC,GAAG,MAAMmB,OAAO,EAAE,CAAA;IACvB,IAAIjK,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,kBAAkB,EAAE8I,CAAC,CAAC,CAAA;IAC3C,IAAAgB,CAAAA,GAAA,GAAIhB,CAAC,KAAA,IAAA,IAADgB,GAAA,CAAGd,EAAE,EAAE,OAAOF,CAAC,CAAA;AACnB,IAAA,MAAMwB,EAAE,GAAG,CAAC,CAAAtF,OAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEuF,YAAY,KAAI,EAAE,EAAEC,MAAM,CAACpB,CAAC,IAAI,CAAC,CAACA,CAAC,CAAC,CAAA;IACzD,IAAIpJ,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEsK,EAAE,CAAC,CAAA;AAC9C,IAAA,IAAIA,EAAE,EAAE;AACJ,MAAA,MAAM3L,aAAa,GAAG,CAAAQ,MAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAEsL,WAAW,KAAInE,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAW,CAAA;AACxF,MAAA,MAAM2J,YAAY,GAAGC,MAAM,CAACjH,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAK,CAAA,EAAAnD,aAAa,CAACM,MAAM,MAAM,IAAI,EAAE,CAAC,CAAQ,CAAA;AAC7F,MAAA,MAAM2L,IAAI,GAAG,MAAM,IAAIvE,QAAQ,CAAC1H,aAAa,CAACkM,kBAAkB,IAAI,MAAM,EAAEvE,OAAO,CAAC,CAACxD,IAAI,CAAC;AACtFd,QAAAA,KAAK,EAAE;UACHW,MAAM,EAAE2H,EAAE,CAAChF,MAAM;AACjBwF,UAAAA,OAAO,EAAE;AAACC,YAAAA,GAAG,EAAET,EAAAA;AAAG,WAAA;SACrB;AACDvH,QAAAA,UAAU,EAAE,IAAI;AAChBC,QAAAA,UAAU,EAAE,IAAA;OACf,CAAC,CACGnD,KAAK,CAACC,GAAG,IAAIC,OAAO,CAACC,GAAG,CAAC,oCAAoCF,GAAG,CAAC9B,OAAS,CAAA,CAAA,CAAC,CAAC,CAAA;MACjF,IAAIgC,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,MAAM,EAAE4K,IAAI,CAAC,CAAA;AAClC,MAAA,IAAIA,IAAI,IAAA,IAAA,IAAJA,IAAI,CAAE1H,IAAI,EAAE;AACZ,QAAA,KAAK,MAAM8H,GAAG,IAAIJ,IAAI,CAAC1H,IAAI,EAAE;UACzB,KAAK,MAAM+H,CAAC,IAAID,GAAG,CAACJ,IAAI,IAAI,EAAE,EAAE;YAC5B,IAAI5K,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,WAAW,EAAEiL,CAAC,EAAED,GAAG,CAACJ,IAAI,CAACK,CAAC,CAAC,CAACC,MAAM,EAAER,YAAY,CAAC,CAAA;YACtE,IAAI,CAACM,GAAG,CAACJ,IAAI,CAACK,CAAC,CAAC,CAACC,MAAM,IAAI,EAAE,EAAE/B,GAAG,CAAEC,CAAM,IAAKuB,MAAM,CAACvB,CAAC,CAAC,CAAC,CAAC3H,QAAQ,CAACiJ,YAAY,CAAC,EAAE;AAAA,cAAA,IAAAS,GAAA,CAAA;cAC9E,IAAI;AACA,gBAAA,MAAMC,UAAU,GAAG9H,oBAAS,CAAC0H,GAAG,CAACJ,IAAI,CAACK,CAAC,CAAC,CAAC5H,IAAI,CAAC,CAAA;gBAC9C,IAAIrD,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,iBAAiB,EAAEoL,UAAU,CAAC,CAAA;AACnD,gBAAA,IAAIA,UAAU,EAAE;AACZtC,kBAAAA,CAAC,GAAG,MAAMmB,OAAO,CAACmB,UAAU,EAAE;oBAACxH,GAAG,EAAEoH,GAAG,CAACrH,GAAAA;AAAG,mBAAC,CAAC,CAAA;kBAC7C,IAAI3D,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAE8I,CAAC,CAAC,CAAA;AAC7C,iBAAA;eACH,CAAC,OAAOJ,CAAM,EAAE;AACb3I,gBAAAA,OAAO,CAACC,GAAG,CAAC,CAAA,+BAAA,EAAkCgL,GAAG,CAAC7H,GAAG,CAAA,MAAA,EAASuF,CAAC,CAAC1K,OAAO,CAAA,CAAE,CAAC,CAAA;AAC9E,eAAA;AACA,cAAA,IAAIgH,OAAO,IAAA,IAAA,IAAPA,OAAO,CAAEhF,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAE8I,CAAC,CAAC,CAAA;cAClD,IAAAqC,CAAAA,GAAA,GAAIrC,CAAC,KAAA,IAAA,IAADqC,GAAA,CAAGnC,EAAE,EAAE,OAAOF,CAAC,CAAA;AACvB,aAAA;AACJ,WAAA;AACJ,SAAA;AACJ,OAAA;AACJ,KAAA;AACA,IAAA,OAAOA,CAAC,CAAA;GACX,CAAA;AACL,EAAC;MASYuC,iBAAiB,GAAGA,CAACxB,IAA4B,EAAE1K,MAA6B,KAA+B;EAExH,MAAMmM,UAAU,GAAGzF,wBAAa,CAAC;IAACC,SAAS,EAAE3G,MAAM,CAACwG,MAAAA;AAAO,GAAA,CAAC,CAAChC,GAAG,EAAE,CAAA;EAClE,IAAI,CAAC4H,KAAK,CAACC,OAAO,CAAC3B,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;AACnC,EAAA,OAAOA,IAAI,CAACV,GAAG,CAACC,CAAC,IAAG;IAChB,OAAO;MACHC,UAAU,EAAEkC,KAAK,CAACC,OAAO,CAACpC,CAAC,CAAC,GAAGqC,wBAAa,CAAC;AACzCC,QAAAA,IAAI,EAAE;UAACxH,MAAM,EAAE/E,MAAM,CAACwM,aAAa;UAAEC,QAAQ,EAAEzM,MAAM,CAAC0M,eAAAA;SAAgB;AACtEvC,QAAAA,GAAG,EAAE;AAACwC,UAAAA,SAAS,EAAE1C,CAAC,CAAC,CAAC,CAAC;AAAEG,UAAAA,QAAQ,EAAE,OAAOH,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAACA,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGA,CAAC,CAAC,CAAC,CAAA;AAAE,SAAA;OAC7E,EAAEjK,MAAM,CAAC,GAAGsM,wBAAa,CAACrC,CAAC,EAAEjK,MAAM,CAAC;AACrCmM,MAAAA,UAAAA;KACH,CAAA;AACL,GAAC,CAA8B,CAAA;AACnC,EAAC;MAKYS,SAAS,GAAGA,CAAC9C,oBAA6B,EAAEjE,OAAsC,KAAI;EAC/F,OAAO,MAAOsB,OAAoB,IAA0B;AAAA,IAAA,IAAA0F,GAAA,CAAA;AACxD,IAAA,MAAMrN,aAAa,GAAG,CAAAqG,OAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEyF,WAAW,KAAInE,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAW,CAAA;AAEzF,IAAA,IAAI+H,CAAC,GAAQ;AAACE,MAAAA,EAAE,EAAE,KAAK;AAAExF,MAAAA,KAAK,EAAE,EAAA;KAAG,CAAA;AAEnC,IAAA,MAAMqG,IAAI,GAA8BwB,iBAAiB,CAACpC,oBAA8C,EAAEtK,aAAsC,CAAC,CAAA;IAEjJ,IAAIkL,IAAI,CAACvE,MAAM,EAAE;AACbwD,MAAAA,CAAC,GAAG,MAAMc,iBAAiB,CAACC,IAAI,EAAElL,aAA6B,EAAEqG,OAAO,CAAC,CAACsB,OAAO,CAAC,CAAA;AAElF;KACH,MAAM,IAAI2C,oBAAoB,KAAK,GAAG,EAAEH,CAAC,CAACE,EAAE,GAAG,IAAI,CAAA;AACpD,IAAA,IAAA,CAAAgD,GAAA,GAAIlD,CAAC,aAADkD,GAAA,CAAGhD,EAAE,EAAE;AACP1C,MAAAA,OAAO,CAACxE,MAAM,CAACmK,aAAa,GAAG,IAAI,CAAA;AACnC3F,MAAAA,OAAO,CAACxE,MAAM,CAACoK,IAAI,GAAG,IAAI,CAAA;AAC1B,MAAA,OAAO5F,OAAO,CAAA;AAClB,KAAC,MAAM;AAAA,MAAA,IAAA6F,GAAA,CAAA;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,MAAA,IAAInH,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEhF,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,yBAAyB,EAAEgF,OAAO,oBAAPA,OAAO,CAAEoH,aAAa,CAAC,CAAA;AAChF,MAAA,IAAIpH,OAAO,IAAA,IAAA,IAAPA,OAAO,CAAEoH,aAAa,EAAE;AACxB,QAAA,IAAIpH,OAAO,CAACoH,aAAa,KAAK7D,OAAO,EAAE;AACnCjC,UAAAA,OAAO,CAACxE,MAAM,CAACoK,IAAI,GAAG,IAAI,CAAA;AAC1B,UAAA,OAAO5F,OAAO,CAAA;SACjB,MAAM,IAAIiF,KAAK,CAACC,OAAO,CAACxG,OAAO,CAACoH,aAAa,CAAC,EAAE;AAC7C,UAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC3K,QAAQ,CAAC6E,OAAO,CAAC6D,MAAM,CAAC,EAAE;AACxD,YAAA,IAAIoB,KAAK,CAACC,OAAO,CAAClF,OAAO,CAACpD,IAAI,CAAC,EAAE,MAAM,IAAIpF,KAAK,CAAC,2CAA2C,CAAC,CAAA;YAC7F,KAAK,MAAMmN,CAAC,IAAI3E,OAAO,CAACpD,IAAI,IAAI,EAAE,EAAE;AAChC,cAAA,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAACzB,QAAQ,CAACwJ,CAAC,CAAC,EAAE;AAC/D,gBAAA,KAAK,MAAMoB,EAAE,IAAI/F,OAAO,CAACpD,IAAI,CAAC+H,CAAC,CAAC,IAAI,EAAE,EAAE;kBACpC,IAAI,CAACjG,OAAO,CAACoH,aAAa,CAAC3K,QAAQ,CAAC4K,EAAE,CAAC,EAAE;AACrC,oBAAA,MAAMC,GAAG,GAAGD,EAAE,CAACE,KAAK,CAAC,GAAG,CAAC,CAAA;AACzB,oBAAA,IAAID,GAAG,CAAChH,MAAM,KAAK,CAAC,EAAE,OAAOgB,OAAO,CAACpD,IAAI,CAAC+H,CAAC,CAAC,CAACoB,EAAE,CAAC,CAAC,KAC5C,IAAI,CAACrH,OAAO,CAACoH,aAAa,CAAC3K,QAAQ,CAAC6K,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAOhG,OAAO,CAACpD,IAAI,CAAC+H,CAAC,CAAC,CAACoB,EAAE,CAAC,CAAA;AAChF,mBAAA;AACJ,iBAAA;AACJ,eAAC,MAAM,IAAI,CAACrH,OAAO,CAACoH,aAAa,CAAC3K,QAAQ,CAACwJ,CAAC,CAAC,EAAE,OAAO3E,OAAO,CAACpD,IAAI,CAAC+H,CAAC,CAAC,CAAA;AACzE,aAAA;AACA3E,YAAAA,OAAO,CAACxE,MAAM,CAACoK,IAAI,GAAG,IAAI,CAAA;AAC1B,YAAA,OAAO5F,OAAO,CAAA;AAClB,WAAA;AACJ,SAAA;AACJ,OAAA;AACA,MAAA,IAAA,CAAA6F,GAAA,GAAIrD,CAAC,aAADqD,GAAA,CAAGnD,EAAE,EAAE;AACP1C,QAAAA,OAAO,CAACxE,MAAM,CAACmK,aAAa,GAAG,IAAI,CAAA;AACnC3F,QAAAA,OAAO,CAACxE,MAAM,CAACoK,IAAI,GAAG,IAAI,CAAA;AAC1B,QAAA,OAAO5F,OAAO,CAAA;AAClB,OAAC,MAAM;AAAA,QAAA,IAAAkG,GAAA,CAAA;AAEH;QACA,MAAM;AAACC,UAAAA,SAAAA;SAAU,GAAGzH,OAAO,IAAI;UAACyH,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;SAAE,CAAA;AAC5E,QAAA,IAAIA,SAAS,IAAA,IAAA,IAATA,SAAS,CAAEnH,MAAM,EAAE;AACnB;UACA,IAAIoH,YAAY,GAAW,EAAE,CAAA;AAC7B;UACA,IAAIC,SAAS,GAAG,IAAI,CAAA;AACpB,UAAA,MAAMC,cAAc,GAAG,MAAOC,KAAsB,IAAI;YACpD,IAAIC,WAAW,GAAG,EAAE,CAAA;AACpB,YAAA,MAAMC,UAAU,GAAGF,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAA;YACnC,IAAIG,SAAS,GAAG,CAAC,CAAC,CAAA;AAClB,YAAA,IAAID,UAAU,EAAEC,SAAS,GAAG,CAAC,CAAC,KACzB;AACD;AACAF,cAAAA,WAAW,GAAID,KAAK,CAAC,CAAC,CAAc,CAAC1D,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACmD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;cAC9DS,SAAS,GAAGF,WAAW,CAAC3M,OAAO,CAACmG,OAAO,CAAC6D,MAAM,CAAC,CAAA;AACnD,aAAA;AACA;AACA,YAAA,IAAI6C,SAAS,GAAG,CAAC,CAAC,EAAE;AAChB;AACA,cAAA,MAAMC,QAAQ,GAAG,MAAMjF,UAAU,CAAC1B,OAAO,EAAE;AAACxE,gBAAAA,MAAM,EAAEkD,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAEkI,cAAAA;AAAc,eAAC,CAAC,CAAA;cAC7E,IAAIC,OAAO,GAAG,KAAK,CAAA;AAEnB;cACA,MAAMC,UAAU,GAAGA,CAACC,iBAAyB,EAAEC,WAAsB,GAAA,KAAK,KAAI;AAC1E,gBAAA,MAAM5C,YAAY,GAAGhH,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAK,CAAA,EAAAnD,aAAa,CAACM,MAAM,CAAIqO,CAAAA,EAAAA,WAAW,EAAE,CAAQ,CAAA;AAC1F;gBACA,IAAI5C,YAAY,IAAI2C,iBAAiB,EAAE;AACnC;kBACA,MAAME,QAAQ,GAAGhC,KAAK,CAACC,OAAO,CAACd,YAAY,CAAC,GAAGA,YAAY,CAACvB,GAAG,CAACC,CAAC,IAAIuB,MAAM,CAACvB,CAAC,CAAC,CAAC,GAAG,CAACuB,MAAM,CAACD,YAAY,CAAC,CAAC,CAAA;AACxG,kBAAA,IAAIa,KAAK,CAACC,OAAO,CAAC6B,iBAAiB,CAAC,EAAE;AAClC;AACA,oBAAA,KAAK,IAAI3D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6D,QAAQ,CAACjI,MAAM,EAAEoE,CAAC,EAAE,EAAE;sBACtC,MAAM8D,OAAO,GAAG7C,MAAM,CAAC4C,QAAQ,CAAC7D,CAAC,CAAC,CAAC,CAAA;sBACnC,KAAK,IAAI+D,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGJ,iBAAiB,CAAC/H,MAAM,GAAG;wBAC7C,MAAMoI,IAAI,GAAG/C,MAAM,CAAC0C,iBAAiB,CAACI,EAAE,CAAC,CAAC,CAAA;wBAC1C,IAAIC,IAAI,KAAKF,OAAO,EAAEL,OAAO,GAAG,IAAI,CAAC,KAChCM,EAAE,EAAE,CAAA;AACb,uBAAA;AACA,sBAAA,IAAIN,OAAO,EAAE,OAAA;AACjB,qBAAA;mBACH,MAAM,IAAII,QAAQ,CAAC9L,QAAQ,CAACkJ,MAAM,CAAC0C,iBAAiB,CAAC,CAAC,EAAE;oBACrD,OAAOF,OAAO,GAAG,IAAI,CAAA;AACzB,mBAAA;AACJ,iBAAC,MAAM,OAAA;eACV,CAAA;AAED,cAAA,IAAIF,QAAQ,EAAE;AACV3G,gBAAAA,OAAO,GAAG6B,SAAS,CAAC7B,OAAO,EAAE2G,QAAQ,CAAC,CAAA;gBAGtC,KAAK,MAAMU,QAAQ,IAAId,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;kBACnC,MAAMP,GAAG,GAAG3B,MAAM,CAACgD,QAAQ,CAAC,CAACpB,KAAK,CAAC,GAAG,CAAC,CAAA;kBACvC,IAAID,GAAG,CAAC,CAAC,CAAC,CAAC7K,QAAQ,CAAC,GAAG,CAAC,EAAE;oBACtB,MAAMmM,IAAI,GAAGtB,GAAG,CAAC,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC,CAAA;oBAC9B,MAAMsB,GAAG,GAAGnK,eAAI,CAACuJ,QAAQ,EAAEW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,oBAAA,IAAIC,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;AAChC,sBAAA,IAAItC,KAAK,CAACC,OAAO,CAACqC,GAAG,CAAC,EAAE;AACpB;AACA,wBAAA,KAAK,MAAMC,CAAC,IAAID,GAAG,EAAE;AACjBT,0BAAAA,UAAU,CAAC1J,eAAI,CAACoK,CAAC,EAAEF,IAAI,CAAC,CAAC,CAAC,CAAW,EAAEtB,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAA;AACvD,0BAAA,IAAIa,OAAO,EAAE,MAAA;AACjB,yBAAA;AACJ,uBAAC,MAAM;AACH;AACA,wBAAA,KAAK,MAAMlC,CAAC,IAAI4C,GAAG,EAAE;0BACjBT,UAAU,CAAC1J,eAAI,CAACmK,GAAG,EAAK,CAAA5C,EAAAA,CAAK,IAAA2C,IAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAW,EAAEtB,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAA;AACnE,0BAAA,IAAIa,OAAO,EAAE,MAAA;AACjB,yBAAA;AACJ,uBAAA;AACJ,qBAAA;AAEJ,mBAAC,MAAMC,UAAU,CAAC1J,eAAI,CAACuJ,QAAQ,EAAEX,GAAG,CAAC,CAAC,CAAC,CAAW,EAAEA,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAA;AAExE,iBAAA;AACJ,eAAA;AAEA,cAAA,IAAIa,OAAO,EAAE;gBACTrE,CAAC,CAACE,EAAE,GAAG,IAAI,CAAA;AACX;AACA;AACA,gBAAA,IAAI6D,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAACvI,IAAI,CAAC8E,CAAC,IAAIyD,KAAK,CAAC,CAAC,CAAC,CAACpL,QAAQ,CAAC2H,CAAC,CAAC,CAAC,EAAE;AAChF,kBAAA,MAAM2E,aAAa,GAAGhB,UAAU,GAAG,GAAG,GAAGF,KAAK,CAAC,CAAC,CAAC,CAACG,SAAS,CAAC,CAAA;kBAC5D,MAAMgB,WAAW,GAAGD,aAAa,CAACxB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C;kBACA,IAAIyB,WAAW,KAAKD,aAAa,EAAE;AAC/B;oBACA,MAAME,MAAM,GAAGF,aAAa,CAACxB,KAAK,CAAC,GAAG,CAAC,CAAC2B,KAAK,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC,CAAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;AAE1E,oBAAA,KAAK,MAAM6B,KAAK,IAAIH,MAAM,EAAE;sBACxB,MAAMI,QAAQ,GAAG3K,eAAI,CAAC4C,OAAO,CAACpD,IAAI,EAAEkL,KAAK,CAAC,CAAA;AAC1C,sBAAA,IAAIC,QAAQ,EAAE3B,YAAY,GAAGrE,eAAI,CAACqE,YAAY,EAAE0B,KAAK,EAAEC,QAAQ,CAAC,CAAC,KAC5D;wBACD,KAAK,MAAMC,QAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE;AAC3C,0BAAA,MAAMC,aAAa,GAAG7K,eAAI,CAAC4C,OAAO,CAACpD,IAAI,EAAE,CAAGoL,EAAAA,QAAQ,CAAIF,CAAAA,EAAAA,KAAK,EAAE,CAAC,CAAA;AAChE,0BAAA,IAAIG,aAAa,EAAE7B,YAAY,GAAGrE,eAAI,CAACqE,YAAY,EAAE,CAAA,EAAG4B,QAAQ,CAAIF,CAAAA,EAAAA,KAAK,CAAE,CAAA,EAAEG,aAAa,CAAC,CAAA;AAC/F,yBAAA;AACJ,uBAAA;AACJ,qBAAA;mBACH,MAAM5B,SAAS,GAAG,KAAK,CAAA;iBAC3B,MAAMA,SAAS,GAAG,KAAK,CAAA;AAC5B,eAAA;AACJ,aAAA;WACH,CAAA;AAED,UAAA,WAAW,MAAME,KAAK,IAAIJ,SAAS,EAAE;YACjC,IAAIE,SAAS,EAAE,MAAMC,cAAc,CAACC,KAAK,CAAC,CAAC,KACtC,MAAA;AACT,WAAA;UACA,IAAIF,SAAS,EAAErG,OAAO,GAAG+B,eAAI,CAAC/B,OAAO,EAAE,MAAM,EAAEoG,YAAY,CAAC,CAAA;AAChE,SAAA;AAEA,QAAA,IAAA,CAAAF,GAAA,GAAI1D,CAAC,aAAD0D,GAAA,CAAGxD,EAAE,EAAE;AACP1C,UAAAA,OAAO,CAACxE,MAAM,CAACmK,aAAa,GAAG,IAAI,CAAA;AACnC3F,UAAAA,OAAO,CAACxE,MAAM,CAACoK,IAAI,GAAG,IAAI,CAAA;AAC1B,UAAA,OAAO5F,OAAO,CAAA;AAClB,SAAC,MAAM;UAEH,IAAItB,OAAO,YAAPA,OAAO,CAAEhF,GAAG,EAAED,OAAO,CAACyO,KAAK,CAAC,0CAA0C,EAAE1F,CAAC,EAAExC,OAAO,CAACmI,IAAI,EAAEnI,OAAO,CAACyB,IAAI,CAAC,CAAA;AAC1G,UAAA,IAAI,EAAC/C,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEwD,OAAO,CAAE,EAAA,MAAM,IAAI1K,KAAK,CAAC,+CAA+C,GAAGwI,OAAO,CAACmI,IAAI,GAAG,IAAI,GAAGnI,OAAO,CAACyB,IAAI,GAAG,KAAK,GAAGzB,OAAO,CAAC6D,MAAM,CAAC,CAAC,KACjJ;AACD7D,YAAAA,OAAO,CAACxE,MAAM,CAAC4M,eAAe,GAAG;cAC7BD,IAAI,EAAEnI,OAAO,CAACmI,IAAI;cAClBtE,MAAM,EAAE7D,OAAO,CAAC6D,MAAM;cACtBpC,IAAI,EAAEzB,OAAO,CAACyB,IAAAA;aACjB,CAAA;AACD,YAAA,OAAOzB,OAAO,CAAA;AAClB,WAAA;AACJ,SAAA;AACJ,OAAA;AACJ,KAAA;GACH,CAAA;AACL,EAAC;MAEYqI,QAAQ,GAAGA,CAAI1F,oBAA8B,EAAEjE,OAAyB,KAAI;EACrF,OAAO,MAAOsB,OAAuB,IAA6B;IAC9D,MAAM3H,aAAa,GAAG2H,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAW,CAAA;AACjE,IAAA,MAAM0B,SAAS,GAAG9D,aAAa,CAAC8D,SAAS,IAAI,MAAM,CAAA;AACnD,IAAA,MAAMxD,MAAM,GAAGN,aAAa,CAACM,MAAM,IAAI,OAAO,CAAA;AAE9C,IAAA,MAAM2P,aAAa,GAAOlL,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,CAACW,SAAS,EAAExD,MAAM,CAAC,CAAC,IAAIyE,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,OAAO,CAAC,IAAI4B,eAAI,CAAC4C,OAAO,CAACxE,MAAM,CAACtC,UAAU,EAAEP,MAAM,CAAC,CAAA;IAC/I,IAAG2P,aAAa,EAAEtI,OAAO,CAACxE,MAAM,CAAC7C,MAAM,CAAC,GAAG2P,aAAa,CAAA;AACxD,IAAA,MAAMrM,OAAO,GAAG,OAAOqM,aAAa,KAAK,QAAQ,GAAGA,aAAa,GAAGA,aAAa,IAAbA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,aAAa,CAAEzL,GAAG,CAAA;AACtF,IAAA,MAAM0L,QAAQ,GAAG,CAAC,EAAED,aAAa,KAAK,OAAOA,aAAa,KAAK,QAAQ,IAAI,CAAC,CAACrM,OAAO,CAAC,CAAC,CAAA;AACtF,IAAA,MAAMuM,YAAY,GAAGpL,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAEnD,aAAa,CAACoL,WAAW,IAAI,aAAa,CAAC,CAAA;IACrF,IAAI/E,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEhF,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE6O,QAAQ,EAAE,SAAS,EAAEtM,OAAO,EAAE,cAAc,EAAE,CAAC,CAACuM,YAAY,EAAE,WAAW,EAAErM,SAAS,EAAE,QAAQ,EAAExD,MAAM,EAAE,MAAM,EAAEqH,OAAO,CAACxE,MAAM,CAACW,SAAS,CAAC,EAAE,cAAc,EAAE6D,OAAO,CAACxE,MAAM,CAACiN,KAAK,EAAE,uBAAuB,EAAE9F,oBAAoB,CAAC,CAAA;AACtR;IACA,IAAIA,oBAAoB,KAAKT,OAAO,IAAKS,oBAAoB,IAAIA,oBAAoB,CAAC3C,OAAO,CAAC6D,MAAM,CAAC,KAAK3B,OAAQ,EAAE,OAAOqG,QAAQ,GAAGvI,OAAO,GAAG,MAAMmC,WAAW,CAACnC,OAAO,CAAC,CAAA;AAC1K,IAAA,MAAM0I,SAAS,GAAG,CAAC,CAAAhK,OAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEgK,SAAS,KAAI,EAAE,EAAEvN,QAAQ,CAAC6E,OAAO,CAAC6D,MAAM,CAAC,KAAKzG,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,YAAY,CAAC,IAAI4B,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,CAACnD,aAAa,CAAC8D,SAAS,EAAE,YAAY,CAAC,CAAC,CAAQ,CAAA;AACrL;IACA,IAAI,CAACoM,QAAQ,IAAI,CAACC,YAAY,EAAExI,OAAO,GAAI0I,SAAS,IAAIhK,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEoH,aAAa,GAAI,MAAM3D,WAAW,CAACnC,OAAO,CAAC,GAAG,MAAMqC,QAAQ,CAACrC,OAAO,CAAC,CAAA;IACtI,IAAI2C,oBAAoB,KAAKV,OAAO,IAAI,EAACvD,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEoH,aAAa,CAAE,EAAA;AAC7D9F,MAAAA,OAAO,CAACxE,MAAM,CAACmK,aAAa,GAAG,CAAC,CAAC3F,OAAO,CAACxE,MAAM,CAAC7C,MAAM,CAAC,CAAA;AACvD,MAAA,OAAOqH,OAAO,CAAA;AAClB,KAAA;IACA,IAAI0I,SAAS,EAAE,OAAO1I,OAAO,CAAA;AAC7B,IAAA,IAAI,CAAC2C,oBAAoB,EAAE,OAAO3C,OAAO,CAAA;IACzC,OAAO,MAAMyF,SAAS,CAAC9C,oBAAoB,EAAEjE,OAAO,CAAC,CAACsB,OAAO,CAAC,CAAA;GACjE,CAAA;AACL,EAAC;MAEY2I,WAAW,GAAGA,CAAIC,OAAoB,EAAElK,OAAyB,KAAI;EAC9E,OAAO,MAAOsB,OAAuB,IAA6B;IAC9D,MAAMnH,MAAM,GAAGmH,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAe,CAAA;AAC9D;AACA,IAAA,MAAMoO,QAAQ,GAAIhQ,MAAc,CAACsD,SAAS,IAAI,MAAM,CAAA;AACpD,IAAA,MAAM2M,SAAS,GAAIjQ,MAAc,CAACF,MAAM,IAAI,OAAO,CAAA;AACnD,IAAA,MAAM2P,aAAa,GAAGlL,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,CAACqN,QAAQ,EAAEC,SAAS,CAAC,CAAC,CAAA;IACjE,IAAI,CAACR,aAAa,EAAE;MAChB,MAAM3P,MAAM,GAAGyE,eAAI,CAAC4C,OAAO,EAAE,CAAC,MAAM,EAAE8I,SAAS,CAAC,CAAC,CAAA;AACjD,MAAA,IAAInQ,MAAM,EAAEqH,OAAO,GAAG+B,eAAI,CAAC/B,OAAO,EAAE,CAAC6I,QAAQ,EAAEC,SAAS,CAAC,EAAEnQ,MAAM,CAAC,CAAA;AACtE,KAAA;AACA,IAAA,IAAIqH,OAAO,CAACmI,IAAI,KAAK,QAAQ,EAAE;MAC3B,MAAM;AAACtE,QAAAA,MAAAA;AAAO,OAAA,GAAG7D,OAAyD,CAAA;MAC1E,IAAI4I,OAAO,CAAC/E,MAA2B,CAAC,IAAI+E,OAAO,CAAC,KAAK,CAAC,EAAE;AACxD,QAAA,OAAO,MAAMP,QAAQ,CAACO,OAAO,CAAC/E,MAAM,CAAC,IAAI+E,OAAO,CAAC,KAAK,CAAC,EAAElK,OAAO,CAAC,CAACsB,OAAO,CAAQ,CAAA;OACpF,MAAM,OAAOA,OAAO,CAAA;KACxB,MAAM,OAAOA,OAAO,CAAA;GACxB,CAAA;AACL;;AC3ca+I,MAAAA,UAAU,GAAGA,MAAK;EAC3B,OAAO,MAAO/I,OAAW,IAAI;IAEzB,MAAM;AAAEgJ,MAAAA,GAAG,GAAG,EAAE;AAAEtI,MAAAA,MAAM,GAAG,EAAA;KAAI,GAAGV,OAAO,CAACpD,IAAI,CAAA;AAC9C;AACA,IAAA,IAAG,EAACoM,GAAG,IAAA,IAAA,IAAHA,GAAG,CAAEhK,MAAM,KAAI,EAAC0B,MAAM,YAANA,MAAM,CAAE1B,MAAM,CAAE,EAAA,MAAM,IAAIxH,KAAK,CAAC,4BAA4B,CAAC,CAAA;AAEjF;IACA,MAAM;MAAC6H,MAAM;MAAEqE,QAAQ;MAAE/K,MAAM;AAAEoE,MAAAA,IAAAA;KAAK,GAAGiD,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1E,MAAMuK,UAAU,GAAGzF,wBAAa,CAAC;AAACC,MAAAA,SAAS,EAAEH,MAAAA;AAAO,KAAA,CAAC,CAAChC,GAAG,EAAE,CAAA;IAE3D,MAAM4L,cAAc,GAAGC,yBAAc,CAAC,CAAC,GAAGF,GAAG,EAAE,GAAGtI,MAAM,CAAC,CAAC,CAAA;AAE1D,IAAA,MAAMyI,OAAO,GAAG,MAAM1G,qBAAU,CAACrF,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,CAAC7C,MAAM,EAAEoE,IAAI,CAAC,CAAW,EAAE;MAC7E2C,QAAQ,EAAEtC,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAEkI,QAAQ,CAAW;AAClDf,MAAAA,oBAAoB,EAAEsG,cAAc,CAACpG,GAAG,CAACC,CAAC,IAAG;QACzC,OAAO;AACH;AACAC,UAAAA,UAAU,EAAED,CAAC;AACbkC,UAAAA,UAAAA;SACH,CAAA;OACJ,CAAA;AACJ,KAAA,CAAC,CAAA;AAEF,IAAA,IAAG,EAACmE,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEzG,EAAE,CAAE,EAAA,MAAM,IAAIlL,KAAK,CAAC,qEAAqE,CAAC,CAAA;AAEvG;AACA,IAAA,MAAM4R,SAAS,GAAGpJ,OAAO,CAACzE,EAAE,CAAA;IAC5B,MAAM9C,OAAO,GAAGuH,OAAO,CAACpD,IAAI,CAACnE,OAAO,IAAI,QAAQ,CAAA;IAChD,MAAMgJ,IAAI,GAAGzB,OAAO,CAACpD,IAAI,CAAC6E,IAAI,IAAI,MAAM,CAAA;IACxC,MAAM+C,OAAO,GAAG,MAAM,IAAIzE,QAAQ,CAACtH,OAAO,EAAEuH,OAAO,EAAE;AAAE1D,MAAAA,SAAS,EAAE,IAAA;AAAM,KAAA,CAAC,CAAC7B,GAAG,CAAC2O,SAAS,CAAC,CAAA;IAExF,MAAMC,OAAO,GAAGjK,oBAAS,CAAChC,eAAI,CAACoH,OAAO,EAAE/C,IAAI,CAAW,CAAC,CAAA;IACxD,MAAM;MAACnE,GAAG;MAAEuC,GAAG;MAAEyJ,GAAG;MAAEC,GAAG;AAAEC,MAAAA,GAAAA;KAAI,GAAGH,OAAO,CAACvP,OAAO,CAAA;AAEjD,IAAA,IAAI8F,YAAY,GAAG,CAAC,GAAGC,GAAG,CAAC,CAAA;AAC3B,IAAA,IAAGa,MAAM,IAAA,IAAA,IAANA,MAAM,CAAE1B,MAAM,EAAEY,YAAY,GAAG6J,0BAAe,CAAC/I,MAAM,EAAEb,GAAG,CAAC,CAAA;AAC9D,IAAA,IAAGmJ,GAAG,IAAHA,IAAAA,IAAAA,GAAG,CAAEhK,MAAM,EAAEY,YAAY,GAAGsJ,yBAAc,CAAC,CAAC,GAAGrJ,GAAG,EAAE,GAAGmJ,GAAG,CAAC,CAAC,CAAA;AAG/D,IAAA,MAAMU,GAAG,GAAG,MAAMjK,oBAAS,CAAC;MACxBH,MAAM,EAAEC,wBAAa,CAAC;AAACC,QAAAA,SAAS,EAAEH,MAAAA;OAAO,CAAC;AAC1CK,MAAAA,QAAQ,EAAEpC,GAAG;AACbqC,MAAAA,iBAAiB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACpCgK,MAAAA,MAAM,EAAEH,GAAG;MACX,GAAGxJ,OAAO,CAACpD,IAAI;AACfgD,MAAAA,YAAAA;AACH,KAAA,CAAC,CAAA;AAEF,IAAA,MAAMgK,OAAO,GAAG5M,oBAAS,CAAC0M,GAAG,CAAC,CAAA;AAC9B,IAAA,MAAMG,OAAO,GAAG,MAAMvQ,uBAAY,CAACsQ,OAAO,CAAC,CAAA;IAC3C,IAAI,CAACC,OAAO,EAAE,MAAM,IAAIrS,KAAK,CAAC,sCAAsC,CAAC,CAAA;AACrE,IAAA,MAAMsS,OAAO,GAAG,MAAM,IAAI/J,QAAQ,CAACtH,OAAO,EAAEuH,OAAO,CAAC,CAACF,KAAK,CAACsJ,SAAS,EAAE;AAAE,MAAA,CAAC3H,IAAI,GAAGmI,OAAAA;AAAS,KAAA,CAAC,CAAA;IAC1F5J,OAAO,CAAClE,MAAM,GAAG;MAAC4N,GAAG,EAAE1J,OAAO,CAACpD,IAAI;MAAEgN,OAAO;AAAEpF,MAAAA,OAAO,EAAEsF,OAAAA;KAAQ,CAAA;AAC/D,IAAA,OAAO9J,OAAO,CAAA;GACjB,CAAA;AACL;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/auth-service/ucan-strategy.ts","../src/auth-service/index.ts","../src/core/methods.ts","../src/utils/check-exists.ts","../src/hooks/ucan-auth.ts","../src/hooks/update-ucan.ts"],"sourcesContent":["import {IncomingMessage} from 'http';\nimport {\n AuthenticationBase,\n AuthenticationBaseStrategy,\n AuthenticationRequest,\n AuthenticationResult,\n ConnectionEvent\n} from '@feathersjs/authentication';\n// @ts-ignore\nimport lt from 'long-timeout';\nimport {_get, _unset, ucanToken, validateUcan} from 'symbol-ucan';\n\nexport class NotAuthError extends Error {\n constructor(message?: string) {\n super(message)\n }\n}\nconst SPLIT_HEADER = /(\\S+)\\s+(\\S+)/;\n\ntype AnyObj = { [key: string]: any };\n\nexport class UcanStrategy extends AuthenticationBaseStrategy {\n expirationTimers = new WeakMap();\n\n setAuthentication(auth: AuthenticationBase) {\n // console.log('set authentication', auth);\n auth.verifyAccessToken = (accessToken: string) => {\n return {} as any;\n };\n super.setAuthentication(auth);\n }\n\n get configuration() {\n const authConfig = this.authentication?.configuration || {\n service: undefined,\n entity: undefined,\n entityId: undefined\n };\n const config = super.configuration;\n\n return {\n service: authConfig.service,\n entity: authConfig.entity,\n entityId: authConfig.entityId,\n header: 'Authorization',\n schemes: ['Bearer', 'JWT'],\n ...config\n };\n }\n\n async handleConnection(event: ConnectionEvent, connection: any, authResult?: AuthenticationResult) {\n const isValidLogout = event === 'logout' && connection.authentication && authResult &&\n connection.authentication.accessToken === authResult.accessToken;\n\n const {accessToken, entity} = authResult || {};\n\n if (accessToken && event === 'login') {\n const validUcan = await validateUcan(accessToken)\n .catch(err => {\n console.log('Could not validate ucan in connection: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n throw new Error(errObj.message);\n });\n const {payload: {exp}} = validUcan || {payload: {exp: 0}}\n // The time (in ms) until the token expires\n const duration = (exp * 1000) - Date.now();\n // This may have to be a `logout` event but right now we don't want\n // the whole context object lingering around until the timer is gone\n const timer = lt.setTimeout(() => (this.app as any).emit('disconnect', connection), duration);\n\n lt.clearTimeout(this.expirationTimers.get(connection));\n this.expirationTimers.set(connection, timer);\n\n connection.authentication = {\n strategy: this.name,\n accessToken\n };\n } else if (event === 'disconnect' || isValidLogout) {\n const {entity} = this.configuration;\n\n delete connection[entity];\n delete connection.authentication;\n\n lt.clearTimeout(this.expirationTimers.get(connection));\n this.expirationTimers.delete(connection);\n }\n }\n\n verifyConfiguration() {\n const allowedKeys = ['entity', 'entityId', 'service', 'header', 'schemes', 'audience'];\n\n for (const key of Object.keys(this.configuration)) {\n if (!allowedKeys.includes(key)) {\n throw new Error(`Invalid ucanStrategy option 'authentication.${this.name}.${key}'. Did you mean to set it in 'authentication.jwtOptions'?`);\n }\n }\n\n if (typeof this.configuration.header !== 'string') {\n throw new Error(`The 'header' option for the ${this.name} strategy must be a string`);\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n async getEntityQuery(_params: any) {\n return {};\n }\n\n /**\n * Return the entity for a given id\n * @param id The id to use\n * @param params Service call parameters\n */\n async getEntity(id: string, params: any) {\n const entityService = this.entityService;\n const {entity} = this.configuration;\n\n if (entityService === null) {\n throw new NotAuthError('Could not find entity service');\n }\n\n const query = await this.getEntityQuery(params);\n const getParams = Object.assign({}, _unset(params, 'provider'), {query});\n const result = await entityService.get(id, getParams);\n\n if (!params.provider) {\n return result;\n }\n\n return entityService.get(id, {...params, [entity]: result});\n }\n\n async getEntityId(authResult: AuthenticationResult, _params: AnyObj) {\n let {query, loginId} = _params;\n if (loginId) return loginId;\n else {\n const {service, core_path = 'core'} = this.configuration;\n const pms = {\n query: {...query, $limit: 1},\n [core_path]: {skipJoins: true, ..._params[core_path]}\n }\n const entities = await this.app?.service(service).find({...pms, skipJoins: true, skip_hooks: true, admin_pass: true} as any);\n if (entities.total) return entities.data[0]._id;\n else throw new NotAuthError('Could not find login associated with this ucan');\n }\n }\n\n async authenticate(authentication: AuthenticationRequest, params: AnyObj) {\n let {accessToken, loginId, ucan} = authentication;\n const {entity, core_path} = this.configuration;\n if (!accessToken) {\n\n if (ucan) accessToken = ucanToken(ucan);\n else throw new NotAuthError('Error generating ucan');\n // } else throw new NotAuthenticated('No access token');\n }\n //\n // await verifyUcan(accessToken, {audience: ucan_audience || params.ucan_aud, requiredCapabilities})\n // .catch(err => {\n // console.error('error verifying ucan', err);\n // throw new NotAuthenticated('Could not verify ucan: ' + err.message);\n // });\n\n const decodedUcan = await validateUcan(accessToken)\n .catch(err => {\n console.log('Could not validate ucan during authentication: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n throw new Error(errObj.message);\n });\n\n const result = {\n accessToken,\n authentication: {\n strategy: 'jwt',\n accessToken\n }\n };\n\n if (entity === null) {\n return result;\n }\n\n let value;\n const coreEntity = _get(params, [core_path, entity]);\n if (!coreEntity) {\n const entityId = await this.getEntityId(result, {\n ...params,\n loginId,\n query: {did: decodedUcan?.payload.aud}\n });\n value = await this.getEntity(entityId, params);\n } else value = coreEntity;\n return {\n ...result,\n [entity]: value\n };\n\n }\n\n async parse(req: IncomingMessage) {\n const {header, schemes} = this.configuration;\n const headerValue = req.headers && req.headers[header.toLowerCase()];\n\n if (!headerValue || typeof headerValue !== 'string') {\n return null;\n }\n\n const [, scheme, schemeValue] = headerValue.match(SPLIT_HEADER) || [];\n const hasScheme = scheme && schemes.some(\n (current: any) => new RegExp(current, 'i').test(scheme)\n );\n\n if (scheme && !hasScheme) {\n return null;\n }\n\n return {\n strategy: this.name,\n accessToken: hasScheme ? schemeValue : headerValue\n };\n }\n}\n\n\n","import {_get, buildUcan, encodeKeyPair, parseUcan, ucanToken, validateUcan} from 'symbol-ucan';\nimport {AuthenticationParams, AuthenticationRequest, AuthenticationService} from '@feathersjs/authentication';\nimport {NullableId} from '../core';\n\ntype AnyObj = any\n\nexport class NotAuthError extends Error {\n constructor(message?: string) {\n super(message)\n }\n}\nexport type AuthServiceOptions = {\n NotAuthenticated?: any\n}\nexport * from './ucan-strategy';\n\nexport class AuthService extends AuthenticationService {\n options: AuthServiceOptions\n constructor(app: any, configKey = 'authentication', opts:AnyObj&AuthServiceOptions = {}) {\n const { NotAuthenticated, ...rest } = opts\n super(app, configKey, rest)\n this.app = app;\n this.options = { NotAuthenticated }\n };\n\n async create(data: AuthenticationRequest, params?: AuthenticationParams) {\n const NotAuth = this.options?.NotAuthenticated || NotAuthError;\n\n const {entity, service, ucan_path = 'ucan'} = this.app.get('authentication');\n\n const authStrategies = params?.authStrategies || this.configuration.authStrategies\n\n if (!params) params = {}\n\n if (!authStrategies.length) {\n throw new NotAuth('No authentication strategies allowed for creating a JWT (`authStrategies`)')\n }\n\n const authResult = await this.authenticate(data, params, ...authStrategies)\n .catch((err: any) => {\n throw new Error(err.message)\n })\n\n if (authResult.accessToken) {\n return authResult\n }\n const did = data.did || _get(authResult, [entity, 'did']);\n let ucan = data.ucan || _get(authResult, [entity, 'ucan']);\n\n if (!did) throw new Error('No did audience provided');\n if (!ucan) throw new Error('No ucan provided to authentication call');\n // const {secret} = this.configuration;\n\n const validatedUcan = await validateUcan(ucan)\n .catch(err => {\n console.log('Could not validate ucan creating authentication: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n console.warn('Could not validate ucan creating authentication', ucan, errObj.message);\n return null;\n });\n if (!validatedUcan) {\n const parsed = parseUcan(ucan);\n let {secret} = this.app.get('authentication');\n\n const issuer = encodeKeyPair({secretKey: secret});\n ucan = await buildUcan({\n audience: parsed.payload.aud,\n issuer,\n lifetimeInSeconds: 60 * 60 * 24 * 60,\n capabilities: parsed.payload.att\n })\n params.admin_pass = true;\n await this.app.service(service).patch(_get(authResult, [entity, '_id']) as NullableId, {[ucan_path]: ucanToken(ucan)}, {...params})\n }\n\n\n const accessToken = ucanToken(ucan);\n\n return {\n accessToken,\n ...authResult,\n authentication: {\n ...authResult.authentication,\n payload: accessToken\n }\n }\n }\n}\n\n","type AnyObj = any\n\nexport type Id = number | string\nexport type NullableId = Id | null\n\nexport type CallFindResult<T = AnyObj> = {\n total:number,\n limit: number,\n skip:number,\n data: Array<T>\n}\nexport type AnyParams = Iterable<AnyObj>\n\ndeclare type CoreOpts = {\n skipJoins?: boolean,\n admin_pass?: boolean\n}\nexport class CoreCall {\n context:any;\n service:string;\n core:AnyObj;\n entity:string;\n constructor(service:string, context:any, coreOptions?:CoreOpts){\n this.service = service\n this.context = context\n const entity = (context.app.get('authentication') || { entity: 'login' }).entity || 'login';\n this.entity = entity;\n const core = context.params?.core || {};\n if(!core[entity]) core[entity] = context.params[entity];\n this.core = { ...core, ...coreOptions }\n }\n\n async get(id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).get(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async find (params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).find({...params as AnyParams, [this.entity]: params[this.entity], skip_hooks:true, admin_pass:true, ...{ [core_path]: this.core }})\n }\n async create (data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).create(data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async patch (id:NullableId, data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).patch(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async update (id:NullableId, data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).update(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async remove (id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).remove(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n\n async _get(id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._get(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _find (params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._find({...params as AnyParams, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _create (data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._create(data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _patch (id:NullableId, data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._patch(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _update (id:NullableId, data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._update(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _remove (id:NullableId, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._remove(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n\n}\n\n","import {_get, _set} from 'symbol-ucan';\nimport {HookContext} from '../types';\nimport {CoreCall} from '../core';\n\ntype AnyObj = any\n\nexport const existsPath = '_exists';\n\nexport const getExists = (context:Partial<HookContext>):any => {\n const path = context.app.get('existsPath') || existsPath;\n return _get(context.params, `core.${path}.${context.path}.${context.id}`) || undefined;\n}\n\nexport const loadExists = async (context:HookContext, options?:{ skipJoins?: boolean, params?: AnyObj }):Promise<any> => {\n let ex = getExists(context);\n if(!ex && context.id) {\n ex = await new CoreCall(context.path, context, { skipJoins: options?.skipJoins !== false }).get(context.id, { exists_check: true, admin_pass: true, skip_hooks: true, ...options?.params || {} })\n }\n return ex;\n}\n\nexport const setExists = (context:HookContext, val:any):HookContext => {\n const path = context.app.get('existsPath') || existsPath;\n context.params = _set(context.params, `core.${path}.${context.path}.${val?._id || context.id}`, val)\n return context;\n};\n","import {HookContext} from '../types';\nimport {authenticate} from '@feathersjs/authentication';\nimport {\n _get,\n _set,\n Capability,\n encodeKeyPair,\n genCapability,\n parseUcan,\n ucanToken,\n VerifyOptions,\n verifyUcan\n} from 'symbol-ucan';\nimport {loadExists, setExists} from '../utils';\nimport {CoreCall} from '../core';\n\ntype AnyObj = any\n\nconst SUPERUSER = '*'\n\nexport type UcanAuthConfig = {\n entity: string,\n service: string,\n client_ucan: string,\n ucan_aud: string,\n ucan_path: string,\n core_path: string,\n defaultHierPart: string,\n defaultScheme: string\n}\n\ntype AuthConfig = {\n [key: string]: string\n}\n\ntype AnyAuth = '*'\nexport const anyAuth: AnyAuth = '*' as AnyAuth;\ntype NoThrow = '$'\nexport const noThrow: NoThrow = '$' as NoThrow;\n\n\nexport type CapabilityParts = Partial<Capability> | [string, Array<string> | string];\n\nexport declare type LoginPassOption = [Array<string>, Array<string> | '*'] | [Array<string>, Array<string> | '*', Array<string>];\nexport declare type UcanAuthOptions = {\n creatorPass?: '*' | Array<string>,\n loginPass?: Array<LoginPassOption>,\n or?: '*' | Array<string>\n adminPass?: Array<string>,\n noThrow?: boolean,\n log?: boolean,\n existingParams?: AnyObj,\n specialChange?: Array<string> | AnyAuth,\n cap_subjects?: Array<string>,\n audience?: string\n}\ntype RequiredCapability = { capability: Capability, rootIssuer: string }\nexport type UcanCap = Array<CapabilityParts> | AnyAuth | NoThrow;\nexport type UcanAllArgs = {\n all?: UcanCap,\n get?: UcanCap,\n find?: UcanCap,\n create?: UcanCap,\n patch?: UcanCap,\n update?: UcanCap,\n remove?: UcanCap\n};\n\ntype VerifyOne = { ucan: string } & VerifyOptions;\n\ntype Auth = <S>(method: string) => (context: HookContext<S>) => Promise<HookContext<S>>\ntype Config = { entity: string, service: string, defaultScheme: string, defaultHierPart: string };\ntype VerifyRes = { ok: boolean, value?: Array<any>, err?: Array<any> };\n\nexport const noThrowAuth = async <S>(context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n const entity = _get(context, ['auth', config.entity]);\n if (entity) {\n context = _set(context, [config.core_path, config.entity], entity)\n }\n try {\n context = await authenticate('jwt')(context as any)\n .catch(() => {\n return context;\n })\n } catch (e) {\n return context;\n }\n return context;\n}\n\nexport const bareAuth = async <S>(context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n const entity = _get(context, ['auth', config.entity]);\n if (entity) context = _set(context, [config.core_path, config.entity], entity)\n return authenticate('jwt')(context as any);\n}\n\nconst verifyOne = async (ucan: string, options: VerifyOptions, log?: boolean) => {\n try {\n let v = await verifyUcan(ucan, options);\n if (!v?.ok && options.requiredCapabilities) {\n const newCapabilities = options.requiredCapabilities.map(a => {\n if (a.capability.can !== SUPERUSER) a.capability.can.segments = ['*']\n return a\n })\n if (log) console.log('set new req capabilities', newCapabilities, parseUcan(ucan))\n v = await verifyUcan(ucan, {\n ...options, requiredCapabilities: newCapabilities\n })\n if (log) console.log('Second verification result:', v);\n }\n return v;\n } catch (e: any) {\n return {ok: false, err: [e.message]}\n }\n};\nexport const orVerifyLoop = async (arr: Array<VerifyOne>, log?: boolean): Promise<VerifyRes> => {\n let v: any = {ok: false, value: []};\n\n try {\n for (const i in arr) {\n if (log) console.log('or verify loop', arr[i], parseUcan(arr[i].ucan));\n if (!v?.ok) {\n const {ucan, ...options} = arr[i];\n v = await verifyOne(ucan, options, log)\n if (log) console.log('got in verify loop', v);\n } else break;\n }\n return v;\n } catch (e: any) {\n return {ok: false, err: [e.message]}\n }\n}\n\nexport type VerifyConfig = {\n client_ucan: string,\n ucan_aud: string,\n [key: string]: any\n};\n\ntype MethodOpts = { aud?: string }\nexport const verifyAgainstReqs = <S>(reqs: Array<RequiredCapability>, config: VerifyConfig, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<VerifyRes> => {\n const log = options?.log\n const ucan = _get(context.params, config.client_ucan) as string;\n const audience = options?.audience || _get(context.params, config.ucan_aud) as string;\n if (log) console.log('verify against reqs', reqs)\n let vMethod: (uc?: string, methodOpts?: MethodOpts) => Promise<VerifyRes>\n const or = options?.or || []\n if (ucan && (or === '*' || or.includes(context.method))) vMethod = (uc?: string, methodOpts?: MethodOpts) => orVerifyLoop((reqs || []).map(a => {\n return {\n ucan: uc || ucan,\n audience: methodOpts?.aud || audience,\n requiredCapabilities: [a]\n }\n }), log)\n else vMethod = (uc?: string, methodOpts?: MethodOpts) => verifyOne(uc || ucan, {\n audience: methodOpts?.aud || audience,\n requiredCapabilities: reqs\n }, log) as Promise<VerifyRes>\n let v = await vMethod()\n if (log) console.log('first verify try', v);\n if (v?.ok) return v;\n const cs = (options?.cap_subjects || []).filter(a => !!a)\n if (log) console.log('check cap_subjects', cs);\n if (cs) {\n const configuration = config?.loginConfig || context.app.get('authentication') as AnyObj;\n const loginCheckId = String(_get(context.params, `${configuration.entity}._id` || '')) as any;\n const caps = await new CoreCall(configuration.capability_service || 'caps', context).find({\n query: {\n $limit: cs.length,\n subject: {$in: cs}\n },\n skip_hooks: true,\n admin_pass: true\n })\n .catch(err => console.log(`Error finding caps in ucan auth: ${err.message}`))\n if (log) console.log('caps', caps);\n if (caps?.data) {\n for (const cap of caps.data) {\n for (const k in cap.caps || {}) {\n if (log) console.log('check cap', k, cap.caps[k].logins, loginCheckId);\n if ((cap.caps[k].logins || []).map((a: any) => String(a)).includes(loginCheckId)) {\n try {\n const ucanString = ucanToken(cap.caps[k].ucan)\n if (log) console.log('got ucan string', ucanString);\n if (ucanString) {\n v = await vMethod(ucanString, {aud: cap.did})\n if (log) console.log('tried v on cap', v);\n }\n } catch (e: any) {\n console.log(`Error verifying ucan from cap: ${cap._id}. Err:${e.message}`)\n }\n if (options?.log) console.log('tried v on cap', v);\n if (v?.ok) return v;\n }\n }\n }\n }\n }\n return v;\n }\n}\n\nexport type CapabilityModelConfig = {\n defaultScheme: string,\n defaultHierPart: string,\n secret: string,\n [key: string]: any\n};\n\nexport const modelCapabilities = (reqs: Array<CapabilityParts>, config: CapabilityModelConfig): Array<RequiredCapability> => {\n\n const rootIssuer = encodeKeyPair({secretKey: config.secret}).did();\n if (!Array.isArray(reqs)) return []\n return reqs.map(a => {\n return {\n capability: Array.isArray(a) ? genCapability({\n with: {scheme: config.defaultScheme, hierPart: config.defaultHierPart},\n can: {namespace: a[0], segments: typeof a[1] === 'string' ? [a[1]] : a[1]}\n }, config) : genCapability(a, config),\n rootIssuer\n };\n }) as Array<RequiredCapability>\n};\n\nexport declare type PassConfig = {\n loginConfig?: VerifyConfig\n}\nexport const checkUcan = (requiredCapabilities: UcanCap, options?: UcanAuthOptions & PassConfig) => {\n return async (context: HookContext): Promise<HookContext> => {\n const configuration = options?.loginConfig || context.app.get('authentication') as AnyObj;\n\n let v: any = {ok: false, value: []};\n\n const reqs: Array<RequiredCapability> = modelCapabilities(requiredCapabilities as Array<CapabilityParts>, configuration as CapabilityModelConfig);\n\n if (reqs.length) {\n v = await verifyAgainstReqs(reqs, configuration as VerifyConfig, options)(context)\n\n /** if the anyAuth setting is used along with specialChange, a user could get through to this point despite not being authenticated, so this step does not allow a pass for anyAuth setting even though no requiredCapabilities are present - because it was intended to throw if not authenticated unless special change conditions are met */\n } else if (requiredCapabilities !== '*') v.ok = true;\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context\n } else {\n\n // if (!v?.ok) {\n // let hasSplitNamespace = false;\n // const reducedReqs: Array<RequiredCapability> = [];\n // reqs.forEach((req, i) => {\n // const splt = (_get<RequiredCapability, string>(req, 'capability.can.namespace') || '').split(':')\n // if (splt[1]) {\n // req = _set(req, 'capability.can.namespace', splt[0]);\n // hasSplitNamespace = true;\n // }\n // reducedReqs.push(req)\n // })\n // if (hasSplitNamespace) v = await verifyAgainstReqs(reqs, configuration as VerifyConfig, options)(context);\n // }\n\n\n if (options?.log) console.log('checking special change', options?.specialChange);\n if (options?.specialChange) {\n if (options.specialChange === anyAuth) {\n context.params.canU = true;\n return context;\n } else if (Array.isArray(options.specialChange)) {\n if (['create', 'patch', 'update'].includes(context.method)) {\n if (Array.isArray(context.data)) throw new Error('No multi data allowed with special change')\n for (const k in context.data || {}) {\n if (['$set', '$unset', '$addToSet', '$pull', '$push'].includes(k)) {\n for (const sk in context.data[k] || {}) {\n if (!options.specialChange.includes(sk)) {\n const spl = sk.split('.');\n if (spl.length === 1) delete context.data[k][sk];\n else if (!options.specialChange.includes(spl[0])) delete context.data[k][sk]\n }\n }\n } else if (!options.specialChange.includes(k)) delete context.data[k];\n }\n context.params.canU = true;\n return context;\n }\n }\n }\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context;\n } else {\n\n //If creator pass enabled, check to see if the auth login is the creator of the record\n const {loginPass} = options || {loginPass: [[['*'], ['nonExistentMethod']]]}\n if (loginPass?.length) {\n //object of scrubbed data object for pass that includes only limited access or full context.data object if no limits were present\n let scrubbedData: AnyObj = {};\n //scruData defaults to true - is only set to false\n let scrubData = true;\n const checkLoginPass = async (lpass: LoginPassOption) => {\n let methodsOnly = [];\n const allMethods = lpass[1] === '*';\n let methodIdx = -1;\n if (allMethods) methodIdx = 0;\n else {\n //separate out any field specific methods e.g. patch/name,avatar\n methodsOnly = (lpass[1] as string[]).map(a => a.split('/')[0]);\n methodIdx = methodsOnly.indexOf(context.method);\n }\n /**ensure loginPass is allowed for this method*/\n if (methodIdx > -1) {\n /**retrieve existing record to check ids for login id*/\n const existing = await loadExists(context, {params: options?.existingParams});\n let loginOk = false;\n\n /** function for comparing record login id with context login*/\n const checkLogin = (recordLoginPassId: string, loginIdPath: string = '_id') => {\n const loginCheckId = _get(context.params, `${configuration.entity}.${loginIdPath}`) as any;\n /**Make sure both are present to avoid pass on undefined*/\n if (loginCheckId && recordLoginPassId) {\n /** change login path result to array no matter what */\n const checkArr = Array.isArray(loginCheckId) ? loginCheckId.map(a => String(a)) : [String(loginCheckId)];\n if (Array.isArray(recordLoginPassId)) {\n /**loop through to see if there is a match present use for loops for performance instead of some*/\n for (let i = 0; i < checkArr.length; i++) {\n const checkId = String(checkArr[i])\n for (let rl = 0; rl < recordLoginPassId.length;) {\n const rlId = String(recordLoginPassId[rl]);\n if (rlId === checkId) loginOk = true;\n else rl++;\n }\n if (loginOk) return;\n }\n } else if (checkArr.includes(String(recordLoginPassId))) {\n return loginOk = true;\n }\n } else return\n }\n\n if (existing) {\n context = setExists(context, existing);\n /**perform the check*/\n const idArr = Array.isArray(lpass[2]) ? lpass[2] : lpass[0] || [];\n for (const passPath of idArr || []) {\n const spl = String(passPath).split('/');\n if (spl[0].includes('*')) {\n const spl2 = spl[0].split('*');\n const obj = _get(existing, spl2[0]);\n if (obj && typeof obj === 'object') {\n if (Array.isArray(obj)) {\n /** IF array, iterate through array and check the sub-path */\n for (const o of obj) {\n checkLogin(_get(o, spl2[1]) as string, spl[1] || '_id');\n if (loginOk) break;\n }\n } else {\n /** IF object, iterate through object and check the sub-path */\n for (const k in obj) {\n checkLogin(_get(obj, `${k}.${spl2[1]}`) as string, spl[1] || '_id')\n if (loginOk) break;\n }\n }\n }\n\n } else checkLogin(_get(existing, spl[0]) as string, spl[1] || '_id');\n\n }\n }\n\n if (loginOk) {\n v.ok = true\n /**loginPass is true - but check for granular field permissions such as patch/owner,color,status that imply limited permission*/\n //TODO: possibly a throw option here. If loginPass is ok, it will go forward, but could send an empty or modified patch object\n if (lpass[1] !== '*' && !['find', 'get', 'remove'].some(a => lpass[1].includes(a))) {\n const currentMethod = allMethods ? '*' : lpass[1][methodIdx];\n const splitMethod = currentMethod.split('/')[0];\n //check if current method contains a split '/' signaling limited permission check\n if (splitMethod !== currentMethod) {\n //get an array of the allowed fields\n const fields = currentMethod.split('/').slice(1).join('').split(',') || [];\n\n for (const field of fields) {\n const topLevel = _get(context.data, field);\n if (topLevel) scrubbedData = _set(scrubbedData, field, topLevel);\n else {\n for (const operator of ['$addToSet', '$pull']) {\n const operatorLevel = _get(context.data, `${operator}.${field}`);\n if (operatorLevel) scrubbedData = _set(scrubbedData, `${operator}.${field}`, operatorLevel);\n }\n }\n }\n } else scrubData = false;\n } else scrubData = false;\n }\n }\n }\n\n for await (const lpass of loginPass) {\n if (scrubData) await checkLoginPass(lpass);\n else break;\n }\n if (scrubData) context = _set(context, 'data', scrubbedData);\n }\n\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context;\n } else {\n\n if (options?.log) console.error('Ucan capabilities requirements not met: ', v, context.type, context.path);\n if (!options?.noThrow) throw new Error('Missing proper capabilities for this action: ' + context.type + ': ' + context.path + ' - ' + context.method);\n else {\n context.params._no_throw_error = {\n type: context.type,\n method: context.method,\n path: context.path\n }\n return context;\n }\n }\n }\n }\n }\n}\n\nexport const ucanAuth = <S>(requiredCapabilities?: UcanCap, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<HookContext<S>> => {\n const configuration = context.app.get('authentication') as AnyObj;\n const core_path = configuration.core_path || 'core';\n const entity = configuration.entity || 'login';\n\n const existingLogin:any = _get(context.params, [core_path, entity]) || _get(context.params, 'login') || _get(context.params.connection, entity);\n if(existingLogin?._id) context.params[entity] = existingLogin;\n const loginId = typeof existingLogin === 'string' ? existingLogin : existingLogin?._id;\n const hasLogin = !!(existingLogin && (typeof existingLogin === 'string' || !!loginId));\n const existingUcan = _get(context.params, configuration.client_ucan || 'client_ucan');\n if (options?.log) console.log('ucan auth', 'hasLogin', hasLogin, 'loginId', loginId, 'existingUcan', !!existingUcan, 'core_path', core_path, 'entity', entity, 'core', context.params[core_path], 'params login', context.params.login, 'required capabilities', requiredCapabilities);\n //Below for passing through auth with no required capabilities\n if (requiredCapabilities === noThrow || (requiredCapabilities && requiredCapabilities[context.method] === noThrow)) return hasLogin ? context : await noThrowAuth(context);\n const adminPass = (options?.adminPass || []).includes(context.method) && (_get(context.params, 'admin_pass') || _get(context.params, [configuration.core_path, 'admin_pass'])) as any\n // If no login is present and no client UCAN is provided, perform authentication. Otherwise, reuse existing state/ucan.\n if (!hasLogin && !existingUcan) context = (adminPass || options?.specialChange) ? await noThrowAuth(context) : await bareAuth(context);\n if (requiredCapabilities === anyAuth && !options?.specialChange) {\n context.params.authenticated = !!context.params[entity];\n return context;\n }\n if (adminPass) return context;\n if (!requiredCapabilities) return context;\n return await checkUcan(requiredCapabilities, options)(context)\n }\n}\n\nexport const allUcanAuth = <S>(methods: UcanAllArgs, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n // if a login is already present in params[core_path][entity], don't overwrite it\n const corePath = (config as any).core_path || 'core';\n const entityKey = (config as any).entity || 'login';\n const existingLogin = _get(context.params, [corePath, entityKey]);\n if (!existingLogin) {\n const entity = _get(context, ['auth', entityKey]);\n if (entity) context = _set(context, [corePath, entityKey], entity)\n }\n if (context.type === 'before') {\n const {method} = context as { method: keyof UcanAllArgs } & HookContext<S>;\n if (methods[method as keyof UcanAllArgs] || methods['all']) {\n return await ucanAuth(methods[method] || methods['all'], options)(context) as any;\n } else return context;\n } else return context;\n }\n}\n","import {\n buildUcan,\n encodeKeyPair,\n parseUcan,\n ucanToken,\n validateUcan,\n stackAbilities,\n verifyUcan,\n reduceAbilities,\n _get\n} from 'symbol-ucan';\nimport { CoreCall } from '../core'\n\n\nexport const updateUcan = () => {\n return async (context:any) => {\n\n const { add = [], remove = [] } = context.data;\n //ensure capabilities were passed\n if(!add?.length && !remove?.length) throw new Error('No new capabilities passed');\n\n //check ability to edit the affected capabilities\n const {secret, ucan_aud, entity, ucan} = context.app.get('authentication');\n const rootIssuer = encodeKeyPair({secretKey: secret}).did();\n\n const checkAbilities = stackAbilities([...add, ...remove]);\n\n const canEdit = await verifyUcan(_get(context.params, [entity, ucan]) as string, {\n audience: _get(context.params, ucan_aud) as string,\n requiredCapabilities: checkAbilities.map(a => {\n return {\n //TODO: possibly READ shouldn't have the ability to allow others to READ\n capability: a,\n rootIssuer\n }\n })\n })\n\n if(!canEdit?.ok) throw new Error('You don\\'t have sufficient capabilities to grant those capabilities')\n\n //prep edited ucan\n const subjectId = context.id;\n const service = context.data.service || 'logins';\n const path = context.data.path || 'ucan';\n const subject = await new CoreCall(service, context, { skipJoins: true }).get(subjectId);\n\n const decoded = parseUcan(_get(subject, path) as string);\n const {aud, att, fct, nbf, prf} = decoded.payload;\n\n let capabilities = [...att];\n if(remove?.length) capabilities = reduceAbilities(remove, att);\n if(add?.length) capabilities = stackAbilities([...att, ...add]);\n\n\n const raw = await buildUcan({\n issuer: encodeKeyPair({secretKey: secret}),\n audience: aud,\n lifetimeInSeconds: 60 * 60 * 24 * 60,\n proofs: prf,\n ...context.data,\n capabilities\n });\n\n const encoded = ucanToken(raw);\n const isValid = await validateUcan(encoded);\n if (!isValid) throw new Error('Invalid ucan generated when updating');\n const patched = await new CoreCall(service, context).patch(subjectId, { [path]: encoded });\n context.result = {raw: context.data, encoded, subject: patched};\n return context;\n }\n};\n"],"names":["NotAuthError","Error","constructor","message","SPLIT_HEADER","UcanStrategy","AuthenticationBaseStrategy","args","expirationTimers","WeakMap","setAuthentication","auth","verifyAccessToken","accessToken","configuration","_this$authentication","authConfig","authentication","service","undefined","entity","entityId","config","header","schemes","handleConnection","event","connection","authResult","isValidLogout","validUcan","validateUcan","catch","err","console","log","errObj","code","indexOf","payload","exp","duration","Date","now","timer","lt","setTimeout","app","emit","clearTimeout","get","set","strategy","name","delete","verifyConfiguration","allowedKeys","key","Object","keys","includes","getEntityQuery","_params","getEntity","id","params","entityService","query","getParams","assign","_unset","result","provider","getEntityId","loginId","_this$app","core_path","pms","$limit","skipJoins","entities","find","skip_hooks","admin_pass","total","data","_id","authenticate","ucan","ucanToken","decodedUcan","value","coreEntity","_get","did","aud","parse","req","headerValue","headers","toLowerCase","scheme","schemeValue","match","hasScheme","some","current","RegExp","test","AuthService","AuthenticationService","configKey","opts","NotAuthenticated","rest","options","create","_this$options","NotAuth","ucan_path","authStrategies","length","validatedUcan","warn","parsed","parseUcan","secret","issuer","encodeKeyPair","secretKey","buildUcan","audience","lifetimeInSeconds","capabilities","att","patch","CoreCall","context","coreOptions","_context$params","core","_this$context$app","_this$context$app2","_this$context$app3","_this$context$app4","update","_this$context$app5","remove","_this$context$app6","_this$context$app7","_find","_this$context$app8","_create","_this$context$app9","_patch","_this$context$app10","_update","_this$context$app11","_remove","_this$context$app12","existsPath","getExists","path","loadExists","ex","exists_check","setExists","val","_set","SUPERUSER","anyAuth","noThrow","noThrowAuth","e","bareAuth","verifyOne","_v","v","verifyUcan","ok","requiredCapabilities","newCapabilities","map","a","capability","can","segments","orVerifyLoop","arr","i","_v2","verifyAgainstReqs","reqs","_v3","client_ucan","ucan_aud","vMethod","or","method","uc","methodOpts","cs","cap_subjects","filter","loginConfig","loginCheckId","String","caps","capability_service","subject","$in","cap","k","logins","_v4","ucanString","modelCapabilities","rootIssuer","Array","isArray","genCapability","with","defaultScheme","hierPart","defaultHierPart","namespace","checkUcan","_v5","authenticated","canU","_v6","specialChange","sk","spl","split","_v7","loginPass","scrubbedData","scrubData","checkLoginPass","lpass","methodsOnly","allMethods","methodIdx","existing","existingParams","loginOk","checkLogin","recordLoginPassId","loginIdPath","checkArr","checkId","rl","rlId","idArr","passPath","spl2","obj","o","currentMethod","splitMethod","fields","slice","join","field","topLevel","operator","operatorLevel","error","type","_no_throw_error","ucanAuth","existingLogin","hasLogin","existingUcan","login","adminPass","allUcanAuth","methods","corePath","entityKey","updateUcan","add","checkAbilities","stackAbilities","canEdit","subjectId","decoded","fct","nbf","prf","reduceAbilities","raw","proofs","encoded","isValid","patched"],"mappings":";;;;;;;;AAYM,MAAOA,cAAa,SAAQC,KAAK,CAAA;EACnCC,WAAAA,CAAYC,OAAgB,EAAA;IACxB,KAAK,CAACA,OAAO,CAAC,CAAA;AAClB,GAAA;AACH,CAAA;AACD,MAAMC,YAAY,GAAG,eAAe,CAAA;AAI9B,MAAOC,YAAa,SAAQC,yCAA0B,CAAA;AAAAJ,EAAAA,WAAAA,CAAA,GAAAK,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACxDC,gBAAgB,GAAG,IAAIC,OAAO,EAAE,CAAA;AAAA,GAAA;EAEhCC,iBAAiBA,CAACC,IAAwB,EAAA;AACtC;AACAA,IAAAA,IAAI,CAACC,iBAAiB,GAAIC,WAAmB,IAAI;AAC7C,MAAA,OAAO,EAAS,CAAA;KACnB,CAAA;AACD,IAAA,KAAK,CAACH,iBAAiB,CAACC,IAAI,CAAC,CAAA;AACjC,GAAA;EAEA,IAAIG,aAAaA,GAAA;AAAA,IAAA,IAAAC,oBAAA,CAAA;IACb,MAAMC,UAAU,GAAG,CAAA,CAAAD,oBAAA,GAAA,IAAI,CAACE,cAAc,KAAnBF,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,oBAAA,CAAqBD,aAAa,KAAI;AACrDI,MAAAA,OAAO,EAAEC,SAAS;AAClBC,MAAAA,MAAM,EAAED,SAAS;AACjBE,MAAAA,QAAQ,EAAEF,SAAAA;KACb,CAAA;AACD,IAAA,MAAMG,MAAM,GAAG,KAAK,CAACR,aAAa,CAAA;IAElC,OAAO;MACHI,OAAO,EAAEF,UAAU,CAACE,OAAO;MAC3BE,MAAM,EAAEJ,UAAU,CAACI,MAAM;MACzBC,QAAQ,EAAEL,UAAU,CAACK,QAAQ;AAC7BE,MAAAA,MAAM,EAAE,eAAe;AACvBC,MAAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;MAC1B,GAAGF,MAAAA;KACN,CAAA;AACL,GAAA;AAEA,EAAA,MAAMG,gBAAgBA,CAACC,KAAsB,EAAEC,UAAe,EAAEC,UAAiC,EAAA;IAC7F,MAAMC,aAAa,GAAGH,KAAK,KAAK,QAAQ,IAAIC,UAAU,CAACV,cAAc,IAAIW,UAAU,IAC/ED,UAAU,CAACV,cAAc,CAACJ,WAAW,KAAKe,UAAU,CAACf,WAAW,CAAA;IAEpE,MAAM;MAACA,WAAW;AAAEO,MAAAA,MAAAA;KAAO,GAAGQ,UAAU,IAAI,EAAE,CAAA;AAE9C,IAAA,IAAIf,WAAW,IAAIa,KAAK,KAAK,OAAO,EAAE;MAClC,MAAMI,SAAS,GAAG,MAAMC,uBAAY,CAAClB,WAAW,CAAC,CAC5CmB,KAAK,CAACC,GAAG,IAAG;QACTC,OAAO,CAACC,GAAG,CAAC,yCAAyC,EAAEF,GAAG,CAAC9B,OAAO,CAAC,CAAA;AACnE,QAAA,MAAMiC,MAAM,GAAG;AACXC,UAAAA,IAAI,EAAE,CAAC;AACPlC,UAAAA,OAAO,EAAE,+BAAA;SACZ,CAAA;QACD,IAAI8B,GAAG,CAAC9B,OAAO,CAACmC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;UACtCF,MAAM,CAACC,IAAI,GAAG,CAAC,CAAA;UACfD,MAAM,CAACjC,OAAO,GAAG,cAAc,CAAA;AACnC,SAAA;AACA,QAAA,MAAM,IAAIF,KAAK,CAACmC,MAAM,CAACjC,OAAO,CAAC,CAAA;AACnC,OAAC,CAAC,CAAA;MACN,MAAM;AAACoC,QAAAA,OAAO,EAAE;AAACC,UAAAA,GAAAA;AAAG,SAAA;OAAE,GAAGV,SAAS,IAAI;AAACS,QAAAA,OAAO,EAAE;AAACC,UAAAA,GAAG,EAAE,CAAA;AAAC,SAAA;OAAE,CAAA;AACzD;MACA,MAAMC,QAAQ,GAAID,GAAG,GAAG,IAAI,GAAIE,IAAI,CAACC,GAAG,EAAE,CAAA;AAC1C;AACA;AACA,MAAA,MAAMC,KAAK,GAAGC,sBAAE,CAACC,UAAU,CAAC,MAAO,IAAI,CAACC,GAAW,CAACC,IAAI,CAAC,YAAY,EAAErB,UAAU,CAAC,EAAEc,QAAQ,CAAC,CAAA;MAE7FI,sBAAE,CAACI,YAAY,CAAC,IAAI,CAACzC,gBAAgB,CAAC0C,GAAG,CAACvB,UAAU,CAAC,CAAC,CAAA;MACtD,IAAI,CAACnB,gBAAgB,CAAC2C,GAAG,CAACxB,UAAU,EAAEiB,KAAK,CAAC,CAAA;MAE5CjB,UAAU,CAACV,cAAc,GAAG;QACxBmC,QAAQ,EAAE,IAAI,CAACC,IAAI;AACnBxC,QAAAA,WAAAA;OACH,CAAA;AACL,KAAC,MAAM,IAAIa,KAAK,KAAK,YAAY,IAAIG,aAAa,EAAE;MAChD,MAAM;AAACT,QAAAA,MAAAA;OAAO,GAAG,IAAI,CAACN,aAAa,CAAA;MAEnC,OAAOa,UAAU,CAACP,MAAM,CAAC,CAAA;MACzB,OAAOO,UAAU,CAACV,cAAc,CAAA;MAEhC4B,sBAAE,CAACI,YAAY,CAAC,IAAI,CAACzC,gBAAgB,CAAC0C,GAAG,CAACvB,UAAU,CAAC,CAAC,CAAA;AACtD,MAAA,IAAI,CAACnB,gBAAgB,CAAC8C,MAAM,CAAC3B,UAAU,CAAC,CAAA;AAC5C,KAAA;AACJ,GAAA;AAEA4B,EAAAA,mBAAmBA,GAAA;AACf,IAAA,MAAMC,WAAW,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;IAEtF,KAAK,MAAMC,GAAG,IAAIC,MAAM,CAACC,IAAI,CAAC,IAAI,CAAC7C,aAAa,CAAC,EAAE;AAC/C,MAAA,IAAI,CAAC0C,WAAW,CAACI,QAAQ,CAACH,GAAG,CAAC,EAAE;QAC5B,MAAM,IAAIxD,KAAK,CAAgD,CAAA,4CAAA,EAAA,IAAI,CAACoD,IAAQ,CAAA,CAAA,EAAAI,GAA8D,CAAA,yDAAA,CAAA,CAAC,CAAA;AAC/I,OAAA;AACJ,KAAA;IAEA,IAAI,OAAO,IAAI,CAAC3C,aAAa,CAACS,MAAM,KAAK,QAAQ,EAAE;MAC/C,MAAM,IAAItB,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAACoD,IAAgC,4BAAA,CAAC,CAAA;AACzF,KAAA;AACJ,GAAA;AAEA;EACA,MAAMQ,cAAcA,CAACC,OAAY,EAAA;AAC7B,IAAA,OAAO,EAAE,CAAA;AACb,GAAA;AAEA;;;;AAIG;AACH,EAAA,MAAMC,SAASA,CAACC,EAAU,EAAEC,MAAW,EAAA;AACnC,IAAA,MAAMC,aAAa,GAAG,IAAI,CAACA,aAAa,CAAA;IACxC,MAAM;AAAC9C,MAAAA,MAAAA;KAAO,GAAG,IAAI,CAACN,aAAa,CAAA;IAEnC,IAAIoD,aAAa,KAAK,IAAI,EAAE;AACxB,MAAA,MAAM,IAAIlE,cAAY,CAAC,+BAA+B,CAAC,CAAA;AAC3D,KAAA;IAEA,MAAMmE,KAAK,GAAG,MAAM,IAAI,CAACN,cAAc,CAACI,MAAM,CAAC,CAAA;AAC/C,IAAA,MAAMG,SAAS,GAAGV,MAAM,CAACW,MAAM,CAAC,EAAE,EAAEC,iBAAM,CAACL,MAAM,EAAE,UAAU,CAAC,EAAE;AAACE,MAAAA,KAAAA;AAAK,KAAC,CAAC,CAAA;IACxE,MAAMI,MAAM,GAAG,MAAML,aAAa,CAAChB,GAAG,CAACc,EAAE,EAAEI,SAAS,CAAC,CAAA;AAErD,IAAA,IAAI,CAACH,MAAM,CAACO,QAAQ,EAAE;AAClB,MAAA,OAAOD,MAAM,CAAA;AACjB,KAAA;AAEA,IAAA,OAAOL,aAAa,CAAChB,GAAG,CAACc,EAAE,EAAE;AAAC,MAAA,GAAGC,MAAM;AAAE,MAAA,CAAC7C,MAAM,GAAGmD,MAAAA;AAAM,KAAC,CAAC,CAAA;AAC/D,GAAA;AAEA,EAAA,MAAME,WAAWA,CAAC7C,UAAgC,EAAEkC,OAAe,EAAA;IAC/D,IAAI;MAACK,KAAK;AAAEO,MAAAA,OAAAA;AAAQ,KAAA,GAAGZ,OAAO,CAAA;AAC9B,IAAA,IAAIY,OAAO,EAAE,OAAOA,OAAO,CAAC,KACvB;AAAA,MAAA,IAAAC,SAAA,CAAA;MACD,MAAM;QAACzD,OAAO;AAAE0D,QAAAA,SAAS,GAAG,MAAA;OAAO,GAAG,IAAI,CAAC9D,aAAa,CAAA;AACxD,MAAA,MAAM+D,GAAG,GAAG;AACRV,QAAAA,KAAK,EAAE;AAAC,UAAA,GAAGA,KAAK;AAAEW,UAAAA,MAAM,EAAE,CAAA;SAAE;AAC5B,QAAA,CAACF,SAAS,GAAG;AAACG,UAAAA,SAAS,EAAE,IAAI;UAAE,GAAGjB,OAAO,CAACc,SAAS,CAAA;AAAE,SAAA;OACxD,CAAA;AACD,MAAA,MAAMI,QAAQ,GAAG,OAAA,CAAAL,SAAA,GAAM,IAAI,CAAC5B,GAAG,KAAR4B,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAA,CAAUzD,OAAO,CAACA,OAAO,CAAC,CAAC+D,IAAI,CAAC;AAAC,QAAA,GAAGJ,GAAG;AAAEE,QAAAA,SAAS,EAAE,IAAI;AAAEG,QAAAA,UAAU,EAAE,IAAI;AAAEC,QAAAA,UAAU,EAAE,IAAA;AAAI,OAAQ,CAAC,CAAA,CAAA;MAC5H,IAAIH,QAAQ,CAACI,KAAK,EAAE,OAAOJ,QAAQ,CAACK,IAAI,CAAC,CAAC,CAAC,CAACC,GAAG,CAAC,KAC3C,MAAM,IAAItF,cAAY,CAAC,gDAAgD,CAAC,CAAA;AACjF,KAAA;AACJ,GAAA;AAEA,EAAA,MAAMuF,YAAYA,CAACtE,cAAqC,EAAEgD,MAAc,EAAA;IACpE,IAAI;MAACpD,WAAW;MAAE6D,OAAO;AAAEc,MAAAA,IAAAA;AAAI,KAAC,GAAGvE,cAAc,CAAA;IACjD,MAAM;MAACG,MAAM;AAAEwD,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC9D,aAAa,CAAA;IAC9C,IAAI,CAACD,WAAW,EAAE;AAEd,MAAA,IAAI2E,IAAI,EAAE3E,WAAW,GAAG4E,oBAAS,CAACD,IAAI,CAAC,CAAC,KACnC,MAAM,IAAIxF,cAAY,CAAC,uBAAuB,CAAC,CAAA;AACpD;AACJ,KAAA;AACA;AACA;AACA;AACA;AACA;AACA;IAEA,MAAM0F,WAAW,GAAG,MAAM3D,uBAAY,CAAClB,WAAW,CAAC,CAC9CmB,KAAK,CAACC,GAAG,IAAG;MACTC,OAAO,CAACC,GAAG,CAAC,iDAAiD,EAAEF,GAAG,CAAC9B,OAAO,CAAC,CAAA;AAC3E,MAAA,MAAMiC,MAAM,GAAG;AACXC,QAAAA,IAAI,EAAE,CAAC;AACPlC,QAAAA,OAAO,EAAE,+BAAA;OACZ,CAAA;MACD,IAAI8B,GAAG,CAAC9B,OAAO,CAACmC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;QACtCF,MAAM,CAACC,IAAI,GAAG,CAAC,CAAA;QACfD,MAAM,CAACjC,OAAO,GAAG,cAAc,CAAA;AACnC,OAAA;AACA,MAAA,MAAM,IAAIF,KAAK,CAACmC,MAAM,CAACjC,OAAO,CAAC,CAAA;AACnC,KAAC,CAAC,CAAA;AAEN,IAAA,MAAMoE,MAAM,GAAG;MACX1D,WAAW;AACXI,MAAAA,cAAc,EAAE;AACZmC,QAAAA,QAAQ,EAAE,KAAK;AACfvC,QAAAA,WAAAA;AACH,OAAA;KACJ,CAAA;IAED,IAAIO,MAAM,KAAK,IAAI,EAAE;AACjB,MAAA,OAAOmD,MAAM,CAAA;AACjB,KAAA;AAEA,IAAA,IAAIoB,KAAK,CAAA;IACT,MAAMC,UAAU,GAAGC,eAAI,CAAC5B,MAAM,EAAE,CAACW,SAAS,EAAExD,MAAM,CAAC,CAAC,CAAA;IACpD,IAAI,CAACwE,UAAU,EAAE;MACb,MAAMvE,QAAQ,GAAG,MAAM,IAAI,CAACoD,WAAW,CAACF,MAAM,EAAE;AAC5C,QAAA,GAAGN,MAAM;QACTS,OAAO;AACPP,QAAAA,KAAK,EAAE;AAAC2B,UAAAA,GAAG,EAAEJ,WAAW,IAAA,IAAA,GAAA,KAAA,CAAA,GAAXA,WAAW,CAAEnD,OAAO,CAACwD,GAAAA;AAAI,SAAA;AACzC,OAAA,CAAC,CAAA;MACFJ,KAAK,GAAG,MAAM,IAAI,CAAC5B,SAAS,CAAC1C,QAAQ,EAAE4C,MAAM,CAAC,CAAA;KACjD,MAAM0B,KAAK,GAAGC,UAAU,CAAA;IACzB,OAAO;AACH,MAAA,GAAGrB,MAAM;AACT,MAAA,CAACnD,MAAM,GAAGuE,KAAAA;KACb,CAAA;AAEL,GAAA;EAEA,MAAMK,KAAKA,CAACC,GAAoB,EAAA;IAC5B,MAAM;MAAC1E,MAAM;AAAEC,MAAAA,OAAAA;KAAQ,GAAG,IAAI,CAACV,aAAa,CAAA;AAC5C,IAAA,MAAMoF,WAAW,GAAGD,GAAG,CAACE,OAAO,IAAIF,GAAG,CAACE,OAAO,CAAC5E,MAAM,CAAC6E,WAAW,EAAE,CAAC,CAAA;AAEpE,IAAA,IAAI,CAACF,WAAW,IAAI,OAAOA,WAAW,KAAK,QAAQ,EAAE;AACjD,MAAA,OAAO,IAAI,CAAA;AACf,KAAA;AAEA,IAAA,MAAM,GAAGG,MAAM,EAAEC,WAAW,CAAC,GAAGJ,WAAW,CAACK,KAAK,CAACnG,YAAY,CAAC,IAAI,EAAE,CAAA;IACrE,MAAMoG,SAAS,GAAGH,MAAM,IAAI7E,OAAO,CAACiF,IAAI,CACnCC,OAAY,IAAK,IAAIC,MAAM,CAACD,OAAO,EAAE,GAAG,CAAC,CAACE,IAAI,CAACP,MAAM,CAAC,CAC1D,CAAA;AAED,IAAA,IAAIA,MAAM,IAAI,CAACG,SAAS,EAAE;AACtB,MAAA,OAAO,IAAI,CAAA;AACf,KAAA;IAEA,OAAO;MACHpD,QAAQ,EAAE,IAAI,CAACC,IAAI;AACnBxC,MAAAA,WAAW,EAAE2F,SAAS,GAAGF,WAAW,GAAGJ,WAAAA;KAC1C,CAAA;AACL,GAAA;AACH;;ACpOK,MAAOlG,YAAa,SAAQC,KAAK,CAAA;EACnCC,WAAAA,CAAYC,OAAgB,EAAA;IACxB,KAAK,CAACA,OAAO,CAAC,CAAA;AAClB,GAAA;AACH,CAAA;AAMK,MAAO0G,WAAY,SAAQC,oCAAqB,CAAA;EAElD5G,WAAAA,CAAY6C,GAAQ,EAAEgE,SAAS,GAAG,gBAAgB,EAAEC,OAAiC,EAAE,EAAA;IACnF,MAAM;MAAEC,gBAAgB;MAAE,GAAGC,IAAAA;AAAM,KAAA,GAAGF,IAAI,CAAA;AAC1C,IAAA,KAAK,CAACjE,GAAG,EAAEgE,SAAS,EAAEG,IAAI,CAAC,CAAA;AAAA,IAAA,IAAA,CAH/BC,OAAO,GAAA,KAAA,CAAA,CAAA;IAIH,IAAI,CAACpE,GAAG,GAAGA,GAAG,CAAA;IACd,IAAI,CAACoE,OAAO,GAAG;AAAEF,MAAAA,gBAAAA;KAAkB,CAAA;AACvC,GAAA;AAEA,EAAA,MAAMG,MAAMA,CAAC/B,IAA2B,EAAEpB,MAA6B,EAAA;IAAA,IAAAoD,aAAA,EAAAvD,OAAA,CAAA;AACnE,IAAA,MAAMwD,OAAO,GAAG,CAAAD,CAAAA,aAAA,GAAI,IAAA,CAACF,OAAO,KAAA,IAAA,GAAA,KAAA,CAAA,GAAZE,aAAA,CAAcJ,gBAAgB,KAAIjH,YAAY,CAAA;IAE9D,MAAM;MAACoB,MAAM;MAAEF,OAAO;AAAEqG,MAAAA,SAAS,GAAG,MAAA;KAAO,GAAG,IAAI,CAACxE,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAE5E,IAAA,MAAMsE,cAAc,GAAG,CAAA1D,CAAAA,OAAA,GAAAG,MAAM,KAAA,IAAA,GAAA,KAAA,CAAA,GAANH,OAAA,CAAQ0D,cAAc,KAAI,IAAI,CAAC1G,aAAa,CAAC0G,cAAc,CAAA;AAElF,IAAA,IAAI,CAACvD,MAAM,EAAEA,MAAM,GAAG,EAAE,CAAA;AAExB,IAAA,IAAI,CAACuD,cAAc,CAACC,MAAM,EAAE;AACxB,MAAA,MAAM,IAAIH,OAAO,CAAC,4EAA4E,CAAC,CAAA;AACnG,KAAA;AAEA,IAAA,MAAM1F,UAAU,GAAG,MAAM,IAAI,CAAC2D,YAAY,CAACF,IAAI,EAAEpB,MAAM,EAAE,GAAGuD,cAAc,CAAC,CACtExF,KAAK,CAAEC,GAAQ,IAAI;AAChB,MAAA,MAAM,IAAIhC,KAAK,CAACgC,GAAG,CAAC9B,OAAO,CAAC,CAAA;AAChC,KAAC,CAAC,CAAA;IAEN,IAAIyB,UAAU,CAACf,WAAW,EAAE;AACxB,MAAA,OAAOe,UAAU,CAAA;AACrB,KAAA;AACA,IAAA,MAAMkE,GAAG,GAAGT,IAAI,CAACS,GAAG,IAAID,eAAI,CAACjE,UAAU,EAAE,CAACR,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;AACzD,IAAA,IAAIoE,IAAI,GAAGH,IAAI,CAACG,IAAI,IAAIK,eAAI,CAACjE,UAAU,EAAE,CAACR,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAE1D,IAAI,CAAC0E,GAAG,EAAE,MAAM,IAAI7F,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACrD,IAAI,CAACuF,IAAI,EAAE,MAAM,IAAIvF,KAAK,CAAC,yCAAyC,CAAC,CAAA;AACrE;IAEA,MAAMyH,aAAa,GAAG,MAAM3F,uBAAY,CAACyD,IAAI,CAAC,CACzCxD,KAAK,CAACC,GAAG,IAAG;MACTC,OAAO,CAACC,GAAG,CAAC,mDAAmD,EAAEF,GAAG,CAAC9B,OAAO,CAAC,CAAA;AAC7E,MAAA,MAAMiC,MAAM,GAAG;AACXC,QAAAA,IAAI,EAAE,CAAC;AACPlC,QAAAA,OAAO,EAAE,+BAAA;OACZ,CAAA;MACD,IAAI8B,GAAG,CAAC9B,OAAO,CAACmC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;QACtCF,MAAM,CAACC,IAAI,GAAG,CAAC,CAAA;QACfD,MAAM,CAACjC,OAAO,GAAG,cAAc,CAAA;AACnC,OAAA;MACA+B,OAAO,CAACyF,IAAI,CAAC,iDAAiD,EAAEnC,IAAI,EAAEpD,MAAM,CAACjC,OAAO,CAAC,CAAA;AACrF,MAAA,OAAO,IAAI,CAAA;AACf,KAAC,CAAC,CAAA;IACN,IAAI,CAACuH,aAAa,EAAE;AAChB,MAAA,MAAME,MAAM,GAAGC,oBAAS,CAACrC,IAAI,CAAC,CAAA;MAC9B,IAAI;AAACsC,QAAAA,MAAAA;OAAO,GAAG,IAAI,CAAC/E,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;MAE7C,MAAM6E,MAAM,GAAGC,wBAAa,CAAC;AAACC,QAAAA,SAAS,EAAEH,MAAAA;AAAO,OAAA,CAAC,CAAA;MACjDtC,IAAI,GAAG,MAAM0C,oBAAS,CAAC;AACnBC,QAAAA,QAAQ,EAAEP,MAAM,CAACrF,OAAO,CAACwD,GAAG;QAC5BgC,MAAM;AACNK,QAAAA,iBAAiB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACpCC,QAAAA,YAAY,EAAET,MAAM,CAACrF,OAAO,CAAC+F,GAAAA;AAChC,OAAA,CAAC,CAAA;MACFrE,MAAM,CAACkB,UAAU,GAAG,IAAI,CAAA;MACxB,MAAM,IAAI,CAACpC,GAAG,CAAC7B,OAAO,CAACA,OAAO,CAAC,CAACqH,KAAK,CAAC1C,eAAI,CAACjE,UAAU,EAAE,CAACR,MAAM,EAAE,KAAK,CAAC,CAAe,EAAE;AAAC,QAAA,CAACmG,SAAS,GAAG9B,oBAAS,CAACD,IAAI,CAAA;OAAE,EAAE;QAAC,GAAGvB,MAAAA;AAAM,OAAC,CAAC,CAAA;AACvI,KAAA;AAGA,IAAA,MAAMpD,WAAW,GAAG4E,oBAAS,CAACD,IAAI,CAAC,CAAA;IAEnC,OAAO;MACH3E,WAAW;AACX,MAAA,GAAGe,UAAU;AACbX,MAAAA,cAAc,EAAE;QACZ,GAAGW,UAAU,CAACX,cAAc;AAC5BsB,QAAAA,OAAO,EAAE1B,WAAAA;AACZ,OAAA;KACJ,CAAA;AACL,GAAA;AACH;;MC7EY2H,QAAQ,CAAA;AAKjBtI,EAAAA,WAAAA,CAAYgB,OAAc,EAAEuH,OAAW,EAAEC,WAAqB,EAAA;AAAA,IAAA,IAAAC,eAAA,CAAA;AAAA,IAAA,IAAA,CAJ9DF,OAAO,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACPvH,OAAO,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACP0H,IAAI,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACJxH,MAAM,GAAA,KAAA,CAAA,CAAA;IAEF,IAAI,CAACF,OAAO,GAAGA,OAAO,CAAA;IACtB,IAAI,CAACuH,OAAO,GAAGA,OAAO,CAAA;IACtB,MAAMrH,MAAM,GAAG,CAACqH,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,IAAI;AAAE9B,MAAAA,MAAM,EAAE,OAAA;KAAS,EAAEA,MAAM,IAAI,OAAO,CAAA;IAC3F,IAAI,CAACA,MAAM,GAAGA,MAAM,CAAA;AACpB,IAAA,MAAMwH,IAAI,GAAG,CAAAD,CAAAA,eAAA,GAAAF,OAAO,CAACxE,MAAM,KAAA,IAAA,GAAA,KAAA,CAAA,GAAd0E,eAAA,CAAgBC,IAAI,KAAI,EAAE,CAAA;AACvC,IAAA,IAAG,CAACA,IAAI,CAACxH,MAAM,CAAC,EAAEwH,IAAI,CAACxH,MAAM,CAAC,GAAGqH,OAAO,CAACxE,MAAM,CAAC7C,MAAM,CAAC,CAAA;IACvD,IAAI,CAACwH,IAAI,GAAG;AAAE,MAAA,GAAGA,IAAI;MAAE,GAAGF,WAAAA;KAAa,CAAA;AAC3C,GAAA;EAEA,MAAMxF,GAAGA,CAACc,EAAa,EAAEC,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAA4E,iBAAA,CAAA;IACvC,MAAM;AAACjE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAA2F,CAAAA,iBAAA,GAAO,IAAI,CAACJ,OAAO,CAAC1F,GAAG,qBAAhB8F,iBAAA,CAAkB3H,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACgC,GAAG,CAACc,EAAE,EAAE;AAAC,MAAA,GAAGC,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAC1I,GAAA;AACA,EAAA,MAAM3D,IAAIA,CAAEhB,MAAA,GAAgB,EAAE,EAAA;AAAA,IAAA,IAAA6E,kBAAA,CAAA;IAC1B,MAAM;AAAClE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC1D,IAAA,OAAA,CAAA4F,kBAAA,GAAO,IAAI,CAACL,OAAO,CAAC1F,GAAG,KAAhB+F,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAkB5H,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC+D,IAAI,CAAC;AAAC,MAAA,GAAGhB,MAAmB;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;AAAE8D,MAAAA,UAAU,EAAC,IAAI;AAAEC,MAAAA,UAAU,EAAC,IAAI;MAAE,GAAG;QAAE,CAACP,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AACtL,GAAA;EACA,MAAMxB,MAAMA,CAAE/B,IAAW,EAAEpB,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAA8E,kBAAA,CAAA;IACzC,MAAM;AAACnE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAA6F,CAAAA,kBAAA,GAAO,IAAI,CAACN,OAAO,CAAC1F,GAAG,qBAAhBgG,kBAAA,CAAkB7H,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACkG,MAAM,CAAC/B,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAC/I,GAAA;EACA,MAAML,KAAKA,CAAEvE,EAAa,EAAEqB,IAAW,EAAEpB,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAA+E,kBAAA,CAAA;IACvD,MAAM;AAACpE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAA8F,CAAAA,kBAAA,GAAO,IAAI,CAACP,OAAO,CAAC1F,GAAG,KAAhBiG,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAkB9H,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACqH,KAAK,CAACvE,EAAE,EAAEqB,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAClJ,GAAA;EACA,MAAMK,MAAMA,CAAEjF,EAAa,EAAEqB,IAAW,EAAEpB,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAAiF,kBAAA,CAAA;IACxD,MAAM;AAACtE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAAgG,CAAAA,kBAAA,GAAO,IAAI,CAACT,OAAO,CAAC1F,GAAG,KAAhBmG,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAkBhI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC+H,MAAM,CAACjF,EAAE,EAAEqB,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AACnJ,GAAA;EACA,MAAMO,MAAMA,CAAEnF,EAAa,EAAEC,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAAmF,kBAAA,CAAA;IAC3C,MAAM;AAACxE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAAkG,CAAAA,kBAAA,GAAO,IAAI,CAACX,OAAO,CAAC1F,GAAG,qBAAhBqG,kBAAA,CAAkBlI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACiI,MAAM,CAACnF,EAAE,EAAE;AAAC,MAAA,GAAGC,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAC7I,GAAA;EAEA,MAAM/C,IAAIA,CAAC7B,EAAa,EAAEC,SAAgB,EAAE,EAAA;AAAA,IAAA,IAAAoF,kBAAA,CAAA;IACxC,MAAM;AAACzE,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAAmG,CAAAA,kBAAA,GAAO,IAAI,CAACZ,OAAO,CAAC1F,GAAG,qBAAhBsG,kBAAA,CAAkBnI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC2E,IAAI,CAAC7B,EAAE,EAAE;AAAC,MAAA,GAAGC,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAC3I,GAAA;AACA,EAAA,MAAMU,KAAKA,CAAErF,MAAA,GAAgB,EAAE,EAAA;AAAA,IAAA,IAAAsF,kBAAA,CAAA;IAC3B,MAAM;AAAC3E,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC1D,IAAA,OAAA,CAAAqG,kBAAA,GAAO,IAAI,CAACd,OAAO,CAAC1F,GAAG,KAAhBwG,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAkBrI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACoI,KAAK,CAAC;AAAC,MAAA,GAAGrF,MAAmB;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAM,OAAA;AAAA,KAAC,CAAC,CAAA;AACrJ,GAAA;EACA,MAAMY,OAAOA,CAAEnE,IAAW,EAAEpB,SAAe,EAAE,EAAA;AAAA,IAAA,IAAAwF,kBAAA,CAAA;IACzC,MAAM;AAAC7E,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAAuG,CAAAA,kBAAA,GAAO,IAAI,CAAChB,OAAO,CAAC1F,GAAG,qBAAhB0G,kBAAA,CAAkBvI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACsI,OAAO,CAACnE,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAChJ,GAAA;EACA,MAAMc,MAAMA,CAAE1F,EAAa,EAAEqB,IAAW,EAAEpB,SAAe,EAAE,EAAA;AAAA,IAAA,IAAA0F,mBAAA,CAAA;IACvD,MAAM;AAAC/E,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAAyG,CAAAA,mBAAA,GAAO,IAAI,CAAClB,OAAO,CAAC1F,GAAG,KAAhB4G,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,mBAAA,CAAkBzI,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAACwI,MAAM,CAAC1F,EAAE,EAAEqB,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AACnJ,GAAA;EACA,MAAMgB,OAAOA,CAAE5F,EAAa,EAAEqB,IAAW,EAAEpB,SAAe,EAAE,EAAA;AAAA,IAAA,IAAA4F,mBAAA,CAAA;IACxD,MAAM;AAACjF,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAA2G,CAAAA,mBAAA,GAAO,IAAI,CAACpB,OAAO,CAAC1F,GAAG,KAAhB8G,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,mBAAA,CAAkB3I,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC0I,OAAO,CAAC5F,EAAE,EAAEqB,IAAI,EAAE;AAAC,MAAA,GAAGpB,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AACpJ,GAAA;EACA,MAAMkB,OAAOA,CAAE9F,EAAa,EAAEC,SAAe,EAAE,EAAA;AAAA,IAAA,IAAA8F,mBAAA,CAAA;IAC3C,MAAM;AAACnF,MAAAA,SAAAA;KAAU,GAAG,IAAI,CAAC6D,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1D,OAAA6G,CAAAA,mBAAA,GAAO,IAAI,CAACtB,OAAO,CAAC1F,GAAG,qBAAhBgH,mBAAA,CAAkB7I,OAAO,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC4I,OAAO,CAAC9F,EAAE,EAAE;AAAC,MAAA,GAAGC,MAAM;MAAE,CAAC,IAAI,CAAC7C,MAAM,GAAG6C,MAAM,CAAC,IAAI,CAAC7C,MAAM,CAAC;MAAE,GAAG;QAAE,CAACwD,SAAS,GAAG,IAAI,CAACgE,IAAAA;AAAI,OAAA;AAAG,KAAA,CAAC,CAAA;AAC9I,GAAA;AAEH;;AC5EM,MAAMoB,UAAU,GAAG,UAAS;AAEtBC,MAAAA,SAAS,GAAIxB,OAA4B,IAAQ;EAC1D,MAAMyB,IAAI,GAAGzB,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,YAAY,CAAC,IAAI8G,UAAU,CAAA;AACxD,EAAA,OAAOnE,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,QAAQiG,IAAQ,CAAA,CAAA,EAAAzB,OAAO,CAACyB,IAAI,IAAIzB,OAAO,CAACzE,GAAI,CAAA,CAAC,IAAI7C,SAAS,CAAA;AAC1F,EAAC;AAEM,MAAMgJ,UAAU,GAAG,OAAO1B,OAAmB,EAAEtB,OAAiD,KAAiB;AACpH,EAAA,IAAIiD,EAAE,GAAGH,SAAS,CAACxB,OAAO,CAAC,CAAA;AAC3B,EAAA,IAAG,CAAC2B,EAAE,IAAI3B,OAAO,CAACzE,EAAE,EAAE;IAClBoG,EAAE,GAAG,MAAM,IAAI5B,QAAQ,CAACC,OAAO,CAACyB,IAAI,EAAEzB,OAAO,EAAE;AAAE1D,MAAAA,SAAS,EAAE,CAAAoC,OAAO,oBAAPA,OAAO,CAAEpC,SAAS,MAAK,KAAA;AAAK,KAAE,CAAC,CAAC7B,GAAG,CAACuF,OAAO,CAACzE,EAAE,EAAE;AAAEqG,MAAAA,YAAY,EAAE,IAAI;AAAElF,MAAAA,UAAU,EAAE,IAAI;AAAED,MAAAA,UAAU,EAAE,IAAI;MAAE,IAAG,CAAAiC,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAElD,MAAM,KAAI,EAAE,CAAA;AAAE,KAAA,CAAC,CAAA;AACrM,GAAA;AACA,EAAA,OAAOmG,EAAE,CAAA;AACb,EAAC;MAEYE,SAAS,GAAGA,CAAC7B,OAAmB,EAAE8B,GAAO,KAAgB;EAClE,MAAML,IAAI,GAAGzB,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,YAAY,CAAC,IAAI8G,UAAU,CAAA;AACxDvB,EAAAA,OAAO,CAACxE,MAAM,GAAGuG,eAAI,CAAC/B,OAAO,CAACxE,MAAM,EAAU,CAAA,KAAA,EAAAiG,IAAQ,CAAA,CAAA,EAAAzB,OAAO,CAACyB,IAAQ,CAAA,CAAA,EAAA,CAAAK,GAAG,IAAHA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAG,CAAEjF,GAAG,KAAImD,OAAO,CAACzE,EAAI,CAAA,CAAA,EAAEuG,GAAG,CAAC,CAAA;AACpG,EAAA,OAAO9B,OAAO,CAAA;AAClB;;ACPA,MAAMgC,SAAS,GAAG,GAAG,CAAA;AAkBd,MAAMC,OAAO,GAAY,IAAc;AAEvC,MAAMC,OAAO,GAAY,IAAc;AAoCjCC,MAAAA,WAAW,GAAG,MAAUnC,OAAuB,IAA6B;EACrF,MAAMnH,MAAM,GAAGmH,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAe,CAAA;AAC9D,EAAA,MAAM9B,MAAM,GAAGyE,eAAI,CAAC4C,OAAO,EAAE,CAAC,MAAM,EAAEnH,MAAM,CAACF,MAAM,CAAC,CAAC,CAAA;AACrD,EAAA,IAAIA,MAAM,EAAE;AACRqH,IAAAA,OAAO,GAAG+B,eAAI,CAAC/B,OAAO,EAAE,CAACnH,MAAM,CAACsD,SAAS,EAAEtD,MAAM,CAACF,MAAM,CAAC,EAAEA,MAAM,CAAC,CAAA;AACtE,GAAA;EACA,IAAI;AACAqH,IAAAA,OAAO,GAAG,MAAMlD,2BAAY,CAAC,KAAK,CAAC,CAACkD,OAAc,CAAC,CAC9CzG,KAAK,CAAC,MAAK;AACR,MAAA,OAAOyG,OAAO,CAAA;AAClB,KAAC,CAAC,CAAA;GACT,CAAC,OAAOoC,CAAC,EAAE;AACR,IAAA,OAAOpC,OAAO,CAAA;AAClB,GAAA;AACA,EAAA,OAAOA,OAAO,CAAA;AAClB,EAAC;AAEYqC,MAAAA,QAAQ,GAAG,MAAUrC,OAAuB,IAA6B;EAClF,MAAMnH,MAAM,GAAGmH,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAe,CAAA;AAC9D,EAAA,MAAM9B,MAAM,GAAGyE,eAAI,CAAC4C,OAAO,EAAE,CAAC,MAAM,EAAEnH,MAAM,CAACF,MAAM,CAAC,CAAC,CAAA;AACrD,EAAA,IAAIA,MAAM,EAAEqH,OAAO,GAAG+B,eAAI,CAAC/B,OAAO,EAAE,CAACnH,MAAM,CAACsD,SAAS,EAAEtD,MAAM,CAACF,MAAM,CAAC,EAAEA,MAAM,CAAC,CAAA;AAC9E,EAAA,OAAOmE,2BAAY,CAAC,KAAK,CAAC,CAACkD,OAAc,CAAC,CAAA;AAC9C,EAAC;AAED,MAAMsC,SAAS,GAAG,OAAOvF,IAAY,EAAE2B,OAAsB,EAAEhF,GAAa,KAAI;EAC5E,IAAI;AAAA,IAAA,IAAA6I,EAAA,CAAA;IACA,IAAIC,CAAC,GAAG,MAAMC,qBAAU,CAAC1F,IAAI,EAAE2B,OAAO,CAAC,CAAA;AACvC,IAAA,IAAI,EAAA6D,CAAAA,EAAA,GAACC,CAAC,KAADD,IAAAA,IAAAA,EAAA,CAAGG,EAAE,CAAIhE,IAAAA,OAAO,CAACiE,oBAAoB,EAAE;MACxC,MAAMC,eAAe,GAAGlE,OAAO,CAACiE,oBAAoB,CAACE,GAAG,CAACC,CAAC,IAAG;AACzD,QAAA,IAAIA,CAAC,CAACC,UAAU,CAACC,GAAG,KAAKhB,SAAS,EAAEc,CAAC,CAACC,UAAU,CAACC,GAAG,CAACC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAA;AACrE,QAAA,OAAOH,CAAC,CAAA;AACZ,OAAC,CAAC,CAAA;AACF,MAAA,IAAIpJ,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,0BAA0B,EAAEkJ,eAAe,EAAExD,oBAAS,CAACrC,IAAI,CAAC,CAAC,CAAA;AAClFyF,MAAAA,CAAC,GAAG,MAAMC,qBAAU,CAAC1F,IAAI,EAAE;AACvB,QAAA,GAAG2B,OAAO;AAAEiE,QAAAA,oBAAoB,EAAEC,eAAAA;AACrC,OAAA,CAAC,CAAA;MACF,IAAIlJ,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,6BAA6B,EAAE8I,CAAC,CAAC,CAAA;AAC1D,KAAA;AACA,IAAA,OAAOA,CAAC,CAAA;GACX,CAAC,OAAOJ,CAAM,EAAE;IACb,OAAO;AAACM,MAAAA,EAAE,EAAE,KAAK;AAAElJ,MAAAA,GAAG,EAAE,CAAC4I,CAAC,CAAC1K,OAAO,CAAA;KAAE,CAAA;AACxC,GAAA;AACJ,CAAC,CAAA;AACM,MAAMwL,YAAY,GAAG,OAAOC,GAAqB,EAAEzJ,GAAa,KAAwB;AAC3F,EAAA,IAAI8I,CAAC,GAAQ;AAACE,IAAAA,EAAE,EAAE,KAAK;AAAExF,IAAAA,KAAK,EAAE,EAAA;GAAG,CAAA;EAEnC,IAAI;AACA,IAAA,KAAK,MAAMkG,CAAC,IAAID,GAAG,EAAE;AAAA,MAAA,IAAAE,GAAA,CAAA;MACjB,IAAI3J,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAEyJ,GAAG,CAACC,CAAC,CAAC,EAAEhE,oBAAS,CAAC+D,GAAG,CAACC,CAAC,CAAC,CAACrG,IAAI,CAAC,CAAC,CAAA;MACtE,IAAI,EAAA,CAAAsG,GAAA,GAACb,CAAC,aAADa,GAAA,CAAGX,EAAE,CAAE,EAAA;QACR,MAAM;UAAC3F,IAAI;UAAE,GAAG2B,OAAAA;AAAQ,SAAA,GAAGyE,GAAG,CAACC,CAAC,CAAC,CAAA;QACjCZ,CAAC,GAAG,MAAMF,SAAS,CAACvF,IAAI,EAAE2B,OAAO,EAAEhF,GAAG,CAAC,CAAA;QACvC,IAAIA,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAE8I,CAAC,CAAC,CAAA;AACjD,OAAC,MAAM,MAAA;AACX,KAAA;AACA,IAAA,OAAOA,CAAC,CAAA;GACX,CAAC,OAAOJ,CAAM,EAAE;IACb,OAAO;AAACM,MAAAA,EAAE,EAAE,KAAK;AAAElJ,MAAAA,GAAG,EAAE,CAAC4I,CAAC,CAAC1K,OAAO,CAAA;KAAE,CAAA;AACxC,GAAA;AACJ,EAAC;AASM,MAAM4L,iBAAiB,GAAGA,CAAIC,IAA+B,EAAE1K,MAAoB,EAAE6F,OAAyB,KAAI;EACrH,OAAO,MAAOsB,OAAuB,IAAwB;AAAA,IAAA,IAAAwD,GAAA,CAAA;AACzD,IAAA,MAAM9J,GAAG,GAAGgF,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAEhF,GAAG,CAAA;IACxB,MAAMqD,IAAI,GAAGK,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE3C,MAAM,CAAC4K,WAAW,CAAW,CAAA;AAC/D,IAAA,MAAM/D,QAAQ,GAAG,CAAAhB,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAEgB,QAAQ,KAAItC,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE3C,MAAM,CAAC6K,QAAQ,CAAW,CAAA;IACrF,IAAIhK,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,qBAAqB,EAAE6J,IAAI,CAAC,CAAA;AACjD,IAAA,IAAII,OAAqE,CAAA;IACzE,MAAMC,EAAE,GAAG,CAAAlF,OAAO,oBAAPA,OAAO,CAAEkF,EAAE,KAAI,EAAE,CAAA;AAC5B,IAAA,IAAI7G,IAAI,KAAK6G,EAAE,KAAK,GAAG,IAAIA,EAAE,CAACzI,QAAQ,CAAC6E,OAAO,CAAC6D,MAAM,CAAC,CAAC,EAAEF,OAAO,GAAGA,CAACG,EAAW,EAAEC,UAAuB,KAAKb,YAAY,CAAC,CAACK,IAAI,IAAI,EAAE,EAAEV,GAAG,CAACC,CAAC,IAAG;MAC3I,OAAO;QACH/F,IAAI,EAAE+G,EAAE,IAAI/G,IAAI;QAChB2C,QAAQ,EAAE,CAAAqE,UAAU,IAAA,IAAA,GAAA,KAAA,CAAA,GAAVA,UAAU,CAAEzG,GAAG,KAAIoC,QAAQ;QACrCiD,oBAAoB,EAAE,CAACG,CAAC,CAAA;OAC3B,CAAA;AACL,KAAC,CAAC,EAAEpJ,GAAG,CAAC,CAAA,KACHiK,OAAO,GAAGA,CAACG,EAAW,EAAEC,UAAuB,KAAKzB,SAAS,CAACwB,EAAE,IAAI/G,IAAI,EAAE;MAC3E2C,QAAQ,EAAE,CAAAqE,UAAU,IAAA,IAAA,GAAA,KAAA,CAAA,GAAVA,UAAU,CAAEzG,GAAG,KAAIoC,QAAQ;AACrCiD,MAAAA,oBAAoB,EAAEY,IAAAA;KACzB,EAAE7J,GAAG,CAAuB,CAAA;AAC7B,IAAA,IAAI8I,CAAC,GAAG,MAAMmB,OAAO,EAAE,CAAA;IACvB,IAAIjK,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,kBAAkB,EAAE8I,CAAC,CAAC,CAAA;IAC3C,IAAAgB,CAAAA,GAAA,GAAIhB,CAAC,KAAA,IAAA,IAADgB,GAAA,CAAGd,EAAE,EAAE,OAAOF,CAAC,CAAA;AACnB,IAAA,MAAMwB,EAAE,GAAG,CAAC,CAAAtF,OAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEuF,YAAY,KAAI,EAAE,EAAEC,MAAM,CAACpB,CAAC,IAAI,CAAC,CAACA,CAAC,CAAC,CAAA;IACzD,IAAIpJ,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEsK,EAAE,CAAC,CAAA;AAC9C,IAAA,IAAIA,EAAE,EAAE;AACJ,MAAA,MAAM3L,aAAa,GAAG,CAAAQ,MAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAEsL,WAAW,KAAInE,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAW,CAAA;AACxF,MAAA,MAAM2J,YAAY,GAAGC,MAAM,CAACjH,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAK,CAAA,EAAAnD,aAAa,CAACM,MAAM,MAAM,IAAI,EAAE,CAAC,CAAQ,CAAA;AAC7F,MAAA,MAAM2L,IAAI,GAAG,MAAM,IAAIvE,QAAQ,CAAC1H,aAAa,CAACkM,kBAAkB,IAAI,MAAM,EAAEvE,OAAO,CAAC,CAACxD,IAAI,CAAC;AACtFd,QAAAA,KAAK,EAAE;UACHW,MAAM,EAAE2H,EAAE,CAAChF,MAAM;AACjBwF,UAAAA,OAAO,EAAE;AAACC,YAAAA,GAAG,EAAET,EAAAA;AAAG,WAAA;SACrB;AACDvH,QAAAA,UAAU,EAAE,IAAI;AAChBC,QAAAA,UAAU,EAAE,IAAA;OACf,CAAC,CACGnD,KAAK,CAACC,GAAG,IAAIC,OAAO,CAACC,GAAG,CAAC,oCAAoCF,GAAG,CAAC9B,OAAS,CAAA,CAAA,CAAC,CAAC,CAAA;MACjF,IAAIgC,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,MAAM,EAAE4K,IAAI,CAAC,CAAA;AAClC,MAAA,IAAIA,IAAI,IAAA,IAAA,IAAJA,IAAI,CAAE1H,IAAI,EAAE;AACZ,QAAA,KAAK,MAAM8H,GAAG,IAAIJ,IAAI,CAAC1H,IAAI,EAAE;UACzB,KAAK,MAAM+H,CAAC,IAAID,GAAG,CAACJ,IAAI,IAAI,EAAE,EAAE;YAC5B,IAAI5K,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,WAAW,EAAEiL,CAAC,EAAED,GAAG,CAACJ,IAAI,CAACK,CAAC,CAAC,CAACC,MAAM,EAAER,YAAY,CAAC,CAAA;YACtE,IAAI,CAACM,GAAG,CAACJ,IAAI,CAACK,CAAC,CAAC,CAACC,MAAM,IAAI,EAAE,EAAE/B,GAAG,CAAEC,CAAM,IAAKuB,MAAM,CAACvB,CAAC,CAAC,CAAC,CAAC3H,QAAQ,CAACiJ,YAAY,CAAC,EAAE;AAAA,cAAA,IAAAS,GAAA,CAAA;cAC9E,IAAI;AACA,gBAAA,MAAMC,UAAU,GAAG9H,oBAAS,CAAC0H,GAAG,CAACJ,IAAI,CAACK,CAAC,CAAC,CAAC5H,IAAI,CAAC,CAAA;gBAC9C,IAAIrD,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,iBAAiB,EAAEoL,UAAU,CAAC,CAAA;AACnD,gBAAA,IAAIA,UAAU,EAAE;AACZtC,kBAAAA,CAAC,GAAG,MAAMmB,OAAO,CAACmB,UAAU,EAAE;oBAACxH,GAAG,EAAEoH,GAAG,CAACrH,GAAAA;AAAG,mBAAC,CAAC,CAAA;kBAC7C,IAAI3D,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAE8I,CAAC,CAAC,CAAA;AAC7C,iBAAA;eACH,CAAC,OAAOJ,CAAM,EAAE;AACb3I,gBAAAA,OAAO,CAACC,GAAG,CAAC,CAAA,+BAAA,EAAkCgL,GAAG,CAAC7H,GAAG,CAAA,MAAA,EAASuF,CAAC,CAAC1K,OAAO,CAAA,CAAE,CAAC,CAAA;AAC9E,eAAA;AACA,cAAA,IAAIgH,OAAO,IAAA,IAAA,IAAPA,OAAO,CAAEhF,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAE8I,CAAC,CAAC,CAAA;cAClD,IAAAqC,CAAAA,GAAA,GAAIrC,CAAC,KAAA,IAAA,IAADqC,GAAA,CAAGnC,EAAE,EAAE,OAAOF,CAAC,CAAA;AACvB,aAAA;AACJ,WAAA;AACJ,SAAA;AACJ,OAAA;AACJ,KAAA;AACA,IAAA,OAAOA,CAAC,CAAA;GACX,CAAA;AACL,EAAC;MASYuC,iBAAiB,GAAGA,CAACxB,IAA4B,EAAE1K,MAA6B,KAA+B;EAExH,MAAMmM,UAAU,GAAGzF,wBAAa,CAAC;IAACC,SAAS,EAAE3G,MAAM,CAACwG,MAAAA;AAAO,GAAA,CAAC,CAAChC,GAAG,EAAE,CAAA;EAClE,IAAI,CAAC4H,KAAK,CAACC,OAAO,CAAC3B,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;AACnC,EAAA,OAAOA,IAAI,CAACV,GAAG,CAACC,CAAC,IAAG;IAChB,OAAO;MACHC,UAAU,EAAEkC,KAAK,CAACC,OAAO,CAACpC,CAAC,CAAC,GAAGqC,wBAAa,CAAC;AACzCC,QAAAA,IAAI,EAAE;UAACxH,MAAM,EAAE/E,MAAM,CAACwM,aAAa;UAAEC,QAAQ,EAAEzM,MAAM,CAAC0M,eAAAA;SAAgB;AACtEvC,QAAAA,GAAG,EAAE;AAACwC,UAAAA,SAAS,EAAE1C,CAAC,CAAC,CAAC,CAAC;AAAEG,UAAAA,QAAQ,EAAE,OAAOH,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAACA,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGA,CAAC,CAAC,CAAC,CAAA;AAAE,SAAA;OAC7E,EAAEjK,MAAM,CAAC,GAAGsM,wBAAa,CAACrC,CAAC,EAAEjK,MAAM,CAAC;AACrCmM,MAAAA,UAAAA;KACH,CAAA;AACL,GAAC,CAA8B,CAAA;AACnC,EAAC;MAKYS,SAAS,GAAGA,CAAC9C,oBAA6B,EAAEjE,OAAsC,KAAI;EAC/F,OAAO,MAAOsB,OAAoB,IAA0B;AAAA,IAAA,IAAA0F,GAAA,CAAA;AACxD,IAAA,MAAMrN,aAAa,GAAG,CAAAqG,OAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEyF,WAAW,KAAInE,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAW,CAAA;AAEzF,IAAA,IAAI+H,CAAC,GAAQ;AAACE,MAAAA,EAAE,EAAE,KAAK;AAAExF,MAAAA,KAAK,EAAE,EAAA;KAAG,CAAA;AAEnC,IAAA,MAAMqG,IAAI,GAA8BwB,iBAAiB,CAACpC,oBAA8C,EAAEtK,aAAsC,CAAC,CAAA;IAEjJ,IAAIkL,IAAI,CAACvE,MAAM,EAAE;AACbwD,MAAAA,CAAC,GAAG,MAAMc,iBAAiB,CAACC,IAAI,EAAElL,aAA6B,EAAEqG,OAAO,CAAC,CAACsB,OAAO,CAAC,CAAA;AAElF;KACH,MAAM,IAAI2C,oBAAoB,KAAK,GAAG,EAAEH,CAAC,CAACE,EAAE,GAAG,IAAI,CAAA;AACpD,IAAA,IAAA,CAAAgD,GAAA,GAAIlD,CAAC,aAADkD,GAAA,CAAGhD,EAAE,EAAE;AACP1C,MAAAA,OAAO,CAACxE,MAAM,CAACmK,aAAa,GAAG,IAAI,CAAA;AACnC3F,MAAAA,OAAO,CAACxE,MAAM,CAACoK,IAAI,GAAG,IAAI,CAAA;AAC1B,MAAA,OAAO5F,OAAO,CAAA;AAClB,KAAC,MAAM;AAAA,MAAA,IAAA6F,GAAA,CAAA;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,MAAA,IAAInH,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEhF,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,yBAAyB,EAAEgF,OAAO,oBAAPA,OAAO,CAAEoH,aAAa,CAAC,CAAA;AAChF,MAAA,IAAIpH,OAAO,IAAA,IAAA,IAAPA,OAAO,CAAEoH,aAAa,EAAE;AACxB,QAAA,IAAIpH,OAAO,CAACoH,aAAa,KAAK7D,OAAO,EAAE;AACnCjC,UAAAA,OAAO,CAACxE,MAAM,CAACoK,IAAI,GAAG,IAAI,CAAA;AAC1B,UAAA,OAAO5F,OAAO,CAAA;SACjB,MAAM,IAAIiF,KAAK,CAACC,OAAO,CAACxG,OAAO,CAACoH,aAAa,CAAC,EAAE;AAC7C,UAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC3K,QAAQ,CAAC6E,OAAO,CAAC6D,MAAM,CAAC,EAAE;AACxD,YAAA,IAAIoB,KAAK,CAACC,OAAO,CAAClF,OAAO,CAACpD,IAAI,CAAC,EAAE,MAAM,IAAIpF,KAAK,CAAC,2CAA2C,CAAC,CAAA;YAC7F,KAAK,MAAMmN,CAAC,IAAI3E,OAAO,CAACpD,IAAI,IAAI,EAAE,EAAE;AAChC,cAAA,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAACzB,QAAQ,CAACwJ,CAAC,CAAC,EAAE;AAC/D,gBAAA,KAAK,MAAMoB,EAAE,IAAI/F,OAAO,CAACpD,IAAI,CAAC+H,CAAC,CAAC,IAAI,EAAE,EAAE;kBACpC,IAAI,CAACjG,OAAO,CAACoH,aAAa,CAAC3K,QAAQ,CAAC4K,EAAE,CAAC,EAAE;AACrC,oBAAA,MAAMC,GAAG,GAAGD,EAAE,CAACE,KAAK,CAAC,GAAG,CAAC,CAAA;AACzB,oBAAA,IAAID,GAAG,CAAChH,MAAM,KAAK,CAAC,EAAE,OAAOgB,OAAO,CAACpD,IAAI,CAAC+H,CAAC,CAAC,CAACoB,EAAE,CAAC,CAAC,KAC5C,IAAI,CAACrH,OAAO,CAACoH,aAAa,CAAC3K,QAAQ,CAAC6K,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAOhG,OAAO,CAACpD,IAAI,CAAC+H,CAAC,CAAC,CAACoB,EAAE,CAAC,CAAA;AAChF,mBAAA;AACJ,iBAAA;AACJ,eAAC,MAAM,IAAI,CAACrH,OAAO,CAACoH,aAAa,CAAC3K,QAAQ,CAACwJ,CAAC,CAAC,EAAE,OAAO3E,OAAO,CAACpD,IAAI,CAAC+H,CAAC,CAAC,CAAA;AACzE,aAAA;AACA3E,YAAAA,OAAO,CAACxE,MAAM,CAACoK,IAAI,GAAG,IAAI,CAAA;AAC1B,YAAA,OAAO5F,OAAO,CAAA;AAClB,WAAA;AACJ,SAAA;AACJ,OAAA;AACA,MAAA,IAAA,CAAA6F,GAAA,GAAIrD,CAAC,aAADqD,GAAA,CAAGnD,EAAE,EAAE;AACP1C,QAAAA,OAAO,CAACxE,MAAM,CAACmK,aAAa,GAAG,IAAI,CAAA;AACnC3F,QAAAA,OAAO,CAACxE,MAAM,CAACoK,IAAI,GAAG,IAAI,CAAA;AAC1B,QAAA,OAAO5F,OAAO,CAAA;AAClB,OAAC,MAAM;AAAA,QAAA,IAAAkG,GAAA,CAAA;AAEH;QACA,MAAM;AAACC,UAAAA,SAAAA;SAAU,GAAGzH,OAAO,IAAI;UAACyH,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;SAAE,CAAA;AAC5E,QAAA,IAAIA,SAAS,IAAA,IAAA,IAATA,SAAS,CAAEnH,MAAM,EAAE;AACnB;UACA,IAAIoH,YAAY,GAAW,EAAE,CAAA;AAC7B;UACA,IAAIC,SAAS,GAAG,IAAI,CAAA;AACpB,UAAA,MAAMC,cAAc,GAAG,MAAOC,KAAsB,IAAI;YACpD,IAAIC,WAAW,GAAG,EAAE,CAAA;AACpB,YAAA,MAAMC,UAAU,GAAGF,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAA;YACnC,IAAIG,SAAS,GAAG,CAAC,CAAC,CAAA;AAClB,YAAA,IAAID,UAAU,EAAEC,SAAS,GAAG,CAAC,CAAC,KACzB;AACD;AACAF,cAAAA,WAAW,GAAID,KAAK,CAAC,CAAC,CAAc,CAAC1D,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACmD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;cAC9DS,SAAS,GAAGF,WAAW,CAAC3M,OAAO,CAACmG,OAAO,CAAC6D,MAAM,CAAC,CAAA;AACnD,aAAA;AACA;AACA,YAAA,IAAI6C,SAAS,GAAG,CAAC,CAAC,EAAE;AAChB;AACA,cAAA,MAAMC,QAAQ,GAAG,MAAMjF,UAAU,CAAC1B,OAAO,EAAE;AAACxE,gBAAAA,MAAM,EAAEkD,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAEkI,cAAAA;AAAc,eAAC,CAAC,CAAA;cAC7E,IAAIC,OAAO,GAAG,KAAK,CAAA;AAEnB;cACA,MAAMC,UAAU,GAAGA,CAACC,iBAAyB,EAAEC,WAAsB,GAAA,KAAK,KAAI;AAC1E,gBAAA,MAAM5C,YAAY,GAAGhH,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAK,CAAA,EAAAnD,aAAa,CAACM,MAAM,CAAIqO,CAAAA,EAAAA,WAAW,EAAE,CAAQ,CAAA;AAC1F;gBACA,IAAI5C,YAAY,IAAI2C,iBAAiB,EAAE;AACnC;kBACA,MAAME,QAAQ,GAAGhC,KAAK,CAACC,OAAO,CAACd,YAAY,CAAC,GAAGA,YAAY,CAACvB,GAAG,CAACC,CAAC,IAAIuB,MAAM,CAACvB,CAAC,CAAC,CAAC,GAAG,CAACuB,MAAM,CAACD,YAAY,CAAC,CAAC,CAAA;AACxG,kBAAA,IAAIa,KAAK,CAACC,OAAO,CAAC6B,iBAAiB,CAAC,EAAE;AAClC;AACA,oBAAA,KAAK,IAAI3D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6D,QAAQ,CAACjI,MAAM,EAAEoE,CAAC,EAAE,EAAE;sBACtC,MAAM8D,OAAO,GAAG7C,MAAM,CAAC4C,QAAQ,CAAC7D,CAAC,CAAC,CAAC,CAAA;sBACnC,KAAK,IAAI+D,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGJ,iBAAiB,CAAC/H,MAAM,GAAG;wBAC7C,MAAMoI,IAAI,GAAG/C,MAAM,CAAC0C,iBAAiB,CAACI,EAAE,CAAC,CAAC,CAAA;wBAC1C,IAAIC,IAAI,KAAKF,OAAO,EAAEL,OAAO,GAAG,IAAI,CAAC,KAChCM,EAAE,EAAE,CAAA;AACb,uBAAA;AACA,sBAAA,IAAIN,OAAO,EAAE,OAAA;AACjB,qBAAA;mBACH,MAAM,IAAII,QAAQ,CAAC9L,QAAQ,CAACkJ,MAAM,CAAC0C,iBAAiB,CAAC,CAAC,EAAE;oBACrD,OAAOF,OAAO,GAAG,IAAI,CAAA;AACzB,mBAAA;AACJ,iBAAC,MAAM,OAAA;eACV,CAAA;AAED,cAAA,IAAIF,QAAQ,EAAE;AACV3G,gBAAAA,OAAO,GAAG6B,SAAS,CAAC7B,OAAO,EAAE2G,QAAQ,CAAC,CAAA;AACtC;gBACA,MAAMU,KAAK,GAAGpC,KAAK,CAACC,OAAO,CAACqB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAGA,KAAK,CAAC,CAAC,CAAC,GAAGA,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AACjE,gBAAA,KAAK,MAAMe,QAAQ,IAAID,KAAK,IAAI,EAAE,EAAE;kBAChC,MAAMrB,GAAG,GAAG3B,MAAM,CAACiD,QAAQ,CAAC,CAACrB,KAAK,CAAC,GAAG,CAAC,CAAA;kBACvC,IAAID,GAAG,CAAC,CAAC,CAAC,CAAC7K,QAAQ,CAAC,GAAG,CAAC,EAAE;oBACtB,MAAMoM,IAAI,GAAGvB,GAAG,CAAC,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC,CAAA;oBAC9B,MAAMuB,GAAG,GAAGpK,eAAI,CAACuJ,QAAQ,EAAEY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,oBAAA,IAAIC,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;AAChC,sBAAA,IAAIvC,KAAK,CAACC,OAAO,CAACsC,GAAG,CAAC,EAAE;AACpB;AACA,wBAAA,KAAK,MAAMC,CAAC,IAAID,GAAG,EAAE;AACjBV,0BAAAA,UAAU,CAAC1J,eAAI,CAACqK,CAAC,EAAEF,IAAI,CAAC,CAAC,CAAC,CAAW,EAAEvB,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAA;AACvD,0BAAA,IAAIa,OAAO,EAAE,MAAA;AACjB,yBAAA;AACJ,uBAAC,MAAM;AACH;AACA,wBAAA,KAAK,MAAMlC,CAAC,IAAI6C,GAAG,EAAE;0BACjBV,UAAU,CAAC1J,eAAI,CAACoK,GAAG,EAAK,CAAA7C,EAAAA,CAAK,IAAA4C,IAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAW,EAAEvB,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAA;AACnE,0BAAA,IAAIa,OAAO,EAAE,MAAA;AACjB,yBAAA;AACJ,uBAAA;AACJ,qBAAA;AAEJ,mBAAC,MAAMC,UAAU,CAAC1J,eAAI,CAACuJ,QAAQ,EAAEX,GAAG,CAAC,CAAC,CAAC,CAAW,EAAEA,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAA;AAExE,iBAAA;AACJ,eAAA;AAEA,cAAA,IAAIa,OAAO,EAAE;gBACTrE,CAAC,CAACE,EAAE,GAAG,IAAI,CAAA;AACX;AACA;AACA,gBAAA,IAAI6D,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAACvI,IAAI,CAAC8E,CAAC,IAAIyD,KAAK,CAAC,CAAC,CAAC,CAACpL,QAAQ,CAAC2H,CAAC,CAAC,CAAC,EAAE;AAChF,kBAAA,MAAM4E,aAAa,GAAGjB,UAAU,GAAG,GAAG,GAAGF,KAAK,CAAC,CAAC,CAAC,CAACG,SAAS,CAAC,CAAA;kBAC5D,MAAMiB,WAAW,GAAGD,aAAa,CAACzB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C;kBACA,IAAI0B,WAAW,KAAKD,aAAa,EAAE;AAC/B;oBACA,MAAME,MAAM,GAAGF,aAAa,CAACzB,KAAK,CAAC,GAAG,CAAC,CAAC4B,KAAK,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC,CAAC7B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;AAE1E,oBAAA,KAAK,MAAM8B,KAAK,IAAIH,MAAM,EAAE;sBACxB,MAAMI,QAAQ,GAAG5K,eAAI,CAAC4C,OAAO,CAACpD,IAAI,EAAEmL,KAAK,CAAC,CAAA;AAC1C,sBAAA,IAAIC,QAAQ,EAAE5B,YAAY,GAAGrE,eAAI,CAACqE,YAAY,EAAE2B,KAAK,EAAEC,QAAQ,CAAC,CAAC,KAC5D;wBACD,KAAK,MAAMC,QAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE;AAC3C,0BAAA,MAAMC,aAAa,GAAG9K,eAAI,CAAC4C,OAAO,CAACpD,IAAI,EAAE,CAAGqL,EAAAA,QAAQ,CAAIF,CAAAA,EAAAA,KAAK,EAAE,CAAC,CAAA;AAChE,0BAAA,IAAIG,aAAa,EAAE9B,YAAY,GAAGrE,eAAI,CAACqE,YAAY,EAAE,CAAA,EAAG6B,QAAQ,CAAIF,CAAAA,EAAAA,KAAK,CAAE,CAAA,EAAEG,aAAa,CAAC,CAAA;AAC/F,yBAAA;AACJ,uBAAA;AACJ,qBAAA;mBACH,MAAM7B,SAAS,GAAG,KAAK,CAAA;iBAC3B,MAAMA,SAAS,GAAG,KAAK,CAAA;AAC5B,eAAA;AACJ,aAAA;WACH,CAAA;AAED,UAAA,WAAW,MAAME,KAAK,IAAIJ,SAAS,EAAE;YACjC,IAAIE,SAAS,EAAE,MAAMC,cAAc,CAACC,KAAK,CAAC,CAAC,KACtC,MAAA;AACT,WAAA;UACA,IAAIF,SAAS,EAAErG,OAAO,GAAG+B,eAAI,CAAC/B,OAAO,EAAE,MAAM,EAAEoG,YAAY,CAAC,CAAA;AAChE,SAAA;AAEA,QAAA,IAAA,CAAAF,GAAA,GAAI1D,CAAC,aAAD0D,GAAA,CAAGxD,EAAE,EAAE;AACP1C,UAAAA,OAAO,CAACxE,MAAM,CAACmK,aAAa,GAAG,IAAI,CAAA;AACnC3F,UAAAA,OAAO,CAACxE,MAAM,CAACoK,IAAI,GAAG,IAAI,CAAA;AAC1B,UAAA,OAAO5F,OAAO,CAAA;AAClB,SAAC,MAAM;UAEH,IAAItB,OAAO,YAAPA,OAAO,CAAEhF,GAAG,EAAED,OAAO,CAAC0O,KAAK,CAAC,0CAA0C,EAAE3F,CAAC,EAAExC,OAAO,CAACoI,IAAI,EAAEpI,OAAO,CAACyB,IAAI,CAAC,CAAA;AAC1G,UAAA,IAAI,EAAC/C,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEwD,OAAO,CAAE,EAAA,MAAM,IAAI1K,KAAK,CAAC,+CAA+C,GAAGwI,OAAO,CAACoI,IAAI,GAAG,IAAI,GAAGpI,OAAO,CAACyB,IAAI,GAAG,KAAK,GAAGzB,OAAO,CAAC6D,MAAM,CAAC,CAAC,KACjJ;AACD7D,YAAAA,OAAO,CAACxE,MAAM,CAAC6M,eAAe,GAAG;cAC7BD,IAAI,EAAEpI,OAAO,CAACoI,IAAI;cAClBvE,MAAM,EAAE7D,OAAO,CAAC6D,MAAM;cACtBpC,IAAI,EAAEzB,OAAO,CAACyB,IAAAA;aACjB,CAAA;AACD,YAAA,OAAOzB,OAAO,CAAA;AAClB,WAAA;AACJ,SAAA;AACJ,OAAA;AACJ,KAAA;GACH,CAAA;AACL,EAAC;MAEYsI,QAAQ,GAAGA,CAAI3F,oBAA8B,EAAEjE,OAAyB,KAAI;EACrF,OAAO,MAAOsB,OAAuB,IAA6B;IAC9D,MAAM3H,aAAa,GAAG2H,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAW,CAAA;AACjE,IAAA,MAAM0B,SAAS,GAAG9D,aAAa,CAAC8D,SAAS,IAAI,MAAM,CAAA;AACnD,IAAA,MAAMxD,MAAM,GAAGN,aAAa,CAACM,MAAM,IAAI,OAAO,CAAA;AAE9C,IAAA,MAAM4P,aAAa,GAAOnL,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,CAACW,SAAS,EAAExD,MAAM,CAAC,CAAC,IAAIyE,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,OAAO,CAAC,IAAI4B,eAAI,CAAC4C,OAAO,CAACxE,MAAM,CAACtC,UAAU,EAAEP,MAAM,CAAC,CAAA;AAC/I,IAAA,IAAG4P,aAAa,IAAA,IAAA,IAAbA,aAAa,CAAE1L,GAAG,EAAEmD,OAAO,CAACxE,MAAM,CAAC7C,MAAM,CAAC,GAAG4P,aAAa,CAAA;AAC7D,IAAA,MAAMtM,OAAO,GAAG,OAAOsM,aAAa,KAAK,QAAQ,GAAGA,aAAa,GAAGA,aAAa,IAAbA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,aAAa,CAAE1L,GAAG,CAAA;AACtF,IAAA,MAAM2L,QAAQ,GAAG,CAAC,EAAED,aAAa,KAAK,OAAOA,aAAa,KAAK,QAAQ,IAAI,CAAC,CAACtM,OAAO,CAAC,CAAC,CAAA;AACtF,IAAA,MAAMwM,YAAY,GAAGrL,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAEnD,aAAa,CAACoL,WAAW,IAAI,aAAa,CAAC,CAAA;IACrF,IAAI/E,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEhF,GAAG,EAAED,OAAO,CAACC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE8O,QAAQ,EAAE,SAAS,EAAEvM,OAAO,EAAE,cAAc,EAAE,CAAC,CAACwM,YAAY,EAAE,WAAW,EAAEtM,SAAS,EAAE,QAAQ,EAAExD,MAAM,EAAE,MAAM,EAAEqH,OAAO,CAACxE,MAAM,CAACW,SAAS,CAAC,EAAE,cAAc,EAAE6D,OAAO,CAACxE,MAAM,CAACkN,KAAK,EAAE,uBAAuB,EAAE/F,oBAAoB,CAAC,CAAA;AACtR;IACA,IAAIA,oBAAoB,KAAKT,OAAO,IAAKS,oBAAoB,IAAIA,oBAAoB,CAAC3C,OAAO,CAAC6D,MAAM,CAAC,KAAK3B,OAAQ,EAAE,OAAOsG,QAAQ,GAAGxI,OAAO,GAAG,MAAMmC,WAAW,CAACnC,OAAO,CAAC,CAAA;AAC1K,IAAA,MAAM2I,SAAS,GAAG,CAAC,CAAAjK,OAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEiK,SAAS,KAAI,EAAE,EAAExN,QAAQ,CAAC6E,OAAO,CAAC6D,MAAM,CAAC,KAAKzG,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,YAAY,CAAC,IAAI4B,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,CAACnD,aAAa,CAAC8D,SAAS,EAAE,YAAY,CAAC,CAAC,CAAQ,CAAA;AACrL;IACA,IAAI,CAACqM,QAAQ,IAAI,CAACC,YAAY,EAAEzI,OAAO,GAAI2I,SAAS,IAAIjK,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEoH,aAAa,GAAI,MAAM3D,WAAW,CAACnC,OAAO,CAAC,GAAG,MAAMqC,QAAQ,CAACrC,OAAO,CAAC,CAAA;IACtI,IAAI2C,oBAAoB,KAAKV,OAAO,IAAI,EAACvD,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAEoH,aAAa,CAAE,EAAA;AAC7D9F,MAAAA,OAAO,CAACxE,MAAM,CAACmK,aAAa,GAAG,CAAC,CAAC3F,OAAO,CAACxE,MAAM,CAAC7C,MAAM,CAAC,CAAA;AACvD,MAAA,OAAOqH,OAAO,CAAA;AAClB,KAAA;IACA,IAAI2I,SAAS,EAAE,OAAO3I,OAAO,CAAA;AAC7B,IAAA,IAAI,CAAC2C,oBAAoB,EAAE,OAAO3C,OAAO,CAAA;IACzC,OAAO,MAAMyF,SAAS,CAAC9C,oBAAoB,EAAEjE,OAAO,CAAC,CAACsB,OAAO,CAAC,CAAA;GACjE,CAAA;AACL,EAAC;MAEY4I,WAAW,GAAGA,CAAIC,OAAoB,EAAEnK,OAAyB,KAAI;EAC9E,OAAO,MAAOsB,OAAuB,IAA6B;IAC9D,MAAMnH,MAAM,GAAGmH,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAe,CAAA;AAC9D;AACA,IAAA,MAAMqO,QAAQ,GAAIjQ,MAAc,CAACsD,SAAS,IAAI,MAAM,CAAA;AACpD,IAAA,MAAM4M,SAAS,GAAIlQ,MAAc,CAACF,MAAM,IAAI,OAAO,CAAA;AACnD,IAAA,MAAM4P,aAAa,GAAGnL,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,CAACsN,QAAQ,EAAEC,SAAS,CAAC,CAAC,CAAA;IACjE,IAAI,CAACR,aAAa,EAAE;MAChB,MAAM5P,MAAM,GAAGyE,eAAI,CAAC4C,OAAO,EAAE,CAAC,MAAM,EAAE+I,SAAS,CAAC,CAAC,CAAA;AACjD,MAAA,IAAIpQ,MAAM,EAAEqH,OAAO,GAAG+B,eAAI,CAAC/B,OAAO,EAAE,CAAC8I,QAAQ,EAAEC,SAAS,CAAC,EAAEpQ,MAAM,CAAC,CAAA;AACtE,KAAA;AACA,IAAA,IAAIqH,OAAO,CAACoI,IAAI,KAAK,QAAQ,EAAE;MAC3B,MAAM;AAACvE,QAAAA,MAAAA;AAAO,OAAA,GAAG7D,OAAyD,CAAA;MAC1E,IAAI6I,OAAO,CAAChF,MAA2B,CAAC,IAAIgF,OAAO,CAAC,KAAK,CAAC,EAAE;AACxD,QAAA,OAAO,MAAMP,QAAQ,CAACO,OAAO,CAAChF,MAAM,CAAC,IAAIgF,OAAO,CAAC,KAAK,CAAC,EAAEnK,OAAO,CAAC,CAACsB,OAAO,CAAQ,CAAA;OACpF,MAAM,OAAOA,OAAO,CAAA;KACxB,MAAM,OAAOA,OAAO,CAAA;GACxB,CAAA;AACL;;AC3cagJ,MAAAA,UAAU,GAAGA,MAAK;EAC3B,OAAO,MAAOhJ,OAAW,IAAI;IAEzB,MAAM;AAAEiJ,MAAAA,GAAG,GAAG,EAAE;AAAEvI,MAAAA,MAAM,GAAG,EAAA;KAAI,GAAGV,OAAO,CAACpD,IAAI,CAAA;AAC9C;AACA,IAAA,IAAG,EAACqM,GAAG,IAAA,IAAA,IAAHA,GAAG,CAAEjK,MAAM,KAAI,EAAC0B,MAAM,YAANA,MAAM,CAAE1B,MAAM,CAAE,EAAA,MAAM,IAAIxH,KAAK,CAAC,4BAA4B,CAAC,CAAA;AAEjF;IACA,MAAM;MAAC6H,MAAM;MAAEqE,QAAQ;MAAE/K,MAAM;AAAEoE,MAAAA,IAAAA;KAAK,GAAGiD,OAAO,CAAC1F,GAAG,CAACG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1E,MAAMuK,UAAU,GAAGzF,wBAAa,CAAC;AAACC,MAAAA,SAAS,EAAEH,MAAAA;AAAO,KAAA,CAAC,CAAChC,GAAG,EAAE,CAAA;IAE3D,MAAM6L,cAAc,GAAGC,yBAAc,CAAC,CAAC,GAAGF,GAAG,EAAE,GAAGvI,MAAM,CAAC,CAAC,CAAA;AAE1D,IAAA,MAAM0I,OAAO,GAAG,MAAM3G,qBAAU,CAACrF,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAE,CAAC7C,MAAM,EAAEoE,IAAI,CAAC,CAAW,EAAE;MAC7E2C,QAAQ,EAAEtC,eAAI,CAAC4C,OAAO,CAACxE,MAAM,EAAEkI,QAAQ,CAAW;AAClDf,MAAAA,oBAAoB,EAAEuG,cAAc,CAACrG,GAAG,CAACC,CAAC,IAAG;QACzC,OAAO;AACH;AACAC,UAAAA,UAAU,EAAED,CAAC;AACbkC,UAAAA,UAAAA;SACH,CAAA;OACJ,CAAA;AACJ,KAAA,CAAC,CAAA;AAEF,IAAA,IAAG,EAACoE,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAE1G,EAAE,CAAE,EAAA,MAAM,IAAIlL,KAAK,CAAC,qEAAqE,CAAC,CAAA;AAEvG;AACA,IAAA,MAAM6R,SAAS,GAAGrJ,OAAO,CAACzE,EAAE,CAAA;IAC5B,MAAM9C,OAAO,GAAGuH,OAAO,CAACpD,IAAI,CAACnE,OAAO,IAAI,QAAQ,CAAA;IAChD,MAAMgJ,IAAI,GAAGzB,OAAO,CAACpD,IAAI,CAAC6E,IAAI,IAAI,MAAM,CAAA;IACxC,MAAM+C,OAAO,GAAG,MAAM,IAAIzE,QAAQ,CAACtH,OAAO,EAAEuH,OAAO,EAAE;AAAE1D,MAAAA,SAAS,EAAE,IAAA;AAAM,KAAA,CAAC,CAAC7B,GAAG,CAAC4O,SAAS,CAAC,CAAA;IAExF,MAAMC,OAAO,GAAGlK,oBAAS,CAAChC,eAAI,CAACoH,OAAO,EAAE/C,IAAI,CAAW,CAAC,CAAA;IACxD,MAAM;MAACnE,GAAG;MAAEuC,GAAG;MAAE0J,GAAG;MAAEC,GAAG;AAAEC,MAAAA,GAAAA;KAAI,GAAGH,OAAO,CAACxP,OAAO,CAAA;AAEjD,IAAA,IAAI8F,YAAY,GAAG,CAAC,GAAGC,GAAG,CAAC,CAAA;AAC3B,IAAA,IAAGa,MAAM,IAAA,IAAA,IAANA,MAAM,CAAE1B,MAAM,EAAEY,YAAY,GAAG8J,0BAAe,CAAChJ,MAAM,EAAEb,GAAG,CAAC,CAAA;AAC9D,IAAA,IAAGoJ,GAAG,IAAHA,IAAAA,IAAAA,GAAG,CAAEjK,MAAM,EAAEY,YAAY,GAAGuJ,yBAAc,CAAC,CAAC,GAAGtJ,GAAG,EAAE,GAAGoJ,GAAG,CAAC,CAAC,CAAA;AAG/D,IAAA,MAAMU,GAAG,GAAG,MAAMlK,oBAAS,CAAC;MACxBH,MAAM,EAAEC,wBAAa,CAAC;AAACC,QAAAA,SAAS,EAAEH,MAAAA;OAAO,CAAC;AAC1CK,MAAAA,QAAQ,EAAEpC,GAAG;AACbqC,MAAAA,iBAAiB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACpCiK,MAAAA,MAAM,EAAEH,GAAG;MACX,GAAGzJ,OAAO,CAACpD,IAAI;AACfgD,MAAAA,YAAAA;AACH,KAAA,CAAC,CAAA;AAEF,IAAA,MAAMiK,OAAO,GAAG7M,oBAAS,CAAC2M,GAAG,CAAC,CAAA;AAC9B,IAAA,MAAMG,OAAO,GAAG,MAAMxQ,uBAAY,CAACuQ,OAAO,CAAC,CAAA;IAC3C,IAAI,CAACC,OAAO,EAAE,MAAM,IAAItS,KAAK,CAAC,sCAAsC,CAAC,CAAA;AACrE,IAAA,MAAMuS,OAAO,GAAG,MAAM,IAAIhK,QAAQ,CAACtH,OAAO,EAAEuH,OAAO,CAAC,CAACF,KAAK,CAACuJ,SAAS,EAAE;AAAE,MAAA,CAAC5H,IAAI,GAAGoI,OAAAA;AAAS,KAAA,CAAC,CAAA;IAC1F7J,OAAO,CAAClE,MAAM,GAAG;MAAC6N,GAAG,EAAE3J,OAAO,CAACpD,IAAI;MAAEiN,OAAO;AAAErF,MAAAA,OAAO,EAAEuF,OAAAA;KAAQ,CAAA;AAC/D,IAAA,OAAO/J,OAAO,CAAA;GACjB,CAAA;AACL;;;;;;;;;;;;;;;;;;;;;;"}
|
package/lib/index.modern.js
CHANGED
|
@@ -803,7 +803,9 @@ const checkUcan = (requiredCapabilities, options) => {
|
|
|
803
803
|
};
|
|
804
804
|
if (existing) {
|
|
805
805
|
context = setExists(context, existing);
|
|
806
|
-
|
|
806
|
+
/**perform the check*/
|
|
807
|
+
const idArr = Array.isArray(lpass[2]) ? lpass[2] : lpass[0] || [];
|
|
808
|
+
for (const passPath of idArr || []) {
|
|
807
809
|
const spl = String(passPath).split('/');
|
|
808
810
|
if (spl[0].includes('*')) {
|
|
809
811
|
const spl2 = spl[0].split('*');
|
|
@@ -881,7 +883,7 @@ const ucanAuth = (requiredCapabilities, options) => {
|
|
|
881
883
|
const core_path = configuration.core_path || 'core';
|
|
882
884
|
const entity = configuration.entity || 'login';
|
|
883
885
|
const existingLogin = _get(context.params, [core_path, entity]) || _get(context.params, 'login') || _get(context.params.connection, entity);
|
|
884
|
-
if (existingLogin) context.params[entity] = existingLogin;
|
|
886
|
+
if (existingLogin != null && existingLogin._id) context.params[entity] = existingLogin;
|
|
885
887
|
const loginId = typeof existingLogin === 'string' ? existingLogin : existingLogin == null ? void 0 : existingLogin._id;
|
|
886
888
|
const hasLogin = !!(existingLogin && (typeof existingLogin === 'string' || !!loginId));
|
|
887
889
|
const existingUcan = _get(context.params, configuration.client_ucan || 'client_ucan');
|