{"version":3,"file":"ngx-typeschema-editor.mjs","sources":["../../../projects/typeschema-angular-editor/src/lib/export.service.ts","../../../projects/typeschema-angular-editor/src/lib/transformer/Internal.ts","../../../projects/typeschema-angular-editor/src/lib/transformer/TypeSchema.ts","../../../projects/typeschema-angular-editor/src/lib/transformer/JsonSchemaJson.ts","../../../projects/typeschema-angular-editor/src/lib/transformer/OpenAPIJson.ts","../../../projects/typeschema-angular-editor/src/lib/transformer/TypeAPI.ts","../../../projects/typeschema-angular-editor/src/lib/transformer/OpenAPIYaml.ts","../../../projects/typeschema-angular-editor/src/lib/transformer/JsonSchemaYaml.ts","../../../projects/typeschema-angular-editor/src/lib/transformer/RawJson.ts","../../../projects/typeschema-angular-editor/src/lib/transformer/RawYaml.ts","../../../projects/typeschema-angular-editor/src/lib/typehub.service.ts","../../../projects/typeschema-angular-editor/src/lib/bclayer.service.ts","../../../projects/typeschema-angular-editor/src/lib/resolver.service.ts","../../../projects/typeschema-angular-editor/src/lib/import.service.ts","../../../projects/typeschema-angular-editor/src/lib/editor/argument/argument.component.ts","../../../projects/typeschema-angular-editor/src/lib/editor/argument/argument.component.html","../../../projects/typeschema-angular-editor/src/lib/editor/link/link.component.ts","../../../projects/typeschema-angular-editor/src/lib/editor/link/link.component.html","../../../projects/typeschema-angular-editor/src/lib/editor/import/import.component.ts","../../../projects/typeschema-angular-editor/src/lib/editor/import/import.component.html","../../../projects/typeschema-angular-editor/src/lib/editor/throw/throw.component.ts","../../../projects/typeschema-angular-editor/src/lib/editor/throw/throw.component.html","../../../projects/typeschema-angular-editor/src/lib/editor/editor.component.ts","../../../projects/typeschema-angular-editor/src/lib/editor/editor.component.html","../../../projects/typeschema-angular-editor/src/lib/editor/guard/editor-confirm-save.guard.ts","../../../projects/typeschema-angular-editor/src/lib/typeschema-editor.module.ts","../../../projects/typeschema-angular-editor/src/public-api.ts","../../../projects/typeschema-angular-editor/src/ngx-typeschema-editor.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {Specification} from \"./model/Specification\";\nimport {Type} from \"./model/Type\";\nimport {Property} from \"./model/Property\";\nimport {Operation} from \"./model/Operation\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ExportService {\n\n  constructor() { }\n\n  transform(spec: Specification): object {\n    const schema: any = {};\n\n    if (spec.baseUrl !== undefined) {\n      schema.baseUrl = spec.baseUrl;\n    }\n\n    if (spec.security !== undefined) {\n      schema.security = spec.security;\n    }\n\n    if (spec.imports && Array.isArray(spec.imports) && spec.imports.length > 0) {\n      const imports: Record<string, string> = {};\n      spec.imports.forEach((include) => {\n        if (include.alias && include.url) {\n          imports[include.alias] = include.url;\n        }\n      });\n\n      schema['import'] = imports;\n    }\n\n    if (spec.operations && Array.isArray(spec.operations) && spec.operations.length > 0) {\n      const operations: any = {};\n      spec.operations.forEach((operation) => {\n        operations[operation.name] = this.transformOperation(operation);\n      });\n\n      schema.operations = operations;\n    }\n\n    if (spec.types && Array.isArray(spec.types) && spec.types.length > 0) {\n      const definitions: any = {};\n      spec.types.forEach((type) => {\n        if (type.type === 'map') {\n          definitions[type.name] = this.transformMap(type);\n        } else {\n          definitions[type.name] = this.transformStruct(type);\n        }\n      });\n\n      schema.definitions = definitions;\n    }\n\n    if (spec.root !== undefined && spec.types[spec.root]) {\n      schema['root'] = spec.types[spec.root].name;\n    }\n\n    return schema;\n  }\n\n  private transformOperation(operation: Operation): object {\n    const result: any = {};\n\n    if (this.isset(operation.description)) {\n      result.description = operation.description;\n    }\n\n    if (this.isset(operation.httpMethod)) {\n      result.method = operation.httpMethod;\n    }\n\n    if (this.isset(operation.httpPath)) {\n      result.path = operation.httpPath;\n    }\n\n    const args: Record<string, any> = {};\n    if (this.isset(operation.arguments) && Array.isArray(operation.arguments)) {\n      operation.arguments.forEach((argument) => {\n        if (argument.in === 'path') {\n          const schema = this.resolveType(argument.type);\n          if (schema === null) {\n            return;\n          }\n\n          args[argument.name] = {\n            in: 'path',\n            schema: schema,\n          };\n        }\n      });\n    }\n\n    if (this.isset(operation.payload) && operation.payload) {\n      const payload: any = {\n        in: 'body',\n      };\n\n      if (operation.payloadShape === 'mime') {\n        payload.contentType = operation.payload;\n      } else {\n        payload.schema = this.getSchemaForShape(operation.payload, operation.payloadShape);\n      }\n\n      args['payload'] = payload;\n    }\n\n    if (this.isset(operation.arguments) && Array.isArray(operation.arguments) && operation.arguments.length > 0) {\n      operation.arguments.forEach((argument) => {\n        if (argument.in === 'query' || argument.in === 'header') {\n          const schema = this.resolveType(argument.type);\n          if (schema === null) {\n            return;\n          }\n\n          args[argument.name] = {\n            in: argument.in,\n            schema: schema,\n          };\n        }\n      });\n    }\n\n    if (Object.entries(args).length > 0) {\n      result.arguments = args;\n    }\n\n    if (this.isset(operation.throws) && Array.isArray(operation.throws) && operation.throws.length > 0) {\n      const throws: Array<any> = [];\n      operation.throws.forEach((throw_) => {\n        const ret: any = {\n          code: throw_.code,\n        };\n\n        if (throw_.typeShape === 'mime') {\n          ret.contentType = throw_.type;\n        } else {\n          ret.schema = this.getSchemaForShape(throw_.type, throw_.typeShape);\n        }\n\n        throws.push(ret);\n      });\n      result.throws = throws;\n    }\n\n    let httpCode = 200;\n    if (this.isset(operation.httpCode)) {\n      httpCode = operation.httpCode;\n    }\n\n    if (this.isset(operation.return) && httpCode !== 204) {\n      const ret: any = {};\n      ret.code = httpCode;\n      if (operation.returnShape === 'mime') {\n        ret.contentType = operation.return;\n      } else {\n        ret.schema = this.getSchemaForShape(operation.return, operation.returnShape);\n      }\n      result.return = ret;\n    }\n\n    return result;\n  }\n\n  private getSchemaForShape(type: string, shape?: string)\n  {\n    if (shape === 'map') {\n      return {\n        type: 'map',\n        schema: {\n          type: 'reference',\n          target: type\n        }\n      };\n    } else if (shape === 'array') {\n      return {\n        type: 'array',\n        schema: {\n          type: 'reference',\n          target: type\n        }\n      };\n    } else {\n      return {\n        type: 'reference',\n        target: type\n      };\n    }\n  }\n\n  private transformStruct(type: Type): object {\n    const result: Record<string, any> = {};\n\n    if (this.isset(type.description)) {\n      result['description'] = type.description;\n    }\n\n    if (this.isset(type.deprecated)) {\n      result['deprecated'] = type.deprecated;\n    }\n\n    result['type'] = 'struct';\n\n    if (this.isset(type.parent)) {\n      const parent: Record<string, any> = {};\n      parent['type'] = 'reference';\n      parent['target'] = type.parent;\n\n      if (this.isset(type.template) && type.template && Object.keys(type.template).length > 0) {\n        parent['template'] = type.template;\n      }\n\n      result['parent'] = parent;\n    }\n\n    if (this.isset(type.base)) {\n      result['base'] = type.base;\n    }\n\n    if (type.properties && type.properties.length > 0) {\n      const props: any = {};\n      type.properties.forEach((property) => {\n        props[property.name] = this.generateProperty(property);\n      })\n      result['properties'] = props;\n    }\n\n    if (this.isset(type.discriminator)) {\n      result['discriminator'] = type.discriminator;\n    }\n\n    if (this.isset(type.mapping) && type.mapping && Object.keys(type.mapping).length > 0) {\n      result['mapping'] = type.mapping;\n    }\n\n    return result;\n  }\n\n  private transformMap(type: Type): object {\n    const result: Record<string, any> = {};\n\n    if (this.isset(type.description)) {\n      result['description'] = type.description;\n    }\n\n    if (this.isset(type.deprecated)) {\n      result['deprecated'] = type.deprecated;\n    }\n\n    result['type'] = 'map';\n\n    if (this.isset(type.reference)) {\n      result['schema'] = this.resolveType(type.reference);\n    }\n\n    return result;\n  }\n\n  private generateProperty(property: Property): object {\n    const result: Record<string, any> = {};\n\n    if (this.isset(property.description)) {\n      result['description'] = property.description;\n    }\n\n    if (this.isset(property.deprecated)) {\n      result['deprecated'] = property.deprecated;\n    }\n\n    const reference = property.reference;\n    const generic = property.generic;\n    if (property.type === 'reference' || property.type === 'object') {\n      result['type'] = 'reference';\n      result['target'] = property.reference;\n\n      if (this.isset(property.template) && property.template && Object.keys(property.template).length > 0) {\n        result['template'] = property.template;\n      }\n    } else if (property.type === 'map' && reference) {\n      result['type'] = 'map';\n      result['schema'] = this.resolveType(reference, generic);\n    } else if (property.type === 'array' && reference) {\n      result['type'] = 'array';\n      result['schema'] = this.resolveType(reference, generic);\n    } else if (property.type === 'string') {\n      result['type'] = 'string';\n      if (this.isset(property.format)) {\n        result['format'] = property.format;\n      }\n    } else if (property.type === 'integer') {\n      result['type'] = 'integer';\n    } else if (property.type === 'number') {\n      result['type'] = 'number';\n    } else if (property.type === 'boolean') {\n      result['type'] = 'boolean';\n    } else if (property.type === 'any') {\n      result['type'] = 'any';\n    } else if (property.type === 'generic') {\n      result['type'] = 'generic';\n      result['name'] = property.generic;\n    }\n\n    return result;\n  }\n\n  private resolveType(reference?: string, generic?: string): object|null {\n    if (!reference) {\n      return null;\n    }\n\n    if (['string', 'integer', 'number', 'boolean', 'any'].includes(reference)) {\n      return {\n        type: reference\n      };\n    } else if (reference === 'generic') {\n      return {\n        type: 'generic',\n        name: generic\n      };\n    } else {\n      return {\n        type: 'reference',\n        target: reference\n      };\n    }\n  }\n\n  private isset(value: any): boolean {\n    return typeof value !== 'undefined' && value !== null;\n  }\n}\n","import {TransformerInterface} from \"./TransformerInterface\";\nimport {Specification} from \"../model/Specification\";\nimport {BCLayerService} from \"../bclayer.service\";\n\nexport class Internal implements TransformerInterface {\n\n  public constructor(private bcLayerService: BCLayerService) {\n  }\n\n  async transform(schema: string): Promise<Specification> {\n    let spec = JSON.parse(schema) as Specification;\n\n    spec = this.bcLayerService.transform(spec);\n\n    return spec;\n  }\n\n}\n","import {Specification} from \"../model/Specification\";\nimport {TypeHubService} from \"../typehub.service\";\nimport {Include} from \"../model/Include\";\nimport {Type} from \"../model/Type\";\nimport {Property} from \"../model/Property\";\nimport {pascalCase} from \"pascal-case\";\nimport {TransformerInterface} from \"./TransformerInterface\";\nimport {ResolverService} from \"../resolver.service\";\n\nexport class TypeSchema implements TransformerInterface {\n\n  anonymousObjects: Record<string, any> = {};\n\n  protected scalarTypes = ['string', 'integer', 'number', 'boolean', 'any'];\n\n  constructor(protected typeHubService: TypeHubService, protected resolverService: ResolverService) {\n  }\n\n  async transform(schema: string): Promise<Specification> {\n    return this.build(JSON.parse(schema));\n  }\n\n  protected async build(data: Record<string, any>) {\n    this.anonymousObjects = {};\n\n    const typeNames: Array<string> = [];\n    const spec: Specification = {\n      imports: [],\n      operations: [],\n      types: []\n    };\n\n    const rawImport = this.get(data, ['import', '$import']);\n    if (typeof rawImport === 'object') {\n      for (const [key, value] of Object.entries(rawImport)) {\n        const include = await this.transformImport(key, value);\n        if (include) {\n          spec.imports.push(include);\n        }\n      }\n    }\n\n    const definitions = this.get(data, ['definitions', '$defs']);\n    if (typeof definitions === 'object') {\n      for (const [key, value] of Object.entries(definitions)) {\n        try {\n          spec.types.push(await this.transformType(key, value as Record<string, any>));\n          typeNames.push(key);\n        } catch (error) {\n        }\n      }\n    }\n\n    if (this.isset(data['components']) && this.isset(data['components']['schemas']) && typeof data['components']['schemas'] === 'object') {\n      for (const [key, value] of Object.entries(data['components']['schemas'])) {\n        try {\n          spec.types.push(await this.transformType(key, value as Record<string, any>));\n          typeNames.push(key);\n        } catch (error) {\n        }\n      }\n    }\n\n    for (const [key, value] of Object.entries(this.anonymousObjects)) {\n      try {\n        spec.types.push(await this.transformType(key, value));\n        typeNames.push(key);\n      } catch (error) {\n      }\n    }\n\n    if (this.isset(data['properties']) && typeof data['properties'] === 'object') {\n      // it looks like we have a root data we try to convert\n      let key = 'Root';\n      if (this.isset(data['title']) && typeof data['title'] === 'string') {\n        key = pascalCase(data['title']);\n      }\n\n      spec.types.push(await this.transformType(key, {\n        description: data['description'],\n        type: 'object',\n        properties: data['properties'],\n      }));\n      typeNames.push(key);\n      spec.root = spec.types.length - 1;\n    }\n\n    const root = this.get(data, ['root', '$ref']);\n    if (root === 'string') {\n      const index = typeNames.indexOf(root);\n      if (index !== -1) {\n        spec.root = index;\n      }\n    }\n\n    return spec;\n  }\n\n  private async transformImport(alias: string, url: any): Promise<Include|undefined> {\n    if (typeof url !== 'string') {\n      return;\n    }\n\n    let include: Include = {\n      alias: alias,\n      url: url,\n    };\n\n    include.types = await this.resolverService.resolveIncludeTypes(include);\n\n    return include;\n  }\n\n  protected async transformType(name: string, data: Record<string, any>): Promise<Type> {\n    let type: Type;\n\n    if (this.isset(data['$ref'])) {\n      data['type'] = 'reference';\n      data['target'] = data['$ref'];\n    } else if (this.isset(data['additionalProperties'])) {\n      data['type'] = 'map';\n      data['schema'] = data['additionalProperties'];\n    } else if (this.isset(data['items'])) {\n      data['type'] = 'array';\n      data['schema'] = data['items'];\n    }\n\n    if (this.isset(data['$extends'])) {\n      data['extends'] = {\n        type: 'reference',\n        target: data['$extends'],\n      }\n    }\n\n    if (this.isset(data['$template'])) {\n      data['template'] = data['$template'];\n    }\n\n    const typeName = data['type'];\n    if (typeName === 'reference') {\n      type = {\n        type: 'reference',\n        name: name,\n        description: data['description'] && typeof data['description'] === 'string' ? data['description'] : '',\n        reference: data['target']\n      };\n\n      if (this.isset(data['template'])) {\n        type.template = data['template'];\n      }\n    } else if (typeName === 'map' || typeName === 'array') {\n      type = {\n        type: typeName,\n        name: name,\n        description: data['description'] && typeof data['description'] === 'string' ? data['description'] : '',\n        reference: this.parseRef(data['schema'])\n      };\n    } else {\n      if (typeName && this.scalarTypes.includes(typeName)) {\n        throw new Error('Can not create scalar object');\n      }\n\n      type = {\n        type: 'struct',\n        name: name,\n        description: data['description'] && typeof data['description'] === 'string' ? data['description'] : '',\n      };\n\n      if (this.isset(data['extends']) && this.isset(data['extends'].target) && typeof data['extends'].target === 'string') {\n        type.parent = data['extends'].target;\n      }\n\n      if (this.isset(data['properties']) && typeof data['properties'] === 'object') {\n        type.properties = [];\n        for (const [key, value] of Object.entries(data['properties'])) {\n          try {\n            type.properties.push(await this.transformProperty(key, value as Record<string, any>));\n          } catch (error) {\n          }\n        }\n      }\n    }\n\n    return type;\n  }\n\n  private async transformProperty(name: string, data: Record<string, any>): Promise<Property> {\n    if (this.isset(data['$ref'])) {\n      data['type'] = 'reference';\n      data['target'] = data['$ref'];\n    } else if (this.isset(data['additionalProperties'])) {\n      data['type'] = 'map';\n      data['schema'] = data['additionalProperties'];\n    } else if (this.isset(data['items'])) {\n      data['type'] = 'array';\n      data['schema'] = data['items'];\n    }\n\n    const typeName = data['type'];\n\n    let type;\n    let ref: string|undefined;\n    let format;\n    if (this.isset(data['properties'])) {\n      // in this case we have a nested object which is not supported at TypeAPI we automatically create an anonymous\n      // object and use a reference\n      const hash = await this.hash(JSON.stringify(data));\n      const anonymousName = 'Object' + hash.substring(0, 8);\n      this.anonymousObjects[anonymousName] = data;\n\n      type = 'object';\n      ref = anonymousName;\n    } else if (typeName === 'map' || typeName === 'array') {\n      type = typeName;\n      ref = this.parseRef(data['additionalProperties']);\n    } else if (typeName === 'reference') {\n      type = 'object';\n      ref = data['target'];\n    } else if (typeName === 'string') {\n      type = 'string';\n      if (this.isset(data['format'])) {\n        format = data['format'];\n      }\n    } else if (typeName === 'integer') {\n      type = 'integer';\n    } else if (typeName === 'number') {\n      type = 'number';\n    } else if (typeName === 'boolean') {\n      type = 'boolean';\n    } else if (typeName === 'any') {\n      type = 'any';\n    } else {\n      throw new Error('Could not resolve type: ' + JSON.stringify(data));\n    }\n\n    const property: Property = {\n      name: name,\n      description: data['description'] && typeof data['description'] === 'string' ? data['description'] : '',\n      type: type,\n    };\n\n    if (this.isset(data['deprecated']) && typeof data['deprecated'] === 'boolean') {\n      property.deprecated = data['deprecated'];\n    }\n\n    if (this.isset(format) && typeof format === 'string') {\n      property.format = format;\n    }\n\n    if (ref) {\n      property.reference = ref;\n    }\n\n    return property;\n  }\n\n  protected parseRef(data: any): string {\n    if (this.isset(data.target) && typeof data.target === 'string') {\n      return data.target;\n    } else if (this.isset(data.$ref) && typeof data.$ref === 'string') {\n      return this.normalizeRef(data.$ref);\n    } else if (this.isset(data.$generic)) {\n      return 'T';\n    } else if (this.scalarTypes.includes(data.type)) {\n      return data.type;\n    } else if (data.type === 'array') {\n      // at the moment we can not handle array inside maps but we simply return the array type\n      return this.parseRef(data.items);\n    } else {\n      throw new Error('Could not resolve ref: ' + JSON.stringify(data));\n    }\n  }\n\n  protected isset(value: any): boolean {\n    return typeof value !== 'undefined' && value !== null;\n  }\n\n  protected get(object: any, keys: Array<string>): any {\n    for (const key of keys) {\n      if (this.isset(object[key])) {\n        return object[key];\n      }\n    }\n\n    return undefined;\n  }\n\n  protected normalizeRef(ref: string): string {\n    return ref\n      .replace('#/definitions/', '')\n      .replace('#/$defs/', '');\n  }\n\n  protected async hash(data: string): Promise<string> {\n    const buffer = await crypto.subtle.digest('SHA-1', new TextEncoder().encode(data));\n    return Array.from(new Uint8Array(buffer))\n      .map((bytes) => bytes.toString(16).padStart(2, '0'))\n      .join('');\n  }\n\n}\n","import {TypeSchema} from \"./TypeSchema\";\n\nexport class JsonSchemaJson extends TypeSchema {\n\n}\n","import {Specification} from \"../model/Specification\";\nimport {JsonSchemaJson} from \"./JsonSchemaJson\";\nimport {Operation} from \"../model/Operation\";\nimport {pascalCase} from \"pascal-case\";\nimport {Throw} from \"../model/Throw\";\nimport {Argument} from \"../model/Argument\";\n\nexport class OpenAPIJson extends JsonSchemaJson {\n\n  data: Record<string, any> = {};\n  inlineObjects: Record<string, any> = {};\n\n  override async transform(schema: string): Promise<Specification> {\n    this.data = JSON.parse(schema) as Record<string, any>;\n    const spec = await this.build(this.data);\n\n    this.inlineObjects = {};\n\n    if (this.isset(this.data['paths']) && typeof this.data['paths'] === 'object') {\n      for (const [path, value] of Object.entries(this.data['paths'])) {\n        if (value !== null && typeof value === 'object') {\n          const operations = await this.transformPath(path, value);\n          operations.forEach((operation) => {\n            spec.operations.push(operation);\n          });\n        }\n      }\n    }\n\n    for (const [key, value] of Object.entries(this.inlineObjects)) {\n      try {\n        spec.types.push(await this.transformType(key, value));\n      } catch (error) {\n      }\n    }\n\n    return spec;\n  }\n\n  private async transformPath(path: string, method: object): Promise<Array<Operation>> {\n    const operations: Array<Operation> = [];\n\n    for (const [methodName, value] of Object.entries(method)) {\n      let name = '';\n      if (this.isset(value.operationId) && typeof value.operationId === 'string') {\n        name = value.operationId.replace('/', '.');\n      } else {\n        name = pascalCase(path.substring(1).replace('/', '.') + '.' + methodName);\n      }\n\n      let description = '';\n      if (this.isset(value.summary) && typeof value.summary === 'string') {\n        description = value.summary;\n      } else if (this.isset(value.description) && typeof value.description === 'string') {\n        description = value.description;\n      }\n\n      let args: Array<Argument> = [];\n      if (this.isset(value.parameters) && Array.isArray(value.parameters)) {\n        value.parameters.forEach((parameter: Record<string, any>) => {\n          try {\n            args.push(this.parseArgument(parameter));\n          } catch (error) {\n          }\n        });\n      }\n\n      let payload: string|undefined = undefined;\n      if (this.isset(value.requestBody) && typeof value.requestBody === 'object') {\n        payload = await this.parsePayload(value.requestBody);\n      }\n\n      let httpCode = 200;\n      let result = '';\n      let throws: Array<Throw> = [];\n      if (this.isset(value.responses) && typeof value.responses === 'object') {\n        for (const [code, resp] of Object.entries(value.responses)) {\n          if (resp === null || typeof resp !== 'object') {\n            continue;\n          }\n\n          try {\n            let responseCode = parseInt(code);\n            if (responseCode >= 200 && responseCode < 300) {\n              httpCode = responseCode;\n              result = await this.parseResponseRef(resp);\n            } else if (responseCode >= 400 && responseCode < 600) {\n              throws.push({\n                code: responseCode,\n                type: await this.parseResponseRef(resp),\n              })\n            }\n          } catch (error) {\n          }\n        }\n      }\n\n      let tags: Array<string> = [];\n      if (this.isset(value.tags) && Array.isArray(value.tags)) {\n        tags = value.tags;\n      }\n\n      operations.push({\n        name: name,\n        description: description,\n        httpMethod: methodName.toUpperCase(),\n        httpPath: path,\n        httpCode: httpCode,\n        arguments: args,\n        payload: payload,\n        payloadShape: undefined,\n        throws: throws,\n        return: result,\n        returnShape: undefined,\n        tags: tags\n      });\n    }\n\n    return operations;\n  }\n\n  private async parsePayload(requestBody: object) {\n    const payload = await this.parseResponseRef(requestBody);\n    if (payload) {\n      return payload;\n    } else {\n      return;\n    }\n  }\n\n  private parseArgument(parameter: Record<string, any>): Argument {\n    if (this.isset(parameter['$ref']) && typeof parameter['$ref'] === 'string') {\n      const resolved = this.resolve(parameter['$ref']);\n      if (!resolved) {\n        throw new Error('Could not resolve ref');\n      }\n      parameter = resolved;\n    }\n\n    let type = '';\n    if (this.isset(parameter['schema']) && typeof parameter['schema'] === 'object') {\n      type = this.parseArgumentSchema(parameter['schema']);\n    }\n\n    if (type && (parameter['in'] === 'path' || parameter['in'] === 'query')) {\n      return {\n        name: parameter['name'],\n        in: parameter['in'],\n        type: type,\n      };\n    } else {\n      throw new Error('Provided an invalid argument');\n    }\n  }\n\n  private parseArgumentSchema(schema: Record<string, any>): string {\n    if (this.isset(schema['$ref']) && typeof schema['$ref'] === 'string') {\n      const resolved = this.resolve(schema['$ref']);\n      if (this.isset(resolved['type']) && typeof resolved['type'] === 'string' && this.scalarTypes.includes(resolved['type'])) {\n        return resolved['type'];\n      }\n    }\n\n    if (this.isset(schema['$ref']) && typeof schema['$ref'] === 'string') {\n      return this.normalizeRef(schema['$ref']);\n    } else if (this.isset(schema['type']) && typeof schema['type'] === 'string') {\n      return schema['type'];\n    } else {\n      return '';\n    }\n  }\n\n  private async parseResponseRef(response: Record<string, any>): Promise<string> {\n    if (this.isset(response['$ref']) && typeof response['$ref'] === 'string') {\n      response = this.resolve(response['$ref']);\n    }\n\n    let schema = this.extractSchema(response);\n    if (!schema) {\n      return '';\n    }\n\n    let ref = schema['$ref'];\n    if (typeof ref === 'string') {\n      return this.normalizeRef(ref);\n    } else {\n      const hash = await this.hash(JSON.stringify(schema));\n      const anonymousName = 'Object' + hash.substring(0, 8);\n      this.inlineObjects[anonymousName] = schema;\n\n      return anonymousName;\n    }\n  }\n\n  private extractSchema(response: Record<string, any>): Record<string, any>|undefined {\n    if (this.isset(response['content']) && typeof response['content'] === 'object') {\n      if (this.isset(response['content']['application/json']) && typeof response['content']['application/json'] === 'object') {\n        if (this.isset(response['content']['application/json']['schema']) && typeof response['content']['application/json']['schema'] === 'object') {\n          return response['content']['application/json']['schema'];\n        }\n      }\n    }\n    return;\n  }\n\n  private resolve(ref: string): Record<string, any> {\n    if (!ref.startsWith('#/')) {\n      throw new Error('Can only resolve local refs');\n    }\n\n    ref = ref.substring(2);\n\n    let data = this.data;\n    ref.split('/').forEach((name) => {\n      if (this.isset(data[name])) {\n        data = data[name];\n      } else {\n        throw new Error('Could not resolve ' + name);\n      }\n    })\n\n    return data;\n  }\n\n  protected override normalizeRef(ref: string): string {\n    return ref\n      .replace('#/components/schemas/', '');\n  }\n\n}\n","import {Specification} from \"../model/Specification\";\nimport {TypeSchema} from \"./TypeSchema\";\nimport {Operation} from \"../model/Operation\";\nimport {Argument} from \"../model/Argument\";\nimport {Throw} from \"../model/Throw\";\nimport {TypeHubService} from \"../typehub.service\";\nimport {TypeAPI as TypeAPISpec} from \"typeapi-model\";\nimport {Operation as TypeAPIOperation} from \"typeapi-model\";\nimport {ResolverService} from \"../resolver.service\";\n\nexport class TypeAPI extends TypeSchema {\n\n  constructor(typeHubService: TypeHubService, resolverService: ResolverService) {\n    super(typeHubService, resolverService);\n  }\n\n  override async transform(schema: string): Promise<Specification> {\n    const data = JSON.parse(schema) as TypeAPISpec;\n    const spec = await this.build(data);\n\n    if (this.isset(data.operations) && typeof data.operations === 'object') {\n      for (const [key, value] of Object.entries(data.operations)) {\n        spec.operations.push(this.transformOperation(key, value));\n      }\n    }\n\n    return spec;\n  }\n\n  private transformOperation(name: string, data: TypeAPIOperation): Operation {\n    let operation: Operation = {\n      name: name,\n      description: data.description && typeof data.description === 'string' ? data.description : '',\n      httpMethod: data.method && typeof data.method === 'string' ? data.method.toUpperCase() : 'GET',\n      httpPath: data.path && typeof data.path === 'string' ? data.path : '/',\n      httpCode: data.return && data.return.code && typeof data.return.code === 'number' ? data.return.code : 200,\n      arguments: [],\n      payload: '',\n      payloadShape: undefined,\n      throws: [],\n      return: '',\n      returnShape: undefined,\n    };\n\n    if (data.arguments) {\n      for (const [key, value] of Object.entries(data.arguments)) {\n        if (value.in === 'body') {\n          if (value.contentType) {\n            operation.payload = value.contentType;\n            operation.payloadShape = 'mime';\n          } else if (value.schema) {\n            operation.payload = this.parseRef(value.schema);\n            operation.payloadShape = this.parseShape(value.schema);\n          }\n        } else {\n          operation.arguments.push(this.transformArgument(key, value));\n        }\n      }\n    }\n\n    if (data.throws) {\n      for (const [key, value] of Object.entries(data.throws)) {\n        operation.throws.push(this.transformThrow(key, value));\n      }\n    }\n\n    if (data.return) {\n      if (data.return.contentType) {\n        operation.return = data.return.contentType;\n        operation.returnShape = 'mime';\n      } else if (data.return.schema) {\n        operation.return = this.parseRef(data.return.schema);\n        operation.returnShape = this.parseShape(data.return.schema);\n      }\n    }\n\n    if (data.stability && typeof data.stability === 'number') {\n      if (data.stability === 0 || data.stability === 1 || data.stability === 2 || data.stability === 3) {\n        operation.stability = data.stability;\n      }\n    }\n\n    if (data.security && Array.isArray(data.security)) {\n      operation.security = data.security;\n    }\n\n    if (data.authorization && typeof data.authorization === 'boolean') {\n      operation.authorization = data.authorization;\n    }\n\n    return operation;\n  }\n\n  private transformArgument(name: string, data: any): Argument {\n    return {\n      name: name,\n      in: data.in && typeof data.in === 'string' ? data.in : 'query',\n      type: this.parseRef(data.schema),\n    };\n  }\n\n  private transformThrow(name: string, data: any): Throw {\n    return {\n      code: data.code && typeof data.code === 'number' ? data.code : 500,\n      type: this.parseRef(data.schema),\n    };\n  }\n\n  private parseShape(data: any): string|undefined {\n    const typeName = data.type;\n    if (this.isset(data.type) && (typeName === 'map' || (data.type === 'object' && this.isset(data.additionalProperties)))) {\n      return 'map';\n    } else if (this.isset(data.type) && (typeName === 'array' || (data.type === 'array' && this.isset(data.items)))) {\n      return 'array';\n    } else {\n      return;\n    }\n  }\n\n}\n","import {Specification} from \"../model/Specification\";\nimport {OpenAPIJson} from \"./OpenAPIJson\";\nimport {parse} from \"yaml\";\n\nexport class OpenAPIYaml extends OpenAPIJson {\n\n  override async transform(schema: string): Promise<Specification> {\n    return super.transform(JSON.stringify(parse(schema)));\n  }\n\n}\n","import {Specification} from \"../model/Specification\";\nimport {JsonSchemaJson} from \"./JsonSchemaJson\";\nimport {parse} from 'yaml'\n\nexport class JsonSchemaYaml extends JsonSchemaJson {\n\n  override async transform(schema: string): Promise<Specification> {\n    return super.transform(JSON.stringify(parse(schema)));\n  }\n\n}\n","import {Specification} from \"../model/Specification\";\nimport {TypeHubService} from \"../typehub.service\";\nimport {Include} from \"../model/Include\";\nimport {Type} from \"../model/Type\";\nimport {Property} from \"../model/Property\";\nimport {pascalCase} from \"pascal-case\";\nimport {TransformerInterface} from \"./TransformerInterface\";\n\nexport class RawJson implements TransformerInterface {\n\n  nestedObjects: Array<Type> = [];\n\n  constructor(protected typeHubService: TypeHubService) {\n  }\n\n  async transform(schema: string): Promise<Specification> {\n    return this.build(JSON.parse(schema));\n  }\n\n  protected async build(data: Record<string, any>) {\n    this.nestedObjects = [];\n\n    const spec: Specification = {\n      imports: [],\n      operations: [],\n      types: []\n    };\n\n    const root: Type = {\n      type: 'object',\n      name: await this.buildName(data),\n      description: '',\n      properties: [],\n    };\n\n    for (const [key, value] of Object.entries(data)) {\n      const property = await this.transformValue(key, value);\n      if (property !== null) {\n        root.properties?.push(property);\n      }\n    }\n\n    spec.types.push(root);\n\n    for (const [key, value] of Object.entries(this.nestedObjects)) {\n      spec.types.push(value);\n    }\n\n    return spec;\n  }\n\n  private async transformValue(name: string, data: any): Promise<Property|null> {\n    if (data === null || data === undefined) {\n      return null;\n    }\n\n    if (typeof data === 'string') {\n      const isDate = new RegExp(/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/, \"i\");\n      const isDateTime = new RegExp(/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z?$/, \"i\");\n      const isTime = new RegExp(/^[0-9]{2}:[0-9]{2}:[0-9]{2}$/, \"i\");\n\n      let format = null;\n      if (isDate.test(data)) {\n        format = 'date';\n      } else if (isDateTime.test(data)) {\n        format = 'date-time';\n      } else if (isTime.test(data)) {\n        format = 'time';\n      }\n\n      const property: Property = {\n        name: name,\n        description: '',\n        type: 'string',\n      };\n\n      if (format !== null) {\n        property.format = format;\n      }\n\n      return property;\n    } else if (typeof data === 'number') {\n      if (Number.isInteger(data)) {\n        return {\n          name: name,\n          description: '',\n          type: 'integer',\n        };\n      } else {\n        return {\n          name: name,\n          description: '',\n          type: 'number',\n        };\n      }\n    } else if (typeof data === 'boolean') {\n      return {\n        name: name,\n        description: '',\n        type: 'boolean',\n      };\n    } else if (Array.isArray(data)) {\n      const firstValue = data[0] || null;\n      const property = await this.transformValue('', firstValue);\n\n      let ref = '';\n      if (property?.reference) {\n        ref = property?.reference || '';\n      } else if (property?.type) {\n        ref = property?.type;\n      }\n\n      return {\n        name: name,\n        description: '',\n        type: 'array',\n        reference: ref\n      };\n    } else if (typeof data === 'object') {\n      const typeName = await this.buildName(data);\n      const type: Type = {\n        type: 'object',\n        name: typeName,\n        description: '',\n        properties: [],\n      };\n\n      for (const [key, value] of Object.entries(data)) {\n        const property = await this.transformValue(key, value);\n        if (property !== null) {\n          type.properties?.push(property);\n        }\n      }\n\n      this.nestedObjects.push(type);\n\n      return {\n        name: name,\n        description: '',\n        type: 'object',\n        reference: typeName\n      };\n    } else {\n      return null;\n    }\n  }\n\n  private async buildName(data: any): Promise<string> {\n    const hash = await this.hash(JSON.stringify(data));\n    return 'Type' + hash.substring(0, 8);\n  }\n\n  protected hash(data: string): string {\n    let hash = 0;\n    for (let i = 0; i < data.length; i++) {\n      let char = data.charCodeAt(i);\n      hash += char;\n    }\n\n    return '' + hash;\n  }\n\n}\n","import {RawJson} from \"./RawJson\";\nimport {Specification} from \"../model/Specification\";\nimport {parse} from \"yaml\";\n\nexport class RawYaml extends RawJson {\n\n  override async transform(schema: string): Promise<Specification> {\n    return super.transform(JSON.stringify(parse(schema)));\n  }\n\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {Client, TagCollection, Document, DocumentCollection} from \"typehub-javascript-sdk\";\nimport {lastValueFrom} from \"rxjs\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TypeHubService {\n\n  private baseUrl: string = 'https://api.typehub.cloud/';\n  private client: Client;\n\n  constructor(private httpClient: HttpClient) {\n    this.client = new Client(this.baseUrl);\n  }\n\n  public async findDocuments(search?: string): Promise<DocumentCollection> {\n    return this.client.explore().getAll(0, 16, search);\n  }\n\n  public async findDocument(user: string, name: string): Promise<Document> {\n    return await this.client.document().get(user, name);\n  }\n\n  public async export(user: string, name: string, version: string): Promise<string|undefined> {\n    const response = await this.client.document().export(user, name, {\n      version: version,\n      format: 'model-typeschema'\n    });\n\n    if (!response.href) {\n      return;\n    }\n\n    const schema = await lastValueFrom(this.httpClient.get<any>(response.href));\n    if (typeof schema === 'string') {\n      return schema;\n    } else {\n      return JSON.stringify(schema);\n    }\n  }\n\n  public findTags(user: string, name: string): Promise<TagCollection> {\n    return this.client.tag().getAll(user, name);\n  }\n\n}\n","import {Injectable} from '@angular/core';\nimport {Specification} from \"./model/Specification\";\nimport {TypeHubService} from \"./typehub.service\";\nimport {TransformerInterface} from \"./transformer/TransformerInterface\";\nimport {Internal} from \"./transformer/Internal\";\nimport {JsonSchemaJson} from \"./transformer/JsonSchemaJson\";\nimport {OpenAPIJson} from \"./transformer/OpenAPIJson\";\nimport {TypeSchema} from \"./transformer/TypeSchema\";\nimport {TypeAPI} from \"./transformer/TypeAPI\";\nimport {OpenAPIYaml} from \"./transformer/OpenAPIYaml\";\nimport {JsonSchemaYaml} from \"./transformer/JsonSchemaYaml\";\nimport {RawJson} from \"./transformer/RawJson\";\nimport {RawYaml} from \"./transformer/RawYaml\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class BCLayerService {\n\n  transform(specification: Specification): Specification {\n    // extract body argument to payload\n    specification.operations.forEach((operation, operationIndex) => {\n      if (operation.payload) {\n        return;\n      }\n\n      operation.arguments.forEach((argument, argumentIndex) => {\n        if (argument.in === 'body') {\n          operation.payload = argument.type;\n          operation.payloadShape = undefined;\n\n          specification.operations[operationIndex].arguments?.splice(argumentIndex, 1);\n        }\n      });\n    });\n\n    return specification;\n  }\n\n}\n","import {Injectable} from '@angular/core';\nimport {Include} from \"./model/Include\";\nimport {Type} from \"./model/Type\";\nimport {firstValueFrom} from \"rxjs\";\nimport {TypeHubService} from \"./typehub.service\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {TypeSchema} from \"./transformer/TypeSchema\";\nimport {TransformerInterface} from \"./transformer/TransformerInterface\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ResolverService {\n\n  private transformer: TransformerInterface;\n  constructor(private typeHubService: TypeHubService, private httpClient: HttpClient) {\n    this.transformer = new TypeSchema(typeHubService, this);\n  }\n\n  public async resolveIncludeTypes(include: Include|undefined): Promise<Array<Type>|undefined> {\n    if (!include || !include.url) {\n      return;\n    }\n\n    const url = new URL(include.url);\n\n    let typeApi = null;\n    if (url.protocol === 'typehub:') {\n      const doc = await this.typeHubService.findDocument(url.username, url.password);\n      if (!doc) {\n        return;\n      }\n\n      typeApi = await this.typeHubService.export(url.username, url.password, url.hostname);\n      if (!typeApi) {\n        return;\n      }\n    } else if (url.protocol === 'http:' || url.protocol === 'https:') {\n      typeApi = await firstValueFrom(this.httpClient.get(url.href, {responseType: 'text'}));\n    }\n\n    if (!typeApi) {\n      return;\n    }\n\n    const spec = await this.transformer.transform(typeApi);\n    if (!spec) {\n      return;\n    }\n\n    return spec.types;\n  }\n\n}\n","import {Injectable} from '@angular/core';\nimport {Specification} from \"./model/Specification\";\nimport {TypeHubService} from \"./typehub.service\";\nimport {TransformerInterface} from \"./transformer/TransformerInterface\";\nimport {Internal} from \"./transformer/Internal\";\nimport {JsonSchemaJson} from \"./transformer/JsonSchemaJson\";\nimport {OpenAPIJson} from \"./transformer/OpenAPIJson\";\nimport {TypeSchema} from \"./transformer/TypeSchema\";\nimport {TypeAPI} from \"./transformer/TypeAPI\";\nimport {OpenAPIYaml} from \"./transformer/OpenAPIYaml\";\nimport {JsonSchemaYaml} from \"./transformer/JsonSchemaYaml\";\nimport {RawJson} from \"./transformer/RawJson\";\nimport {RawYaml} from \"./transformer/RawYaml\";\nimport {BCLayerService} from \"./bclayer.service\";\nimport {ResolverService} from \"./resolver.service\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ImportService {\n\n  private transformer: Record<string, TransformerInterface> = {};\n\n  constructor(typeHubService: TypeHubService, bcLayerService: BCLayerService, resolverService: ResolverService) {\n    this.transformer['internal'] = new Internal(bcLayerService);\n    this.transformer['typeapi'] = new TypeAPI(typeHubService, resolverService);\n    this.transformer['typeschema'] = new TypeSchema(typeHubService, resolverService);\n    this.transformer['openapi-json'] = new OpenAPIJson(typeHubService, resolverService);\n    this.transformer['openapi-yaml'] = new OpenAPIYaml(typeHubService, resolverService);\n    this.transformer['jsonschema-json'] = new JsonSchemaJson(typeHubService, resolverService);\n    this.transformer['jsonschema-yaml'] = new JsonSchemaYaml(typeHubService, resolverService);\n    this.transformer['raw-json'] = new RawJson(typeHubService);\n    this.transformer['raw-yaml'] = new RawYaml(typeHubService);\n  }\n\n  async transform(type: SchemaType, schema: string): Promise<Specification> {\n    if (this.transformer[type]) {\n      return this.transformer[type].transform(schema);\n    } else {\n      throw new Error('Provided an invalid type')\n    }\n  }\n\n}\n\nexport type SchemaType = 'internal' | 'typeapi' | 'typeschema' | 'openapi-json' | 'openapi-yaml' | 'jsonschema-json' | 'jsonschema-yaml';\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Argument} from \"../../model/Argument\";\nimport {Specification} from \"../../model/Specification\";\n\n@Component({\n  selector: 'typeschema-arguments',\n  templateUrl: './argument.component.html',\n  styleUrls: ['./argument.component.css']\n})\nexport class ArgumentComponent {\n\n  @Input() data: Array<Argument> = [];\n  @Input() specification!: Specification;\n  @Output() dataChange= new EventEmitter<Array<Argument>>();\n\n  result: Array<Argument> = [];\n\n  newName?: string;\n  newIn?: 'path' | 'query' | 'header';\n  newType?: string = 'string';\n\n  types = [\n    {key: 'string', value: 'String'},\n    {key: 'integer', value: 'Integer'},\n    {key: 'number', value: 'Number'},\n    {key: 'boolean', value: 'Boolean'},\n  ];\n\n  ins = [\n    {key: 'path', value: 'Path'},\n    {key: 'query', value: 'Query'},\n    {key: 'header', value: 'Header'},\n  ];\n\n  ngOnInit() {\n    if (this.data) {\n      this.result = [];\n      this.data.forEach((entry) => {\n        this.result.push(entry);\n      });\n    }\n  }\n\n  add() {\n    if (!this.newName || !this.newIn || !this.newType) {\n      return;\n    }\n\n    this.result.push({\n      name: this.newName,\n      in: this.newIn,\n      type: this.newType,\n    })\n\n    this.newName = undefined;\n    this.newIn = undefined;\n    this.newType = 'string';\n  }\n\n  remove(name?: string) {\n    this.result = this.result.filter((row) => {\n      return row.name !== name;\n    });\n  }\n\n  changeValue() {\n    this.dataChange.emit(this.result);\n  }\n\n}\n","<div class=\"row mb-3\" *ngFor=\"let row of result;\">\n  <div class=\"col-3\">\n    <input type=\"text\" [id]=\"'name_' + row.name\" [name]=\"'name_' + row.name\" [(ngModel)]=\"row.name\" (ngModelChange)=\"changeValue()\" class=\"form-control\">\n  </div>\n  <div class=\"col-3\">\n    <select [id]=\"'in_' + row.in\" [name]=\"'in_' + row.in\" [(ngModel)]=\"row.in\" class=\"form-select\">\n      <option *ngFor=\"let in_ of ins\" [ngValue]=\"in_.key\">{{in_.value}}</option>\n    </select>\n  </div>\n  <div class=\"col-6\">\n    <div class=\"input-group\">\n      <select [id]=\"'type_' + row.name\" [name]=\"'type_' + row.name\" [(ngModel)]=\"row.type\" class=\"form-select\">\n        <optgroup label=\"scalar\">\n          <option ngValue=\"string\">String</option>\n          <option ngValue=\"integer\">Integer</option>\n          <option ngValue=\"number\">Number</option>\n          <option ngValue=\"boolean\">Boolean</option>\n        </optgroup>\n        <ng-container *ngIf=\"row.in === 'query'\">\n        <optgroup label=\"self\">\n          <option *ngFor=\"let refType of specification.types\" [ngValue]=\"refType.name\">{{ refType.name }}</option>\n        </optgroup>\n        <optgroup label=\"{{ include.alias }}\" *ngFor=\"let include of specification.imports\">\n          <ng-container *ngFor=\"let parentType of include.types\">\n            <option [ngValue]=\"include.alias + ':' + parentType.name\" *ngIf=\"parentType.name != row.name\">{{ parentType.name }}</option>\n          </ng-container>\n        </optgroup>\n        </ng-container>\n      </select>\n      <button class=\"btn btn-outline-secondary\" (click)=\"remove(row.name); changeValue()\"><i class=\"bi bi-x\"></i></button>\n    </div>\n  </div>\n</div>\n<div class=\"row\">\n  <div class=\"col-3\">\n    <input type=\"text\" id=\"newArgumentName\" name=\"newArgumentName\" [(ngModel)]=\"newName\" (ngModelChange)=\"changeValue()\" class=\"form-control\">\n  </div>\n  <div class=\"col-3\">\n    <select id=\"newArgumentIn\" name=\"newArgumentIn\" [(ngModel)]=\"newIn\" class=\"form-select\">\n      <option *ngFor=\"let in_ of ins\" [ngValue]=\"in_.key\">{{in_.value}}</option>\n    </select>\n  </div>\n  <div class=\"col-6\">\n    <div class=\"input-group\">\n      <select id=\"newArgumentType\" name=\"newArgumentType\" [(ngModel)]=\"newType\" class=\"form-select\">\n        <optgroup label=\"scalar\">\n          <option ngValue=\"string\">String</option>\n          <option ngValue=\"integer\">Integer</option>\n          <option ngValue=\"number\">Number</option>\n          <option ngValue=\"boolean\">Boolean</option>\n        </optgroup>\n      </select>\n      <button class=\"btn btn-outline-secondary\" (click)=\"add(); changeValue()\"><i class=\"bi bi-plus\"></i></button>\n    </div>\n  </div>\n</div>\n","import {Component, Input, OnInit} from '@angular/core';\nimport {ViewportScroller} from \"@angular/common\";\n\n@Component({\n  selector: 'typeschema-link',\n  templateUrl: './link.component.html',\n  styleUrls: ['./link.component.css']\n})\nexport class LinkComponent implements OnInit {\n\n  @Input() type!: string;\n  @Input() linkable!: boolean;\n\n  constructor(private viewportScroller: ViewportScroller) { }\n\n  ngOnInit(): void {\n  }\n\n  scrollTo(type: string): void {\n    this.viewportScroller.scrollToAnchor('type-' + type);\n  }\n\n}\n","\n<ng-container *ngIf=\"linkable\">\n  <a (click)=\"scrollTo(type)\" role=\"button\" class=\"text-white text-decoration-none\">{{ type }}</a>\n</ng-container>\n<ng-container *ngIf=\"!linkable\">\n  {{ type }}\n</ng-container>\n","import {Component, Input, OnInit} from '@angular/core';\n\n@Component({\n  selector: 'typeschema-import',\n  templateUrl: './import.component.html',\n  styleUrls: ['./import.component.css']\n})\nexport class ImportComponent implements OnInit {\n\n  @Input() url!: string;\n\n  href: string = '';\n\n  constructor() { }\n\n  ngOnInit(): void {\n    const url = new URL(this.url);\n    if (url.protocol === 'typehub:') {\n      this.href = 'https://app.typehub.cloud/d/' + url.username + '/' + url.password + '?version=' + url.hostname;\n    } else {\n      this.href = url.href;\n    }\n  }\n\n}\n","\n<a [href]=\"href\">{{ url }}</a>\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {Specification} from \"../../model/Specification\";\nimport {Throw} from \"../../model/Throw\";\n\n@Component({\n  selector: 'typeschema-throws',\n  templateUrl: './throw.component.html',\n  styleUrls: ['./throw.component.css']\n})\nexport class ThrowComponent implements OnInit {\n\n  @Input() data: Array<Throw> = [];\n  @Input() specification!: Specification;\n  @Input() contentTypes!: Array<{name: string, value: string}>;\n  @Output() dataChange = new EventEmitter<Array<Throw>>();\n\n  result: Array<Throw> = [];\n\n  newCode?: number;\n  newType?: string;\n\n  errorStatusCodes = [\n    {key: 0, value: ''},\n    {key: 400, value: 'Bad Request'},\n    {key: 402, value: 'Payment Required'},\n    {key: 403, value: 'Forbidden'},\n    {key: 404, value: 'Not Found'},\n    {key: 405, value: 'Method Not Allowed'},\n    {key: 408, value: 'Request Timeout'},\n    {key: 409, value: 'Conflict'},\n    {key: 410, value: 'Gone'},\n    {key: 412, value: 'Precondition Failed'},\n    {key: 417, value: 'Expectation Failed'},\n    {key: 422, value: 'Unprocessable Entity'},\n    {key: 423, value: 'Locked'},\n    {key: 424, value: 'Failed Dependency'},\n    {key: 429, value: 'Too Many Requests'},\n    {key: 499, value: '4xx'},\n    {key: 500, value: 'Internal Server Error'},\n    {key: 501, value: 'Not Implemented'},\n    {key: 502, value: 'Bad Gateway'},\n    {key: 503, value: 'Service Unavailable'},\n    {key: 504, value: 'Gateway Timeout'},\n    {key: 507, value: 'Insufficient Storage'},\n    {key: 508, value: 'Loop Detected'},\n    {key: 599, value: '5xx'},\n    {key: 999, value: 'Any Error'},\n  ]\n\n  ngOnInit() {\n    if (this.data) {\n      this.result = [];\n      this.data.forEach((entry) => {\n        this.result.push(entry);\n      })\n    }\n  }\n\n  add() {\n    if (!this.newCode || !this.newType) {\n      return;\n    }\n\n    this.result.push({\n      code: this.newCode,\n      type: this.newType\n    })\n\n    this.newCode = undefined;\n    this.newType = undefined;\n  }\n\n  removeByIndex(throwIndex: number) {\n    if (!this.result[throwIndex]) {\n      return;\n    }\n\n    this.result.splice(throwIndex, 1);\n  }\n\n  getNotUsedCodes() {\n    return this.errorStatusCodes.filter((code) => {\n      const selected = this.result.find((row) => {\n        return row.code === code.key;\n      });\n      return !selected;\n    });\n  }\n\n  changeValue() {\n    const result: Array<Throw> = [];\n    this.result.forEach((row) => {\n      result.push(row);\n    });\n\n    this.dataChange.emit(result);\n  }\n\n}\n","<div class=\"row mb-3\" *ngFor=\"let row of result; index as throwIndex\">\n  <div class=\"col-3\">\n    <select [id]=\"'throwCode_' + row.code\" [name]=\"'throwCode_' + row.code\" [(ngModel)]=\"row.code\" [disabled]=\"true\" class=\"form-select\">\n      <option *ngFor=\"let code of errorStatusCodes\" [ngValue]=\"code.key\">{{code.value}}</option>\n    </select>\n  </div>\n  <div class=\"col-3\">\n    <select id=\"operationReturnShape\" name=\"operationReturnShape\" class=\"form-select\" [(ngModel)]=\"row.typeShape\">\n      <option [ngValue]=\"undefined\">Object</option>\n      <option ngValue=\"map\">Map</option>\n      <option ngValue=\"array\">Array</option>\n      <option ngValue=\"mime\">Content-Type</option>\n    </select>\n  </div>\n  <div class=\"col-6\">\n    <div class=\"input-group\">\n      <select *ngIf=\"row.typeShape !== 'mime'\" [id]=\"'throwType_' + row.code\" [name]=\"'throwType_' + row.code\" class=\"form-select\" [(ngModel)]=\"row.type\">\n        <optgroup label=\"self\">\n          <option *ngFor=\"let refType of specification.types\" [ngValue]=\"refType.name\">{{ refType.name }}</option>\n        </optgroup>\n        <optgroup label=\"{{ include.alias }}\" *ngFor=\"let include of specification.imports\">\n          <ng-container *ngFor=\"let parentType of include.types\">\n            <option [ngValue]=\"include.alias + ':' + parentType.name\">{{ parentType.name }}</option>\n          </ng-container>\n        </optgroup>\n      </select>\n      <select *ngIf=\"row.typeShape === 'mime'\" [id]=\"'throwType_' + row.code\" [name]=\"'throwType_' + row.code\" class=\"form-select\" [(ngModel)]=\"row.type\">\n        <option *ngFor=\"let contentType of contentTypes\" [ngValue]=\"contentType.value\">{{ contentType.name }}</option>\n      </select>\n      <button class=\"btn btn-outline-secondary\" (click)=\"removeByIndex(throwIndex); changeValue()\"><i class=\"bi bi-x\"></i></button>\n    </div>\n  </div>\n</div>\n<div class=\"row\">\n  <div class=\"col-3\">\n    <select id=\"newThrowCode\" name=\"newThrowCode\" [(ngModel)]=\"newCode\" class=\"form-select\">\n      <option *ngFor=\"let code of getNotUsedCodes()\" [ngValue]=\"code.key\">{{code.value}}</option>\n    </select>\n  </div>\n  <div class=\"col-9\">\n    <div class=\"input-group\">\n      <select id=\"newThrowType\" name=\"newThrowType\" class=\"form-select\" [(ngModel)]=\"newType\">\n        <optgroup label=\"self\">\n          <option *ngFor=\"let refType of specification.types\" [ngValue]=\"refType.name\">{{ refType.name }}</option>\n        </optgroup>\n        <optgroup label=\"{{ include.alias }}\" *ngFor=\"let include of specification.imports\">\n          <ng-container *ngFor=\"let parentType of include.types\">\n            <option [ngValue]=\"include.alias + ':' + parentType.name\">{{ parentType.name }}</option>\n          </ng-container>\n        </optgroup>\n      </select>\n      <button class=\"btn btn-outline-secondary\" (click)=\"add(); changeValue()\"><i class=\"bi bi-plus\"></i></button>\n    </div>\n  </div>\n</div>\n","import {Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output, TemplateRef, ViewChild} from '@angular/core';\nimport {NgbModal, NgbOffcanvas} from '@ng-bootstrap/ng-bootstrap';\nimport {Message} from \"typehub-javascript-sdk\";\nimport {Specification} from \"../model/Specification\";\nimport {Type} from \"../model/Type\";\nimport {Property} from \"../model/Property\";\nimport {Include} from \"../model/Include\";\nimport {ImportService, SchemaType} from \"../import.service\";\nimport {Operation} from \"../model/Operation\";\nimport {Throw} from \"../model/Throw\";\nimport {ViewportScroller} from \"@angular/common\";\nimport {Security} from \"../model/Security\";\nimport {BCLayerService} from \"../bclayer.service\";\nimport {ResolverService} from \"../resolver.service\";\n\n@Component({\n  selector: 'typeschema-editor',\n  templateUrl: './editor.component.html',\n  styleUrls: ['./editor.component.css']\n})\nexport class EditorComponent implements OnInit {\n\n  @Input() specification: Specification = {\n    imports: [],\n    operations: [],\n    types: [],\n  };\n  @Input() operationEnabled: boolean = false;\n  @Input() importEnabled: boolean = true;\n  @Input() readonly: boolean = false;\n  @Input() id: string = '';\n\n  @Input() objectRef?: TemplateRef<any>;\n  @Input() arrayRef?: TemplateRef<any>;\n  @Input() mapRef?: TemplateRef<any>;\n  @Input() stringRef?: TemplateRef<any>;\n  @Input() integerRef?: TemplateRef<any>;\n  @Input() numberRef?: TemplateRef<any>;\n  @Input() booleanRef?: TemplateRef<any>;\n\n  @Output() save = new EventEmitter<Specification>();\n  @Output() change = new EventEmitter<Specification>();\n\n  @ViewChild('operationModal') operationModalRef!: ElementRef;\n  @ViewChild('typeModal') typeModalRef!: ElementRef;\n\n  operation: Operation = {\n    name: '',\n    description: '',\n    httpMethod: 'GET',\n    httpPath: '',\n    httpCode: 200,\n    arguments: [],\n    throws: [],\n    return: '',\n  };\n\n  throw: Throw = {\n    code: 500,\n    type: '',\n  };\n\n  type: Type = {\n    type: 'object',\n    name: '',\n    description: '',\n    discriminator: '',\n    mapping: {},\n  };\n  children: Array<string> = [];\n  generics: Array<string> = [];\n\n  property: Property = {\n    name: '',\n    description: '',\n    type: 'string',\n  };\n\n  import: string = '';\n  importType: SchemaType = 'internal';\n  export: string = '';\n\n  selectedType?: number;\n  selectedOperation?: number;\n  openModal: boolean = false;\n\n  loading: boolean = false;\n  dirty: boolean = false;\n  response?: Message;\n\n  baseUrl?: string;\n  security?: Security;\n\n  contentTypes: Array<{name: string, value: string}> = [{\n    name: 'application/octet-stream',\n    value: 'application/octet-stream'\n  }, {\n    name: 'application/x-www-form-urlencoded',\n    value: 'application/x-www-form-urlencoded'\n  }, {\n    name: 'application/json',\n    value: 'application/json'\n  }, {\n    name: 'multipart/form-data',\n    value: 'multipart/form-data'\n  }, {\n    name: 'text/plain',\n    value: 'text/plain'\n  }, {\n    name: 'application/xml',\n    value: 'application/xml'\n  }];\n\n  include: Include = {\n    alias: '',\n    url: '',\n    types: []\n  };\n\n  constructor(private importService: ImportService, private resolverService: ResolverService, private bcLayerService: BCLayerService, private modalService: NgbModal, private offCanvasService: NgbOffcanvas, private viewportScroller: ViewportScroller) { }\n\n  async ngOnInit(): Promise<void> {\n    if (!Array.isArray(this.specification.operations)) {\n      this.specification.operations = [];\n    }\n\n    if (!this.readonly && this.specification.imports.length > 0) {\n      for (let i = 0; i < this.specification.imports.length; i++) {\n        const include = this.specification.imports[i];\n        if (include && !include.types) {\n          this.specification.imports[i].types = await this.resolverService.resolveIncludeTypes(include);\n        }\n      }\n    }\n\n    this.specification = this.bcLayerService.transform(this.specification);\n\n    this.doChange();\n  }\n\n  doSave(): void {\n    this.save.emit(this.specification);\n    this.dirty = false;\n  }\n\n  doChange(): void {\n    this.saveToLocalStorage();\n    this.change.emit(this.specification);\n  }\n\n  setRoot(typeIndex: number) {\n    this.specification.root = typeIndex;\n    this.dirty = true;\n    this.doChange();\n  }\n\n  orderOperations() {\n    this.specification.operations.sort((left: Operation, right: Operation) => {\n      return left.name.localeCompare(right.name);\n    });\n  }\n\n  openOperation(content: any): void {\n    this.openModal = true;\n    this.operation = {\n      name: '',\n      description: '',\n      httpMethod: 'GET',\n      httpPath: '',\n      httpCode: 200,\n      arguments: [],\n      payload: '',\n      payloadShape: undefined,\n      throws: [],\n      return: '',\n      returnShape: undefined,\n    };\n\n    this.modalService.open(content, {size: 'lg'}).result.then((result) => {\n      const operation = Object.assign({}, this.operation);\n\n      if (!operation.name.match(/^[A-Za-z0-9_.]{1,32}$/)) {\n        this.response = {\n          success: false,\n          message: 'Operation name must match the regular expression [A-Za-z0-9_.]{1,32}'\n        };\n        return;\n      }\n\n      this.specification.operations.push(operation);\n      this.orderOperations();\n      this.dirty = true;\n      this.openModal = false;\n      this.doChange();\n    }, (reason) => {\n      this.openModal = false;\n    });\n  }\n\n  editOperation(content: any, operationIndex: number): void {\n    this.openModal = true;\n    this.operation = Object.assign({}, this.specification.operations[operationIndex]);\n\n    this.modalService.open(content, {size: 'lg'}).result.then((result) => {\n      const operation = Object.assign({}, this.operation);\n      if (!operation.arguments) {\n        operation.arguments = [];\n      }\n      if (!operation.throws) {\n        operation.throws = [];\n      }\n\n      if (!operation.name.match(/^[A-Za-z0-9_.]{1,32}$/)) {\n        this.response = {\n          success: false,\n          message: 'Operation name must match the regular expression [A-Za-z0-9_.]{1,32}'\n        };\n        return;\n      }\n\n      this.specification.operations[operationIndex] = operation;\n      this.orderOperations();\n      this.dirty = true;\n      this.openModal = false;\n      this.doChange();\n    }, (reason) => {\n      this.openModal = false;\n    });\n  }\n\n  selectOperation(operationIndex: number): void {\n    if (this.readonly) {\n      return;\n    }\n\n    if (this.selectedOperation === operationIndex) {\n      this.selectedOperation = undefined;\n    } else {\n      this.selectedOperation = operationIndex;\n    }\n  }\n\n  orderTypes() {\n    this.specification.types.sort((left: Type, right: Type) => {\n      return left.name.localeCompare(right.name);\n    });\n  }\n\n  openType(content: any): void {\n    this.openModal = true;\n    this.type = {\n      type: 'struct',\n      name: '',\n      description: '',\n    };\n\n    this.modalService.open(content, {size: 'lg'}).result.then((result) => {\n      const type = Object.assign({}, this.type);\n      type.properties = [];\n\n      if (!type.name.match(/^[A-Za-z0-9_]{1,32}$/)) {\n        this.response = {\n          success: false,\n          message: 'Type name must match the regular expression [A-Za-z0-9_]{1,32}'\n        };\n        return;\n      }\n\n      this.specification.types.push(type);\n      this.orderTypes();\n      this.dirty = true;\n      this.openModal = false;\n      this.doChange();\n    }, (reason) => {\n      this.openModal = false;\n    });\n  }\n\n  editType(content: any, typeIndex: number): void {\n    this.openModal = true;\n    this.type = Object.assign({}, this.specification.types[typeIndex]);\n\n    this.updateMapping();\n    this.updateGenerics();\n\n    this.modalService.open(content, {size: 'lg'}).result.then((result) => {\n      const type = Object.assign({}, this.type);\n      if (!type.properties) {\n        type.properties = [];\n      }\n\n      if (!type.name.match(/^[A-Za-z0-9_]{1,32}$/)) {\n        this.response = {\n          success: false,\n          message: 'Type name must match the regular expression [A-Za-z0-9_]{1,32}'\n        };\n        return;\n      }\n\n      this.specification.types[typeIndex] = type;\n      this.orderTypes();\n      this.dirty = true;\n      this.openModal = false;\n      this.doChange();\n    }, (reason) => {\n      this.openModal = false;\n    });\n  }\n\n  deleteTypeMapping(typeIndex: number, mappingKey: string): void {\n    if (!this.specification.types[typeIndex]) {\n      return;\n    }\n\n    const mapping = this.specification.types[typeIndex].mapping;\n    if (!mapping) {\n      return;\n    }\n\n    if (!mapping[mappingKey]) {\n      return;\n    }\n\n    delete mapping[mappingKey];\n  }\n\n  selectType(typeIndex: number): void {\n    if (this.readonly) {\n      return;\n    }\n\n    if (this.selectedType === typeIndex) {\n      this.selectedType = undefined;\n    } else {\n      this.selectedType = typeIndex;\n    }\n  }\n\n  @HostListener('document:keydown', ['$event'])\n  handleKeyboardEvent(event: KeyboardEvent) {\n    if (this.readonly || this.openModal) {\n      return;\n    }\n\n    if (event.altKey && event.key === 'q' && this.selectedOperation !== undefined) {\n      this.editOperation(this.operationModalRef, this.selectedOperation);\n    } else if (event.altKey && event.key === 'a' && this.selectedOperation !== undefined) {\n      this.deleteOperation(this.selectedOperation);\n    } else if (event.altKey && event.key === 'y') {\n      this.openOperation(this.operationModalRef);\n    } else if (event.altKey && event.key === 'e' && this.selectedType !== undefined) {\n      this.editType(this.typeModalRef, this.selectedType);\n    } else if (event.altKey && event.key === 'd' && this.selectedType !== undefined) {\n      this.deleteType(this.selectedType);\n    } else if (event.altKey && event.key === 'c') {\n      this.openType(this.typeModalRef);\n    }\n  }\n\n  findGenerics(type?: Type|null): Array<string> {\n    if (!type) {\n      return [];\n    }\n\n    const properties = type.properties;\n    if (!properties) {\n      return [];\n    }\n\n    let result: Array<string> = [];\n    for (let i = 0; i < properties.length; i++) {\n      const generic = properties[i].generic;\n      if (generic) {\n        result.push(generic);\n      }\n    }\n\n    return result;\n  }\n\n  findOperationByName(operationName: string): Operation|null {\n    for (let i = 0; i < this.specification.operations.length; i++) {\n      if (this.specification.operations[i].name === operationName) {\n        return this.specification.operations[i];\n      }\n    }\n\n    return null;\n  }\n\n  isLinkableType(typeName: string): boolean {\n    if (typeName === 'string' || typeName === 'number' || typeName === 'integer' || typeName === 'boolean' || typeName === 'generic' || typeName === 'any') {\n      return false;\n    }\n\n    for (let i = 0; i < this.specification.types.length; i++) {\n      if (this.specification.types[i].name === typeName) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  findTypeByName(typeName: string): Type|null {\n    for (let i = 0; i < this.specification.types.length; i++) {\n      if (this.specification.types[i].name === typeName) {\n        return this.specification.types[i];\n      }\n    }\n\n    if (typeName.indexOf(':') === -1) {\n      return null;\n    }\n\n    const parts = typeName.split(':');\n    const namespace = parts[0];\n    const name = parts[1];\n\n    for (let i = 0; i < this.specification.imports.length; i++) {\n      if (this.specification.imports[i].alias !== namespace) {\n        continue;\n      }\n\n      const types = this.specification.imports[i].types;\n      if (!types) {\n        continue;\n      }\n\n      for (let j = 0; j < types.length; j++) {\n        if (types[j].name === name) {\n          return types[j];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  findTypesWithParent(parent?: Type): Array<string> {\n    if (!parent) {\n      return [];\n    }\n\n    let result: Array<string> = [];\n    for (let i = 0; i < this.specification.types.length; i++) {\n      const type = this.specification?.types[i];\n      if (type?.parent === parent.name) {\n        if (type?.base) {\n          const mapping = type?.mapping;\n          if (mapping) {\n            result = result.concat(Object.keys(mapping));\n          }\n        } else {\n          result.push(type.name);\n        }\n      }\n    }\n\n    return result;\n  }\n\n  updateDiscriminator() {\n    this.type.mapping = {};\n    this.updateMapping();\n  }\n\n  updateMapping() {\n    let existing = this.type.mapping || {};\n    let mapping: Record<string, string> = {};\n    this.children = this.findTypesWithParent(this.type);\n    for (let i = 0; i < this.children.length; i++) {\n      mapping[this.children[i]] = this.children[i] in existing ? existing[this.children[i]] : '';\n    }\n    this.type.mapping = mapping;\n  }\n\n  updateGenerics() {\n    let existing = this.type.template || {};\n    let template: Record<string, string> = {};\n    this.generics = this.findGenerics(this.findTypeByName(this.type.parent || ''));\n    for (let i = 0; i < this.generics.length; i++) {\n      template[this.generics[i]] = this.generics[i] in existing ? existing[this.generics[i]] : '';\n    }\n    this.type.template = template;\n  }\n\n  updatePropertyReference() {\n    if (this.property.reference !== 'generic') {\n      this.property.generic = undefined;\n    }\n  }\n\n  deleteOperation(operationIndex: number): void {\n    this.specification.operations.splice(operationIndex, 1);\n    this.orderOperations();\n    this.dirty = true;\n    this.doChange();\n  }\n\n  copyOperation(operationIndex: number): void {\n    if (!this.specification.operations[operationIndex]) {\n      return;\n    }\n\n    let newOperation = JSON.parse(JSON.stringify(this.specification.operations[operationIndex]));\n    let newName = newOperation.name + '_copy';\n    let i = 0;\n    while (this.findOperationByName(newName)) {\n      i++;\n      newName = newOperation.name + '_copy' + i;\n    }\n    newOperation.name = newName;\n\n    this.specification.operations.push(newOperation);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  upArgument(operationIndex: number, argumentIndex: number): void {\n    const property = this.specification.operations[operationIndex].arguments?.splice(argumentIndex, 1)[0];\n    if (!property) {\n      return;\n    }\n    this.specification.operations[operationIndex].arguments?.splice(argumentIndex - 1, 0, property);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  downArgument(operationIndex: number, argumentIndex: number): void {\n    const property = this.specification.operations[operationIndex].arguments?.splice(argumentIndex, 1)[0];\n    if (!property) {\n      return;\n    }\n    this.specification.operations[operationIndex].arguments?.splice(argumentIndex + 1, 0, property);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  deleteArgument(operationIndex: number, argumentIndex: number): void {\n    if (!this.specification.operations[operationIndex]) {\n      return;\n    }\n    this.specification.operations[operationIndex].arguments?.splice(argumentIndex, 1);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  upThrow(operationIndex: number, throwIndex: number): void {\n    const property = this.specification.operations[operationIndex].throws?.splice(throwIndex, 1)[0];\n    if (!property) {\n      return;\n    }\n    this.specification.operations[operationIndex].throws?.splice(throwIndex - 1, 0, property);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  downThrow(operationIndex: number, throwIndex: number): void {\n    const property = this.specification.operations[operationIndex].throws?.splice(throwIndex, 1)[0];\n    if (!property) {\n      return;\n    }\n    this.specification.operations[operationIndex].throws?.splice(throwIndex + 1, 0, property);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  deleteThrow(operationIndex: number, throwIndex: number): void {\n    if (!this.specification.operations[operationIndex]) {\n      return;\n    }\n    this.specification.operations[operationIndex].throws?.splice(throwIndex, 1);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  deleteType(typeIndex: number): void {\n    this.specification.types.splice(typeIndex, 1);\n    this.orderTypes();\n    this.dirty = true;\n    this.doChange();\n  }\n\n  copyType(typeIndex: number): void {\n    if (!this.specification.types[typeIndex]) {\n      return;\n    }\n\n    let newType = JSON.parse(JSON.stringify(this.specification.types[typeIndex]));\n    let newName = newType.name + '_copy';\n    let i = 0;\n    while (this.findTypeByName(newName)) {\n      i++;\n      newName = newType.name + '_copy' + i;\n    }\n    newType.name = newName;\n\n    this.specification.types.push(newType);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  upProperty(typeIndex: number, propertyIndex: number): void {\n    const property = this.specification.types[typeIndex].properties?.splice(propertyIndex, 1)[0];\n    if (!property) {\n      return;\n    }\n    this.specification.types[typeIndex].properties?.splice(propertyIndex - 1, 0, property);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  downProperty(typeIndex: number, propertyIndex: number): void {\n    const property = this.specification.types[typeIndex].properties?.splice(propertyIndex, 1)[0];\n    if (!property) {\n      return;\n    }\n    this.specification.types[typeIndex].properties?.splice(propertyIndex + 1, 0, property);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  openProperty(content: any, typeIndex: number): void {\n    this.openModal = true;\n    this.property = {\n      name: '',\n      description: '',\n      type: 'string',\n      metadata: {},\n    };\n\n    this.modalService.open(content, {size: 'lg'}).result.then((result) => {\n      const property = Object.assign({}, this.property);\n\n      if (!property.name.match(/^[A-Za-z0-9_.$]{1,32}$/)) {\n        this.response = {\n          success: false,\n          message: 'Property name must match the regular expression [A-Za-z0-9_.$]{1,32}'\n        };\n        return;\n      }\n\n      this.specification.types[typeIndex].properties?.push(property);\n      this.dirty = true;\n      this.openModal = false;\n      this.doChange();\n    }, (reason) => {\n      this.openModal = false;\n    });\n  }\n\n  editProperty(content: any, typeIndex: number, propertyIndex: number): void {\n    const props = this.specification.types[typeIndex].properties;\n    if (!props) {\n      return;\n    }\n\n    this.openModal = true;\n    this.property = Object.assign({}, props[propertyIndex]);\n\n    if (this.property.metadata === undefined) {\n      this.property.metadata = {};\n    }\n\n    this.modalService.open(content, {size: 'lg'}).result.then((result) => {\n      const property = Object.assign({}, this.property);\n\n      if (!property.name.match(/^[A-Za-z0-9_.$]{1,32}$/)) {\n        this.response = {\n          success: false,\n          message: 'Property name must match the regular expression [A-Za-z0-9_.$]{1,32}'\n        };\n        return;\n      }\n\n      props[propertyIndex] = property;\n      this.dirty = true;\n      this.openModal = false;\n      this.doChange();\n    }, (reason) => {\n      this.openModal = false;\n    });\n  }\n\n  deleteProperty(typeIndex: number, propertyIndex: number): void {\n    if (!this.specification.types[typeIndex]) {\n      return;\n    }\n    this.specification.types[typeIndex].properties?.splice(propertyIndex, 1);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  deleteInclude(includeIndex: number): void {\n    this.specification.imports.splice(includeIndex, 1);\n    this.dirty = true;\n    this.doChange();\n  }\n\n  openSettings(content: any): void {\n    this.openModal = true;\n    this.baseUrl = this.specification.baseUrl || '';\n    this.security = this.specification.security || {\n      type: 'none'\n    };\n\n    this.modalService.open(content, {size: 'lg'}).result.then(async (result) => {\n      this.specification.baseUrl = this.baseUrl;\n\n      const availableType = ['httpBasic', 'httpBearer', 'apiKey', 'oauth2'];\n      if (this.security?.type && availableType.includes(this.security?.type)) {\n        this.specification.security = this.security;\n      } else {\n        this.specification.security = undefined;\n      }\n\n      this.dirty = true;\n      this.openModal = false;\n      this.doChange();\n    }, (reason) => {\n      this.openModal = false;\n    });\n  }\n\n  openInclude(content: any): void {\n    this.openModal = true;\n    this.include = {\n      alias: '',\n      url: '',\n      types: []\n    };\n\n    this.modalService.open(content, {size: 'lg'}).result.then(async (result) => {\n      const include = this.include;\n      include.types = await this.resolverService.resolveIncludeTypes(include);\n      this.specification.imports.push(include);\n\n      this.dirty = true;\n      this.openModal = false;\n      this.doChange();\n    }, (reason) => {\n      this.openModal = false;\n    });\n  }\n\n  openImport(content: any): void {\n    this.openModal = true;\n    this.import = '';\n\n    this.modalService.open(content).result.then(async (result) => {\n      this.loading = true;\n\n      const spec = await this.importService.transform(this.importType, this.import);\n\n      this.specification.imports = spec.imports;\n      this.specification.operations = spec.operations;\n      this.specification.types = spec.types;\n      this.specification.root = spec.root;\n\n      this.loading = false;\n      this.dirty = true;\n      this.openModal = false;\n      this.import = '';\n      this.doChange();\n    }, (reason) => {\n      this.openModal = false;\n    });\n  }\n\n  openExport(content: any): void {\n    this.openModal = true;\n    this.export = JSON.stringify(this.specification, null, 2);\n\n    this.modalService.open(content).result.then((result) => {\n      this.openModal = false;\n    }, (reason) => {\n      this.openModal = false;\n    });\n  }\n\n  openToc(content: any) {\n    this.openModal = true;\n\n    this.offCanvasService.open(content, { ariaLabelledBy: 'offcanvas-basic-title' }).result.then(\n      (result) => {\n        this.openModal = false;\n        this.viewportScroller.scrollToAnchor(result);\n      },\n      (reason) => {\n        this.openModal = false;\n      },\n    );\n  }\n\n  loadFromLocalStorage() {\n    let spec = localStorage.getItem(this.getLocalStorageName());\n    if (spec) {\n      this.specification = JSON.parse(spec);\n      this.dirty = true;\n      this.doChange();\n    }\n  }\n\n  saveToLocalStorage() {\n    if (!this.isEmptySpecification()) {\n      localStorage.setItem(this.getLocalStorageName(), JSON.stringify(this.specification));\n    }\n  }\n\n  private getLocalStorageName(): string {\n    return 'typeschema_editor_' + this.id;\n  }\n\n  private isEmptySpecification(): boolean {\n    return this.specification.imports.length === 0 && this.specification.operations.length === 0 && this.specification.types.length === 0;\n  }\n}\n","\n<ng-container *ngIf=\"!readonly\">\n  <ngb-alert type=\"danger\" *ngIf=\"response && response.success === false\">{{ response.message }}</ngb-alert>\n  <ngb-alert type=\"success\" *ngIf=\"response && response.success === true\">{{ response.message }}</ngb-alert>\n\n  <div class=\"btn-group mb-3 sticky-top\" role=\"group\">\n    <button type=\"button\" class=\"btn btn-primary\" (click)=\"doSave()\" *ngIf=\"save.observed\">Save</button>\n    <button type=\"button\" class=\"btn btn-success\" (click)=\"openOperation(operationModal)\" *ngIf=\"operationEnabled\">New Operation</button>\n    <button type=\"button\" class=\"btn btn-success\" (click)=\"openType(typeModal)\">New Type</button>\n    <button type=\"button\" class=\"btn btn-light\" (click)=\"openSettings(settingsModal)\" *ngIf=\"importEnabled\">Settings</button>\n    <button type=\"button\" class=\"btn btn-light\" (click)=\"openInclude(includeModal)\" *ngIf=\"importEnabled\">Include</button>\n    <button type=\"button\" class=\"btn btn-light\" (click)=\"openImport(importModal)\">Import</button>\n    <button type=\"button\" class=\"btn btn-light\" (click)=\"openExport(exportModal)\">Export</button>\n    <button type=\"button\" class=\"btn btn-light\" (click)=\"openToc(tocOffCanvas)\">TOC</button>\n    <button type=\"button\" class=\"btn btn-light\" (click)=\"loadFromLocalStorage()\">Restore</button>\n  </div>\n</ng-container>\n<ng-container *ngIf=\"readonly\">\n  <div class=\"btn-group mb-3\" role=\"group\">\n    <button type=\"button\" class=\"btn btn-light\" (click)=\"openExport(exportModal)\">Export</button>\n    <button type=\"button\" class=\"btn btn-light\" (click)=\"openToc(tocOffCanvas)\">TOC</button>\n  </div>\n</ng-container>\n\n<div class=\"text-center mt-5\" *ngIf=\"loading\">\n  <div class=\"spinner-border\" role=\"status\">\n    <span class=\"visually-hidden\">Loading...</span>\n  </div>\n</div>\n\n<div class=\"card editor-import mb-3\" *ngIf=\"specification.imports.length > 0\">\n  <div class=\"card-header\">\n    <div class=\"editor-import-headline font-monospace\">\n      <span class=\"badge text-bg-dark\"><span class=\"codicon codicon-cloud-download\"></span></span> Import\n    </div>\n  </div>\n  <div class=\"card-body\">\n    <table class=\"table table table-striped\">\n      <colgroup>\n        <col class=\"w-25\">\n        <col class=\"w-50\">\n        <col class=\"w-25\">\n      </colgroup>\n      <thead>\n      <tr>\n        <th>Alias</th>\n        <th>Url</th>\n        <th></th>\n      </tr>\n      </thead>\n      <tbody>\n      <tr *ngFor=\"let include of specification.imports; index as includeIndex\">\n        <td><span class=\"editor-import-alias\">{{ include.alias }}</span></td>\n        <td><span class=\"editor-import-url\"><typeschema-import [url]=\"include.url\"></typeschema-import></span></td>\n        <td>\n          <div class=\"btn-group float-end\" role=\"group\" *ngIf=\"!readonly\">\n            <a class=\"btn btn-danger\" (click)=\"deleteInclude(includeIndex)\"><span class=\"codicon codicon-close\"></span></a>\n          </div>\n        </td>\n      </tr>\n      </tbody>\n    </table>\n  </div>\n</div>\n\n<ng-container *ngIf=\"operationEnabled\">\n  <div *ngFor=\"let operation of specification.operations; index as operationIndex\" class=\"card editor-type mb-3\" [ngClass]=\"{'border-black': selectedOperation === operationIndex}\" id=\"operation-{{ operation.name }}\" (click)=\"selectOperation(operationIndex)\">\n    <div class=\"card-header\">\n      <div class=\"float-end text-end\">\n        <code>{{ operation.httpMethod }} {{ operation.httpPath }}</code>\n      </div>\n      <div class=\"editor-operation-name font-monospace\"><span class=\"badge text-bg-dark\"><span class=\"codicon codicon-symbol-method\"></span></span> {{ operation.name }}</div>\n      <div class=\"text-secondary editor-operation-description mt-2\" *ngIf=\"operation.description\">{{ operation.description }}</div>\n    </div>\n    <div class=\"card-body\">\n      <table class=\"table table-striped\" *ngIf=\"operation.arguments.length > 0 || operation.payload\">\n        <colgroup>\n          <col class=\"w-50\">\n          <col class=\"w-25\">\n          <col class=\"w-25\">\n        </colgroup>\n        <thead>\n        <tr>\n          <th>Name</th>\n          <th>Type</th>\n          <th></th>\n        </tr>\n        </thead>\n        <tbody>\n        <tr *ngFor=\"let argument of operation.arguments; index as argumentIndex\">\n          <td>\n            <span class=\"editor-operation-argument-name font-monospace\">{{ argument.name }}</span>\n          </td>\n          <td>\n            <span class=\"badge text-bg-primary\"><typeschema-link [type]=\"argument.type\" [linkable]=\"isLinkableType(argument.type)\"></typeschema-link></span>\n            <span class=\"badge text-bg-secondary ms-1\">{{ argument.in }}</span>\n          </td>\n          <td>\n            <div class=\"btn-group float-end\" role=\"group\" *ngIf=\"!readonly\">\n              <button type=\"button\" class=\"btn btn-secondary\" (click)=\"upArgument(operationIndex, argumentIndex)\"><i class=\"bi bi-arrow-up\"></i></button>\n              <button type=\"button\" class=\"btn btn-secondary\" (click)=\"downArgument(operationIndex, argumentIndex)\"><i class=\"bi bi-arrow-down\"></i></button>\n              <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteArgument(operationIndex, argumentIndex)\"><span class=\"codicon codicon-close\"></span></button>\n            </div>\n          </td>\n        </tr>\n        <tr *ngIf=\"operation.payload\">\n          <td>\n            <span class=\"editor-operation-argument-name font-monospace\">payload</span>\n          </td>\n          <td>\n            <span class=\"badge text-bg-primary\">\n              <ng-container *ngIf=\"operation.payloadShape === 'array'\">Array&lt;<typeschema-link [type]=\"operation.payload\" [linkable]=\"isLinkableType(operation.payload)\"></typeschema-link>&gt;</ng-container>\n              <ng-container *ngIf=\"operation.payloadShape === 'map'\">Map&lt;string, <typeschema-link [type]=\"operation.payload\" [linkable]=\"isLinkableType(operation.payload)\"></typeschema-link>&gt;</ng-container>\n              <ng-container *ngIf=\"operation.payloadShape === 'mime'\">{{ operation.payload }}</ng-container>\n              <ng-container *ngIf=\"operation.payloadShape !== 'array' && operation.payloadShape !== 'map' && operation.payloadShape !== 'mime'\"><typeschema-link [type]=\"operation.payload\" [linkable]=\"isLinkableType(operation.payload)\"></typeschema-link></ng-container>\n            </span>\n            <span class=\"badge text-bg-secondary ms-1\">body</span>\n          </td>\n          <td></td>\n        </tr>\n        </tbody>\n      </table>\n      <table class=\"table table-striped\" *ngIf=\"operation.httpCode || operation.throws.length > 0\">\n        <colgroup>\n          <col class=\"w-50\">\n          <col class=\"w-25\">\n          <col class=\"w-25\">\n        </colgroup>\n        <thead>\n        <tr>\n          <th>Code</th>\n          <th>Type</th>\n          <th></th>\n        </tr>\n        </thead>\n        <tbody>\n        <tr *ngIf=\"operation.httpCode === 204\">\n          <td><span class=\"badge text-bg-success\">{{ operation.httpCode }}</span></td>\n          <td><span class=\"badge text-bg-secondary\">-</span></td>\n          <td></td>\n        </tr>\n        <tr *ngIf=\"operation.httpCode && operation.return\">\n          <td><span class=\"badge text-bg-success\">{{ operation.httpCode }}</span></td>\n          <td>\n            <span class=\"badge text-bg-primary\">\n              <ng-container *ngIf=\"operation.returnShape === 'array'\">Array&lt;<typeschema-link [type]=\"operation.return\" [linkable]=\"isLinkableType(operation.return)\"></typeschema-link>&gt;</ng-container>\n              <ng-container *ngIf=\"operation.returnShape === 'map'\">Map&lt;string, <typeschema-link [type]=\"operation.return\" [linkable]=\"isLinkableType(operation.return)\"></typeschema-link>&gt;</ng-container>\n              <ng-container *ngIf=\"operation.returnShape === 'mime'\">{{ operation.return }}</ng-container>\n              <ng-container *ngIf=\"operation.returnShape !== 'array' && operation.returnShape !== 'map' && operation.returnShape !== 'mime'\"><typeschema-link [type]=\"operation.return\" [linkable]=\"isLinkableType(operation.return)\"></typeschema-link></ng-container>\n            </span>\n          </td>\n          <td></td>\n        </tr>\n        <tr *ngFor=\"let throw_ of operation.throws; index as throwIndex\">\n          <td><span class=\"badge text-bg-danger\">{{ throw_.code }}</span></td>\n          <td>\n            <span class=\"badge text-bg-primary\">\n              <ng-container *ngIf=\"throw_.typeShape === 'array'\">Array&lt;<typeschema-link [type]=\"throw_.type\" [linkable]=\"isLinkableType(throw_.type)\"></typeschema-link>&gt;</ng-container>\n              <ng-container *ngIf=\"throw_.typeShape === 'map'\">Map&lt;string, <typeschema-link [type]=\"throw_.type\" [linkable]=\"isLinkableType(throw_.type)\"></typeschema-link>&gt;</ng-container>\n              <ng-container *ngIf=\"throw_.typeShape === 'mime'\">{{ throw_.type }}</ng-container>\n              <ng-container *ngIf=\"throw_.typeShape !== 'array' && throw_.typeShape !== 'map' && throw_.typeShape !== 'mime'\"><typeschema-link [type]=\"throw_.type\" [linkable]=\"isLinkableType(throw_.type)\"></typeschema-link></ng-container>\n            </span>\n          </td>\n          <td>\n            <div class=\"btn-group float-end\" role=\"group\" *ngIf=\"!readonly\">\n              <button type=\"button\" class=\"btn btn-secondary\" (click)=\"upThrow(operationIndex, throwIndex)\"><i class=\"bi bi-arrow-up\"></i></button>\n              <button type=\"button\" class=\"btn btn-secondary\" (click)=\"downThrow(operationIndex, throwIndex)\"><i class=\"bi bi-arrow-down\"></i></button>\n              <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteThrow(operationIndex, throwIndex)\"><span class=\"codicon codicon-close\"></span></button>\n            </div>\n          </td>\n        </tr>\n        </tbody>\n      </table>\n    </div>\n    <div class=\"card-footer\" *ngIf=\"!readonly\">\n      <div class=\"btn-group\" role=\"group\">\n        <button type=\"button\" class=\"btn btn-primary\" (click)=\"editOperation(operationModal, operationIndex)\"><span class=\"codicon codicon-edit\"></span></button>\n        <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteOperation(operationIndex)\"><span class=\"codicon codicon-close\"></span></button>\n        <button type=\"button\" class=\"btn btn-secondary\" (click)=\"copyOperation(operationIndex)\"><span class=\"codicon codicon-copy\"></span></button>\n      </div>\n    </div>\n  </div>\n</ng-container>\n\n<div *ngFor=\"let type of specification.types; index as typeIndex\" class=\"card editor-type mb-3\" [ngClass]=\"{'border-primary': specification.root === typeIndex, 'border-black': selectedType === typeIndex}\" id=\"type-{{ type.name }}\" (click)=\"selectType(typeIndex)\">\n  <div class=\"card-header\">\n    <div class=\"editor-type-name font-monospace\"><span class=\"badge text-bg-dark\">\n      <span class=\"codicon codicon-symbol-structure\"></span></span> {{ type.name }}\n      <span *ngIf=\"type.parent\" class=\"float-end\"><span class=\"badge text-bg-primary\"><typeschema-link [type]=\"type.parent\" [linkable]=\"isLinkableType(type.parent)\"></typeschema-link></span></span>\n    </div>\n    <div class=\"text-secondary editor-type-description mt-2\" *ngIf=\"type.description\">{{ type.description }}</div>\n  </div>\n  <div class=\"card-body\">\n    <div [ngSwitch]=\"type.type\">\n      <ng-container *ngSwitchCase=\"'map'\">\n        <table class=\"table table table-striped editor-type-properties\">\n          <colgroup>\n            <col class=\"w-50\">\n            <col class=\"w-25\">\n            <col class=\"w-25\">\n          </colgroup>\n          <thead>\n          <tr>\n            <th>Name</th>\n            <th>Type</th>\n            <th></th>\n          </tr>\n          </thead>\n          <tbody>\n          <tr>\n            <td><div class=\"editor-type-property-name font-monospace\">*</div></td>\n            <td><span class=\"badge text-bg-primary\" *ngIf=\"type.reference\"><typeschema-link [type]=\"type.reference\" [linkable]=\"isLinkableType(type.reference)\"></typeschema-link></span></td>\n            <td></td>\n          </tr>\n          </tbody>\n        </table>\n      </ng-container>\n      <ng-container *ngSwitchDefault>\n        <div *ngIf=\"type.discriminator\">\n          <div>Discriminator: <span class=\"badge text-bg-primary\">{{ type.discriminator }}</span></div>\n          <table class=\"table table table-striped editor-type-properties\" *ngIf=\"type.mapping\">\n            <colgroup>\n              <col class=\"w-50\">\n              <col class=\"w-25\">\n              <col class=\"w-25\">\n            </colgroup>\n            <thead>\n            <tr>\n              <th>Value</th>\n              <th>Type</th>\n              <th></th>\n            </tr>\n            </thead>\n            <tbody>\n            <tr *ngFor=\"let mapping of type.mapping|keyvalue\">\n              <td><code>{{ mapping.value }}</code></td>\n              <td>\n                <div class=\"editor-type-property-name\">\n                  <span class=\"badge text-bg-primary\">\n                    <typeschema-link [type]=\"mapping.key\" [linkable]=\"isLinkableType(mapping.key)\"></typeschema-link>\n                  </span>\n                </div>\n              </td>\n              <td>\n                <div class=\"btn-group float-end\" role=\"group\" *ngIf=\"!readonly\">\n                  <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteTypeMapping(typeIndex, mapping.key)\"><span class=\"codicon codicon-close\"></span></button>\n                </div>\n              </td>\n            </tr>\n            </tbody>\n          </table>\n        </div>\n        <table class=\"table table table-striped editor-type-properties\">\n          <colgroup>\n            <col class=\"w-50\">\n            <col class=\"w-25\">\n            <col class=\"w-25\">\n          </colgroup>\n          <thead>\n          <tr>\n            <th>Name</th>\n            <th>Type</th>\n            <th></th>\n          </tr>\n          </thead>\n          <tbody>\n          <tr *ngFor=\"let property of type.properties; index as propertyIndex\">\n            <td>\n              <div class=\"editor-type-property-name font-monospace\">{{ property.name }}</div>\n              <div class=\"editor-type-property-description text-secondary mt-2\" *ngIf=\"property.description\">{{ property.description }}</div>\n            </td>\n            <td>\n              <span class=\"badge text-bg-primary\">{{ property.type }}</span>\n              <span class=\"badge text-bg-secondary ms-1\" *ngIf=\"property.reference\">\n                <typeschema-link [type]=\"property.reference\" [linkable]=\"isLinkableType(property.reference)\"></typeschema-link>\n              </span>\n              <span class=\"badge text-bg-secondary ms-1\" *ngIf=\"property.generic\">{{ property.generic }}</span>\n              <span class=\"badge text-bg-secondary ms-1\" *ngIf=\"property.format\">{{ property.format }}</span>\n            </td>\n            <td>\n              <div class=\"btn-group float-end\" role=\"group\" *ngIf=\"!readonly\">\n                <button type=\"button\" class=\"btn btn-secondary\" (click)=\"upProperty(typeIndex, propertyIndex)\"><i class=\"bi bi-arrow-up\"></i></button>\n                <button type=\"button\" class=\"btn btn-secondary\" (click)=\"downProperty(typeIndex, propertyIndex)\"><i class=\"bi bi-arrow-down\"></i></button>\n                <button type=\"button\" class=\"btn btn-primary\" (click)=\"editProperty(propertyModal, typeIndex, propertyIndex)\"><span class=\"codicon codicon-edit\"></span></button>\n                <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteProperty(typeIndex, propertyIndex)\"><span class=\"codicon codicon-close\"></span></button>\n              </div>\n            </td>\n          </tr>\n          </tbody>\n        </table>\n        <div class=\"btn-group\" role=\"group\" *ngIf=\"!readonly\">\n          <a class=\"btn btn-success\" (click)=\"openProperty(propertyModal, typeIndex)\">New Property</a>\n        </div>\n      </ng-container>\n    </div>\n  </div>\n  <div class=\"card-footer\" *ngIf=\"!readonly\">\n    <div class=\"btn-group\" role=\"group\">\n      <button type=\"button\" class=\"btn btn-primary\" (click)=\"editType(typeModal, typeIndex)\"><span class=\"codicon codicon-edit\"></span></button>\n      <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteType(typeIndex)\"><span class=\"codicon codicon-close\"></span></button>\n      <button type=\"button\" class=\"btn btn-secondary\" (click)=\"copyType(typeIndex)\"><span class=\"codicon codicon-copy\"></span></button>\n      <button *ngIf=\"specification.root !== typeIndex\" type=\"button\" class=\"btn btn-secondary\" (click)=\"setRoot(typeIndex)\">Primary</button>\n    </div>\n  </div>\n</div>\n\n<ng-template #operationModal let-modal>\n  <div class=\"modal-header\">\n    <h4 class=\"modal-title\">Operation</h4>\n    <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n  </div>\n  <div class=\"modal-body\">\n    <div class=\"mb-3 row\">\n      <label for=\"operationName\" class=\"col-sm-2 col-form-label fw-bold\">Name</label>\n      <div class=\"col-sm-10\">\n        <input id=\"operationName\" name=\"operationName\" class=\"form-control\" placeholder=\"my.operation.execute\" [(ngModel)]=\"operation.name\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"operationDescription\" class=\"col-sm-2 col-form-label fw-bold\">Description</label>\n      <div class=\"col-sm-10\">\n        <input id=\"operationDescription\" name=\"operationDescription\" class=\"form-control\" [(ngModel)]=\"operation.description\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"operationHttpMethod\" class=\"col-sm-2 col-form-label fw-bold\">HTTP Method</label>\n      <div class=\"col-sm-10\">\n        <select id=\"operationHttpMethod\" name=\"operationHttpMethod\" class=\"form-select\" [(ngModel)]=\"operation.httpMethod\">\n          <option ngValue=\"GET\">GET</option>\n          <option ngValue=\"POST\">POST</option>\n          <option ngValue=\"PUT\">PUT</option>\n          <option ngValue=\"PATCH\">PATCH</option>\n          <option ngValue=\"DELETE\">DELETE</option>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"operationHttpPath\" class=\"col-sm-2 col-form-label fw-bold\">HTTP Path</label>\n      <div class=\"col-sm-10\">\n        <input id=\"operationHttpPath\" name=\"operationHttpPath\" class=\"form-control\" placeholder=\"/my/endpoint\" [(ngModel)]=\"operation.httpPath\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"operationHttpCode\" class=\"col-sm-2 col-form-label fw-bold\">HTTP Code</label>\n      <div class=\"col-sm-10\">\n        <select id=\"operationHttpCode\" name=\"operationHttpCode\" class=\"form-select\" [(ngModel)]=\"operation.httpCode\">\n          <option [ngValue]=\"200\">200 OK</option>\n          <option [ngValue]=\"201\">201 Created</option>\n          <option [ngValue]=\"202\">202 Accepted</option>\n          <option [ngValue]=\"204\">204 No Content</option>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"operationArguments\" class=\"col-sm-2 col-form-label fw-bold\">Arguments</label>\n      <div class=\"col-sm-10\">\n        <typeschema-arguments [data]=\"operation.arguments\" [specification]=\"specification\" (dataChange)=\"operation.arguments = $event\"></typeschema-arguments>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"operation.httpMethod === 'POST' || operation.httpMethod === 'PUT' || operation.httpMethod === 'PATCH'\">\n      <label for=\"operationPayload\" class=\"col-sm-2 col-form-label fw-bold\">Payload</label>\n      <div class=\"col-sm-10\">\n        <div class=\"row mb-3\">\n          <div class=\"col-3\">\n            <select id=\"operationPayloadShape\" name=\"operationPayloadShape\" class=\"form-select\" [(ngModel)]=\"operation.payloadShape\">\n              <option [ngValue]=\"undefined\">Object</option>\n              <option ngValue=\"map\">Map</option>\n              <option ngValue=\"array\">Array</option>\n              <option ngValue=\"mime\">Content-Type</option>\n            </select>\n          </div>\n          <div class=\"col-9\">\n            <select *ngIf=\"operation.payloadShape !== 'mime'\" id=\"operationPayload\" name=\"operationPayload\" class=\"form-select\" [(ngModel)]=\"operation.payload\">\n              <optgroup label=\"self\">\n                <option *ngFor=\"let refType of specification.types\" [ngValue]=\"refType.name\">{{ refType.name }}</option>\n              </optgroup>\n              <optgroup label=\"{{ include.alias }}\" *ngFor=\"let include of specification.imports\">\n                <ng-container *ngFor=\"let parentType of include.types\">\n                  <option [ngValue]=\"include.alias + ':' + parentType.name\" *ngIf=\"parentType.name != type.name\">{{ parentType.name }}</option>\n                </ng-container>\n              </optgroup>\n            </select>\n            <select *ngIf=\"operation.payloadShape === 'mime'\" id=\"operationPayload\" name=\"operationPayload\" class=\"form-select\" [(ngModel)]=\"operation.payload\">\n              <option *ngFor=\"let contentType of contentTypes\" [ngValue]=\"contentType.value\">{{ contentType.name }}</option>\n            </select>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"operationThrows\" class=\"col-sm-2 col-form-label fw-bold\">Throws</label>\n      <div class=\"col-sm-10\">\n        <typeschema-throws [data]=\"operation.throws\" [specification]=\"specification\" [contentTypes]=\"contentTypes\" (dataChange)=\"operation.throws = $event\"></typeschema-throws>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"operation.httpCode !== 204\">\n      <label for=\"operationReturn\" class=\"col-sm-2 col-form-label fw-bold\">Return</label>\n      <div class=\"col-sm-10\">\n        <div class=\"row mb-3\">\n          <div class=\"col-3\">\n            <select id=\"operationReturnShape\" name=\"operationReturnShape\" class=\"form-select\" [(ngModel)]=\"operation.returnShape\">\n              <option [ngValue]=\"undefined\">Object</option>\n              <option ngValue=\"map\">Map</option>\n              <option ngValue=\"array\">Array</option>\n              <option ngValue=\"mime\">Content-Type</option>\n            </select>\n          </div>\n          <div class=\"col-9\">\n            <select *ngIf=\"operation.returnShape !== 'mime'\" id=\"operationReturn\" name=\"operationReturn\" class=\"form-select\" [(ngModel)]=\"operation.return\">\n              <optgroup label=\"self\">\n                <option *ngFor=\"let refType of specification.types\" [ngValue]=\"refType.name\">{{ refType.name }}</option>\n              </optgroup>\n              <optgroup label=\"{{ include.alias }}\" *ngFor=\"let include of specification.imports\">\n                <ng-container *ngFor=\"let parentType of include.types\">\n                  <option [ngValue]=\"include.alias + ':' + parentType.name\" *ngIf=\"parentType.name != type.name\">{{ parentType.name }}</option>\n                </ng-container>\n              </optgroup>\n            </select>\n            <select *ngIf=\"operation.returnShape === 'mime'\" id=\"operationReturn\" name=\"operationReturn\" class=\"form-select\" [(ngModel)]=\"operation.return\">\n              <option *ngFor=\"let contentType of contentTypes\" [ngValue]=\"contentType.value\">{{ contentType.name }}</option>\n            </select>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"modal-footer\">\n    <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"modal.close()\">Save</button>\n  </div>\n</ng-template>\n\n<ng-template #typeModal let-modal>\n  <div class=\"modal-header\">\n    <h4 class=\"modal-title\">Type</h4>\n    <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n  </div>\n  <div class=\"modal-body\">\n    <div class=\"mb-3 row\">\n      <label for=\"typeType\" class=\"col-sm-2 col-form-label fw-bold\">Type</label>\n      <div class=\"col-sm-10\">\n        <select id=\"typeType\" name=\"typeType\" class=\"form-select\" [(ngModel)]=\"type.type\">\n          <option ngValue=\"struct\">Struct</option>\n          <option ngValue=\"map\">Map</option>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"typeName\" class=\"col-sm-2 col-form-label fw-bold\">Name</label>\n      <div class=\"col-sm-10\">\n        <input id=\"typeName\" name=\"typeName\" class=\"form-control\" [(ngModel)]=\"type.name\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"typeDescription\" class=\"col-sm-2 col-form-label fw-bold\">Description</label>\n      <div class=\"col-sm-10\">\n        <input id=\"typeDescription\" name=\"typeDescription\" class=\"form-control\" [(ngModel)]=\"type.description\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"type.type === 'struct'\">\n      <label for=\"typeBase\" class=\"col-sm-2 col-form-label fw-bold\">Abstract</label>\n      <div class=\"col-sm-10\">\n        <div class=\"form-check form-switch mt-2\">\n          <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"typeBase\" [(ngModel)]=\"type.base\">\n        </div>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"type.type === 'struct'\">\n      <label for=\"typeParent\" class=\"col-sm-2 col-form-label fw-bold\">Parent</label>\n      <div class=\"col-sm-10\">\n        <select id=\"typeParent\" name=\"typeParent\" class=\"form-select\" [(ngModel)]=\"type.parent\" (ngModelChange)=\"updateGenerics()\">\n          <option [ngValue]=\"undefined\">No parent</option>\n          <optgroup label=\"Self\">\n            <ng-container *ngFor=\"let parentType of specification.types\">\n              <option [ngValue]=\"parentType.name\" *ngIf=\"parentType.name != type.name\">{{ parentType.name }}</option>\n            </ng-container>\n          </optgroup>\n          <optgroup label=\"{{include.alias}}\" *ngFor=\"let include of specification.imports\">\n            <ng-container *ngFor=\"let parentType of include.types\">\n              <option [ngValue]=\"include.alias + ':' + parentType.name\">{{ parentType.name }}</option>\n            </ng-container>\n          </optgroup>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"type.type === 'struct' && type.base\">\n      <label for=\"typeDiscriminator\" class=\"col-sm-2 col-form-label fw-bold\">Discriminator</label>\n      <div class=\"col-sm-10\">\n        <select id=\"typeDiscriminator\" name=\"typeDiscriminator\" class=\"form-select\" [(ngModel)]=\"type.discriminator\" (ngModelChange)=\"updateDiscriminator()\">\n          <option [ngValue]=\"undefined\">No discriminator</option>\n          <ng-container *ngFor=\"let property of type.properties\">\n            <option [ngValue]=\"property.name\">{{ property.name }}</option>\n          </ng-container>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"type.type === 'struct' && type.discriminator && type.mapping && (type.mapping | keyvalue)?.length\">\n      <label class=\"col-sm-2 col-form-label fw-bold\">Mapping</label>\n      <div class=\"col-sm-10\">\n        <div *ngFor=\"let child of children\">\n          <div class=\"input-group mb-3\">\n            <input id=\"typeMapping-{{ child }}\" name=\"typeMapping-{{ child }}\" type=\"text\" class=\"form-control\" [(ngModel)]=\"type.mapping[child]\" placeholder=\"Value of the discriminator property\">\n            <span class=\"input-group-text\">{{ child }}</span>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"type.type === 'struct' && type.template && (type.template | keyvalue)?.length\">\n      <label class=\"col-sm-2 col-form-label fw-bold\">Template</label>\n      <div class=\"col-sm-10\">\n        <div *ngFor=\"let generic of generics\">\n          <div class=\"input-group mb-3\">\n            <select id=\"typeTemplate-{{ generic }}\" name=\"typeTemplate-{{ generic }}\" class=\"form-select\" [(ngModel)]=\"type.template[generic]\">\n              <option>No type</option>\n              <ng-container *ngFor=\"let type of specification.types\">\n                <option [ngValue]=\"type.name\">{{ type.name }}</option>\n              </ng-container>\n            </select>\n            <span class=\"input-group-text\">{{ generic }}</span>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"type.type === 'map'\">\n      <label for=\"typeReference\" class=\"col-sm-2 col-form-label fw-bold\">Reference</label>\n      <div class=\"col-sm-10\">\n        <select id=\"typeReference\" name=\"typeReference\" class=\"form-select\" [(ngModel)]=\"type.reference\">\n          <optgroup label=\"scalar\">\n            <option ngValue=\"string\">String</option>\n            <option ngValue=\"integer\">Integer</option>\n            <option ngValue=\"number\">Number</option>\n            <option ngValue=\"boolean\">Boolean</option>\n            <option ngValue=\"any\">Any</option>\n            <option ngValue=\"generic\">Generic</option>\n          </optgroup>\n          <optgroup label=\"self\">\n            <option *ngFor=\"let refType of specification.types\" [ngValue]=\"refType.name\">{{ refType.name }}</option>\n          </optgroup>\n          <optgroup label=\"{{ include.alias }}\" *ngFor=\"let include of specification.imports\">\n            <ng-container *ngFor=\"let parentType of include.types\">\n              <option [ngValue]=\"include.alias + ':' + parentType.name\" *ngIf=\"parentType.name != type.name\">{{ parentType.name }}</option>\n            </ng-container>\n          </optgroup>\n        </select>\n      </div>\n    </div>\n  </div>\n  <div class=\"modal-footer\">\n    <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"modal.close()\">Save</button>\n  </div>\n</ng-template>\n\n<ng-template #propertyModal let-modal>\n  <div class=\"modal-header\">\n    <h4 class=\"modal-title\">Property</h4>\n    <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n  </div>\n  <div class=\"modal-body\">\n    <div class=\"mb-3 row\">\n      <label for=\"propertyName\" class=\"col-sm-2 col-form-label fw-bold\">Name</label>\n      <div class=\"col-sm-10\">\n        <input id=\"propertyName\" name=\"propertyName\" class=\"form-control\" [(ngModel)]=\"property.name\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"propertyDescription\" class=\"col-sm-2 col-form-label fw-bold\">Description</label>\n      <div class=\"col-sm-10\">\n        <input id=\"propertyDescription\" name=\"propertyDescription\" class=\"form-control\" [(ngModel)]=\"property.description\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"propertyType\" class=\"col-sm-2 col-form-label fw-bold\">Type</label>\n      <div class=\"col-sm-10\">\n        <select id=\"propertyType\" name=\"propertyType\" class=\"form-select\" [(ngModel)]=\"property.type\">\n          <optgroup label=\"Scalar\">\n            <option ngValue=\"string\">String</option>\n            <option ngValue=\"integer\">Integer</option>\n            <option ngValue=\"number\">Number</option>\n            <option ngValue=\"boolean\">Boolean</option>\n          </optgroup>\n          <optgroup label=\"Complex\">\n            <option ngValue=\"object\">Object</option>\n            <option ngValue=\"map\">Map</option>\n            <option ngValue=\"array\">Array</option>\n            <option ngValue=\"any\">Any</option>\n            <option ngValue=\"generic\">Generic</option>\n          </optgroup>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"property.type == 'string'\">\n      <label for=\"propertyFormat\" class=\"col-sm-2 col-form-label fw-bold\">Format</label>\n      <div class=\"col-sm-10\">\n        <select id=\"propertyFormat\" name=\"propertyFormat\" class=\"form-select\" [(ngModel)]=\"property.format\">\n          <option [ngValue]=\"undefined\">No Format</option>\n          <option *ngIf=\"property.type == 'string'\" ngValue=\"date\">Date</option>\n          <option *ngIf=\"property.type == 'string'\" ngValue=\"date-time\">Date-Time</option>\n          <option *ngIf=\"property.type == 'string'\" ngValue=\"time\">Time</option>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"property.type == 'generic'\">\n      <label for=\"propertyGeneric\" class=\"col-sm-2 col-form-label fw-bold\">Generic</label>\n      <div class=\"col-sm-10\">\n        <input id=\"propertyGeneric\" name=\"propertyGeneric\" class=\"form-control\" [(ngModel)]=\"property.generic\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"property.type == 'object' || property.type == 'array' || property.type == 'map'\">\n      <label for=\"propertyReference\" class=\"col-sm-2 col-form-label fw-bold\">Reference</label>\n      <div class=\"col-sm-10\">\n        <select id=\"propertyReference\" name=\"propertyReference\" class=\"form-select\" [(ngModel)]=\"property.reference\" (ngModelChange)=\"updatePropertyReference()\">\n          <optgroup label=\"scalar\" *ngIf=\"property.type != 'object'\">\n            <option ngValue=\"string\">String</option>\n            <option ngValue=\"integer\">Integer</option>\n            <option ngValue=\"number\">Number</option>\n            <option ngValue=\"boolean\">Boolean</option>\n            <option ngValue=\"any\">Any</option>\n            <option ngValue=\"generic\">Generic</option>\n          </optgroup>\n          <optgroup label=\"self\">\n            <option *ngFor=\"let refType of specification.types\" [ngValue]=\"refType.name\">{{ refType.name }}</option>\n          </optgroup>\n          <optgroup label=\"{{ include.alias }}\" *ngFor=\"let include of specification.imports\">\n            <ng-container *ngFor=\"let parentType of include.types\">\n              <option [ngValue]=\"include.alias + ':' + parentType.name\" *ngIf=\"parentType.name != type.name\">{{ parentType.name }}</option>\n            </ng-container>\n          </optgroup>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"property.type != 'generic' && property.reference == 'generic'\">\n      <label for=\"propertyGeneric\" class=\"col-sm-2 col-form-label fw-bold\">Generic</label>\n      <div class=\"col-sm-10\">\n        <input id=\"propertyGeneric\" name=\"propertyGeneric\" class=\"form-control\" [(ngModel)]=\"property.generic\">\n      </div>\n    </div>\n    <ng-container *ngIf=\"objectRef && property.type == 'object'\">\n      <ng-container [ngTemplateOutlet]=\"objectRef\" [ngTemplateOutletContext]=\"{$implicit: property}\"></ng-container>\n    </ng-container>\n    <ng-container *ngIf=\"mapRef && property.type == 'map'\">\n      <ng-container [ngTemplateOutlet]=\"mapRef\" [ngTemplateOutletContext]=\"{$implicit: property}\"></ng-container>\n    </ng-container>\n    <ng-container *ngIf=\"arrayRef && property.type == 'array'\">\n      <ng-container [ngTemplateOutlet]=\"arrayRef\" [ngTemplateOutletContext]=\"{$implicit: property}\"></ng-container>\n    </ng-container>\n    <ng-container *ngIf=\"stringRef && property.type == 'string'\">\n      <ng-container [ngTemplateOutlet]=\"stringRef\" [ngTemplateOutletContext]=\"{$implicit: property}\"></ng-container>\n    </ng-container>\n    <ng-container *ngIf=\"integerRef && property.type == 'integer'\">\n      <ng-container [ngTemplateOutlet]=\"integerRef\" [ngTemplateOutletContext]=\"{$implicit: property}\"></ng-container>\n    </ng-container>\n    <ng-container *ngIf=\"numberRef && property.type == 'number'\">\n      <ng-container [ngTemplateOutlet]=\"numberRef\" [ngTemplateOutletContext]=\"{$implicit: property}\"></ng-container>\n    </ng-container>\n    <ng-container *ngIf=\"booleanRef && property.type == 'boolean'\">\n      <ng-container [ngTemplateOutlet]=\"booleanRef\" [ngTemplateOutletContext]=\"{$implicit: property}\"></ng-container>\n    </ng-container>\n  </div>\n  <div class=\"modal-footer\">\n    <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"modal.close()\">Save</button>\n  </div>\n</ng-template>\n\n<ng-template #settingsModal let-modal>\n  <div class=\"modal-header\">\n    <h4 class=\"modal-title\">Settings</h4>\n    <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n  </div>\n  <div class=\"modal-body\" *ngIf=\"security\">\n    <div class=\"mb-3 row\">\n      <label for=\"settingsBaseUrl\" class=\"col-sm-2 col-form-label fw-bold\">Base-URL</label>\n      <div class=\"col-sm-10\">\n        <input [(ngModel)]=\"baseUrl\" id=\"settingsBaseUrl\" name=\"settingsBaseUrl\" class=\"form-control\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"settingsSecurityType\" class=\"col-sm-2 col-form-label fw-bold\">Type</label>\n      <div class=\"col-sm-10\">\n        <select [(ngModel)]=\"security.type\" id=\"settingsSecurityType\" name=\"settingsSecurityType\" class=\"form-select\">\n          <option ngValue=\"none\">None</option>\n          <option ngValue=\"httpBasic\">HTTP-Basic</option>\n          <option ngValue=\"httpBearer\">HTTP-Bearer</option>\n          <option ngValue=\"apiKey\">API-Key</option>\n          <option ngValue=\"oauth2\">OAuth2</option>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"security.type == 'apiKey'\">\n      <label for=\"settingsSecurityName\" class=\"col-sm-2 col-form-label fw-bold\">Name</label>\n      <div class=\"col-sm-10\">\n        <input [(ngModel)]=\"security.name\" id=\"settingsSecurityName\" name=\"settingsSecurityName\" class=\"form-control\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"security.type == 'apiKey'\">\n      <label for=\"settingsSecurityIn\" class=\"col-sm-2 col-form-label fw-bold\">In</label>\n      <div class=\"col-sm-10\">\n        <select [(ngModel)]=\"security.in\" id=\"settingsSecurityIn\" name=\"settingsSecurityIn\" class=\"form-select\">\n          <option ngValue=\"header\">Header</option>\n          <option ngValue=\"query\">Query</option>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"security.type == 'oauth2'\">\n      <label for=\"settingsSecurityTokenUrl\" class=\"col-sm-2 col-form-label fw-bold\">Token-URL</label>\n      <div class=\"col-sm-10\">\n        <input [(ngModel)]=\"security.tokenUrl\" id=\"settingsSecurityTokenUrl\" name=\"settingsSecurityTokenUrl\" class=\"form-control\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"security.type == 'oauth2'\">\n      <label for=\"settingsSecurityAuthorizationUrl\" class=\"col-sm-2 col-form-label fw-bold\">Authorization-URL</label>\n      <div class=\"col-sm-10\">\n        <input [(ngModel)]=\"security.authorizationUrl\" id=\"settingsSecurityAuthorizationUrl\" name=\"settingsSecurityAuthorizationUrl\" class=\"form-control\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\" *ngIf=\"security.type == 'oauth2'\">\n      <label for=\"settingsSecurityScopes\" class=\"col-sm-2 col-form-label fw-bold\">Scopes</label>\n      <div class=\"col-sm-10\">\n        <input [(ngModel)]=\"security.scopes\" id=\"settingsSecurityScopes\" name=\"settingsSecurityScopes\" class=\"form-control\">\n      </div>\n    </div>\n  </div>\n  <div class=\"modal-footer\">\n    <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"modal.close()\">Save</button>\n  </div>\n</ng-template>\n\n<ng-template #includeModal let-modal>\n  <div class=\"modal-header\">\n    <h4 class=\"modal-title\">Include</h4>\n    <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n  </div>\n  <div class=\"modal-body\">\n    <div class=\"mb-3 row\">\n      <label for=\"includeAlias\" class=\"col-sm-2 col-form-label fw-bold\">Alias</label>\n      <div class=\"col-sm-10\">\n        <input id=\"includeAlias\" name=\"includeAlias\" class=\"form-control\" [(ngModel)]=\"include.alias\">\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label for=\"includeUrl\" class=\"col-sm-2 col-form-label fw-bold\">Url</label>\n      <div class=\"col-sm-10\">\n        <input id=\"includeUrl\" name=\"includeUrl\" type=\"url\" class=\"form-control\" [(ngModel)]=\"include.url\" aria-describedby=\"includeUrlHelpBlock\" />\n        <div id=\"includeUrlHelpBlock\" class=\"form-text\">\n          Url to a specification, this can be either a url <code>https://typeschema.org/specification.json</code>\n          or a document from the <a href=\"https://typehub.cloud/\">TypeHub</a> platform <code>typehub://apioo:developer&#64;1.0.1</code>.\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"modal-footer\">\n    <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"modal.close()\">Save</button>\n  </div>\n</ng-template>\n\n<ng-template #importModal let-modal>\n  <div class=\"modal-header\">\n    <h4 class=\"modal-title\">Import</h4>\n    <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n  </div>\n  <div class=\"modal-body\">\n    <div class=\"mb-3 row\">\n      <div class=\"col-sm-12\">\n        <select id=\"importType\" name=\"importType\" class=\"form-select\" [(ngModel)]=\"importType\">\n          <option ngValue=\"internal\">Internal (JSON)</option>\n          <option ngValue=\"typeapi\">TypeAPI (JSON)</option>\n          <option ngValue=\"typeschema\">TypeSchema (JSON)</option>\n          <option ngValue=\"openapi-json\">OpenAPI (JSON)</option>\n          <option ngValue=\"openapi-yaml\">OpenAPI (YAML)</option>\n          <option ngValue=\"jsonschema-json\">JsonSchema (JSON)</option>\n          <option ngValue=\"jsonschema-yaml\">JsonSchema (YAML)</option>\n          <option ngValue=\"raw-json\">RawJson (JSON)</option>\n          <option ngValue=\"raw-yaml\">RawYaml (YAML)</option>\n        </select>\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <div class=\"col-sm-12\">\n        <textarea id=\"import\" name=\"import\" rows=\"20\" class=\"form-control\" [(ngModel)]=\"import\"></textarea>\n      </div>\n    </div>\n  </div>\n  <div class=\"modal-footer\">\n    <button type=\"button\" class=\"btn btn-primary\" (click)=\"modal.close()\">Import</button>\n  </div>\n</ng-template>\n\n<ng-template #exportModal let-modal>\n  <div class=\"modal-header\">\n    <h4 class=\"modal-title\">Export</h4>\n    <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n  </div>\n  <div class=\"modal-body\">\n    <div class=\"mb-3 row\">\n      <div class=\"col-sm-12\">\n        <textarea id=\"export\" name=\"export\" rows=\"20\" class=\"form-control\" [(ngModel)]=\"export\"></textarea>\n      </div>\n    </div>\n  </div>\n  <div class=\"modal-footer\">\n    <button type=\"button\" class=\"btn btn-primary\" (click)=\"modal.close()\">Close</button>\n  </div>\n</ng-template>\n\n<ng-template #tocOffCanvas let-offcanvas>\n  <div class=\"offcanvas-header\">\n    <h4 class=\"offcanvas-title\" id=\"offcanvas-basic-title\">TOC</h4>\n    <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"offcanvas.dismiss('closed')\"></button>\n  </div>\n  <div class=\"offcanvas-body\">\n    <ul class=\"list-group\">\n      <ng-container *ngIf=\"operationEnabled\">\n        <li class=\"list-group-item disabled\">Operations</li>\n        <li *ngFor=\"let operation of specification.operations\" class=\"list-group-item\"><a (click)=\"offcanvas.close('operation-' + operation.name)\" role=\"button\" class=\"link-underline-primary\">{{operation.name}}</a></li>\n      </ng-container>\n      <li class=\"list-group-item disabled\">Types</li>\n      <li *ngFor=\"let type of specification.types\" class=\"list-group-item\"><a (click)=\"offcanvas.close('type-' + type.name)\" role=\"button\" class=\"link-underline-primary\">{{type.name}}</a></li>\n    </ul>\n    <div class=\"mt-4 text-secondary font-monospace\" *ngIf=\"!readonly\">\n      <p>Shortcuts:</p>\n      <ul class=\"list-unstyled\">\n        <ng-container *ngIf=\"operationEnabled\">\n          <li><kbd>ALT</kbd> + <kbd>q</kbd> Edit selected operation</li>\n          <li><kbd>ALT</kbd> + <kbd>a</kbd> Delete selected operation</li>\n          <li><kbd>ALT</kbd> + <kbd>y</kbd> New operation</li>\n          <li><kbd>ALT</kbd> + <kbd>w</kbd> Move up selected operation</li>\n          <li><kbd>ALT</kbd> + <kbd>s</kbd> Move down selected operation</li>\n        </ng-container>\n        <li><kbd>ALT</kbd> + <kbd>e</kbd> Edit selected type</li>\n        <li><kbd>ALT</kbd> + <kbd>d</kbd> Delete selected type</li>\n        <li><kbd>ALT</kbd> + <kbd>c</kbd> New type</li>\n        <li><kbd>ALT</kbd> + <kbd>r</kbd> Move up selected type</li>\n        <li><kbd>ALT</kbd> + <kbd>f</kbd> Move down selected type</li>\n      </ul>\n    </div>\n  </div>\n</ng-template>\n","import {Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot, UrlTree} from '@angular/router';\nimport {Observable} from 'rxjs';\nimport {EditorComponent} from '../editor.component';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class EditorConfirmSaveGuard implements CanDeactivate<unknown> {\n  canDeactivate(\n    component: unknown,\n    currentRoute: ActivatedRouteSnapshot,\n    currentState: RouterStateSnapshot,\n    nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n    if (component instanceof EditorComponent) {\n      if (component.dirty) {\n        if (confirm('The editor contains unsaved changes. Please confirm that you actually want to lose these changes.')) {\n          return true;\n        } else {\n          return false;\n        }\n      }\n    }\n\n    return true;\n  }\n\n}\n","import { NgModule } from '@angular/core';\nimport {EditorComponent} from \"./editor/editor.component\";\nimport {NgbModule} from \"@ng-bootstrap/ng-bootstrap\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule} from \"@angular/forms\";\nimport {ArgumentComponent} from \"./editor/argument/argument.component\";\nimport {LinkComponent} from \"./editor/link/link.component\";\nimport {ThrowComponent} from \"./editor/throw/throw.component\";\nimport {ImportComponent} from \"./editor/import/import.component\";\n\n@NgModule({\n  declarations: [\n    ArgumentComponent,\n    LinkComponent,\n    ImportComponent,\n    ThrowComponent,\n    EditorComponent\n  ],\n  imports: [\n    NgbModule,\n    CommonModule,\n    FormsModule\n  ],\n  exports: [\n    EditorComponent\n  ]\n})\nexport class TypeschemaEditorModule { }\n","/*\n * Public API Surface of typeschema-angular-editor\n */\n\nexport * from './lib/export.service';\nexport * from './lib/import.service';\nexport * from './lib/editor/editor.component';\nexport * from './lib/editor/guard/editor-confirm-save.guard';\nexport * from './lib/typeschema-editor.module';\n\nexport * from './lib/model/Argument';\nexport * from './lib/model/Include';\nexport * from './lib/model/Operation';\nexport * from './lib/model/Property';\nexport * from './lib/model/Specification';\nexport * from './lib/model/Throw';\nexport * from './lib/model/Type';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TypeHubService","i2","i2.BCLayerService","i3.ResolverService","i1","i1.ImportService","i2.ResolverService","i3.BCLayerService","i6","i7.ArgumentComponent","i8.LinkComponent","i9.ImportComponent","i10.ThrowComponent"],"mappings":";;;;;;;;;;;;;;MASa,aAAa,CAAA;AAExB,IAAA,WAAA,GAAA,GAAiB;AAEjB,IAAA,SAAS,CAAC,IAAmB,EAAA;QAC3B,MAAM,MAAM,GAAQ,EAAE,CAAC;AAEvB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;AAC9B,YAAA,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SAC/B;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC/B,YAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1E,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;gBAC/B,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE;oBAChC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;iBACtC;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;SAC5B;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACnF,MAAM,UAAU,GAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AACpC,gBAAA,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAClE,aAAC,CAAC,CAAC;AAEH,YAAA,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;SAChC;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpE,MAAM,WAAW,GAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;AACvB,oBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;iBAClD;qBAAM;AACL,oBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;iBACrD;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;SAClC;AAED,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACpD,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;SAC7C;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,kBAAkB,CAAC,SAAoB,EAAA;QAC7C,MAAM,MAAM,GAAQ,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;AACrC,YAAA,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;SAC5C;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;AACpC,YAAA,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC;SACtC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAClC,YAAA,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC;SAClC;QAED,MAAM,IAAI,GAAwB,EAAE,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;YACzE,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACvC,gBAAA,IAAI,QAAQ,CAAC,EAAE,KAAK,MAAM,EAAE;oBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/C,oBAAA,IAAI,MAAM,KAAK,IAAI,EAAE;wBACnB,OAAO;qBACR;AAED,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;AACpB,wBAAA,EAAE,EAAE,MAAM;AACV,wBAAA,MAAM,EAAE,MAAM;qBACf,CAAC;iBACH;AACH,aAAC,CAAC,CAAC;SACJ;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE;AACtD,YAAA,MAAM,OAAO,GAAQ;AACnB,gBAAA,EAAE,EAAE,MAAM;aACX,CAAC;AAEF,YAAA,IAAI,SAAS,CAAC,YAAY,KAAK,MAAM,EAAE;AACrC,gBAAA,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC;aACzC;iBAAM;AACL,gBAAA,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;aACpF;AAED,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;SAC3B;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3G,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACvC,gBAAA,IAAI,QAAQ,CAAC,EAAE,KAAK,OAAO,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,EAAE;oBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/C,oBAAA,IAAI,MAAM,KAAK,IAAI,EAAE;wBACnB,OAAO;qBACR;AAED,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;wBACpB,EAAE,EAAE,QAAQ,CAAC,EAAE;AACf,wBAAA,MAAM,EAAE,MAAM;qBACf,CAAC;iBACH;AACH,aAAC,CAAC,CAAC;SACJ;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAClG,MAAM,MAAM,GAAe,EAAE,CAAC;YAC9B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAClC,gBAAA,MAAM,GAAG,GAAQ;oBACf,IAAI,EAAE,MAAM,CAAC,IAAI;iBAClB,CAAC;AAEF,gBAAA,IAAI,MAAM,CAAC,SAAS,KAAK,MAAM,EAAE;AAC/B,oBAAA,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;iBAC/B;qBAAM;AACL,oBAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;iBACpE;AAED,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,aAAC,CAAC,CAAC;AACH,YAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;SACxB;QAED,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAClC,YAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;SAC/B;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,KAAK,GAAG,EAAE;YACpD,MAAM,GAAG,GAAQ,EAAE,CAAC;AACpB,YAAA,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;AACpB,YAAA,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,EAAE;AACpC,gBAAA,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;aACpC;iBAAM;AACL,gBAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;aAC9E;AACD,YAAA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;SACrB;AAED,QAAA,OAAO,MAAM,CAAC;KACf;IAEO,iBAAiB,CAAC,IAAY,EAAE,KAAc,EAAA;AAEpD,QAAA,IAAI,KAAK,KAAK,KAAK,EAAE;YACnB,OAAO;AACL,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,MAAM,EAAE;AACN,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,MAAM,EAAE,IAAI;AACb,iBAAA;aACF,CAAC;SACH;AAAM,aAAA,IAAI,KAAK,KAAK,OAAO,EAAE;YAC5B,OAAO;AACL,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,MAAM,EAAE;AACN,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,MAAM,EAAE,IAAI;AACb,iBAAA;aACF,CAAC;SACH;aAAM;YACL,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,MAAM,EAAE,IAAI;aACb,CAAC;SACH;KACF;AAEO,IAAA,eAAe,CAAC,IAAU,EAAA;QAChC,MAAM,MAAM,GAAwB,EAAE,CAAC;QAEvC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAChC,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;SAC1C;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;SACxC;AAED,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;QAE1B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,MAAM,GAAwB,EAAE,CAAC;AACvC,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;AAC7B,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAE/B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACvF,gBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;aACpC;AAED,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;SAC3B;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACzB,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;SAC5B;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,MAAM,KAAK,GAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACnC,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACzD,aAAC,CAAC,CAAA;AACF,YAAA,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AAClC,YAAA,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;SAC9C;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACpF,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;SAClC;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,YAAY,CAAC,IAAU,EAAA;QAC7B,MAAM,MAAM,GAAwB,EAAE,CAAC;QAEvC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAChC,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;SAC1C;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;SACxC;AAED,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QAEvB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC9B,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACrD;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,gBAAgB,CAAC,QAAkB,EAAA;QACzC,MAAM,MAAM,GAAwB,EAAE,CAAC;QAEvC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACpC,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC;SAC9C;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACnC,YAAA,MAAM,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC;SAC5C;AAED,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;AACrC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC/D,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;AAC7B,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;YAEtC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACnG,gBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;aACxC;SACF;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,EAAE;AAC/C,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AACvB,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SACzD;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,EAAE;AACjD,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;AACzB,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SACzD;AAAM,aAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AACrC,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;YAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC/B,gBAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;aACpC;SACF;AAAM,aAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;AACtC,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;SAC5B;AAAM,aAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AACrC,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;SAC3B;AAAM,aAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;AACtC,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;SAC5B;AAAM,aAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE;AAClC,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;SACxB;AAAM,aAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;AACtC,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;AAC3B,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;SACnC;AAED,QAAA,OAAO,MAAM,CAAC;KACf;IAEO,WAAW,CAAC,SAAkB,EAAE,OAAgB,EAAA;QACtD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACzE,OAAO;AACL,gBAAA,IAAI,EAAE,SAAS;aAChB,CAAC;SACH;AAAM,aAAA,IAAI,SAAS,KAAK,SAAS,EAAE;YAClC,OAAO;AACL,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,IAAI,EAAE,OAAO;aACd,CAAC;SACH;aAAM;YACL,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,MAAM,EAAE,SAAS;aAClB,CAAC;SACH;KACF;AAEO,IAAA,KAAK,CAAC,KAAU,EAAA;QACtB,OAAO,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC;KACvD;wGAnUU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCJY,QAAQ,CAAA;AAEQ,IAAA,cAAA,CAAA;AAA3B,IAAA,WAAA,CAA2B,cAA8B,EAAA;QAA9B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KACxD;IAED,MAAM,SAAS,CAAC,MAAc,EAAA;QAC5B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAkB,CAAC;QAE/C,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAE3C,QAAA,OAAO,IAAI,CAAC;KACb;AAEF;;MCRY,UAAU,CAAA;AAMC,IAAA,cAAA,CAAA;AAA0C,IAAA,eAAA,CAAA;IAJhE,gBAAgB,GAAwB,EAAE,CAAC;AAEjC,IAAA,WAAW,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAE1E,WAAsB,CAAA,cAA8B,EAAY,eAAgC,EAAA;QAA1E,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAAY,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;KAC/F;IAED,MAAM,SAAS,CAAC,MAAc,EAAA;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;KACvC;IAES,MAAM,KAAK,CAAC,IAAyB,EAAA;AAC7C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,MAAM,SAAS,GAAkB,EAAE,CAAC;AACpC,QAAA,MAAM,IAAI,GAAkB;AAC1B,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,KAAK,EAAE,EAAE;SACV,CAAC;AAEF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AACxD,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACvD,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC5B;aACF;SACF;AAED,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACtD,gBAAA,IAAI;AACF,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAA4B,CAAC,CAAC,CAAC;AAC7E,oBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACrB;gBAAC,OAAO,KAAK,EAAE;iBACf;aACF;SACF;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE;YACpI,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AACxE,gBAAA,IAAI;AACF,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAA4B,CAAC,CAAC,CAAC;AAC7E,oBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACrB;gBAAC,OAAO,KAAK,EAAE;iBACf;aACF;SACF;AAED,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;AAChE,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AACtD,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACrB;YAAC,OAAO,KAAK,EAAE;aACf;SACF;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE;;YAE5E,IAAI,GAAG,GAAG,MAAM,CAAC;AACjB,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE;gBAClE,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;AAC5C,gBAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;AAChC,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;AAC/B,aAAA,CAAC,CAAC,CAAC;AACJ,YAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACnC;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;YACrB,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACtC,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;aACnB;SACF;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAEO,IAAA,MAAM,eAAe,CAAC,KAAa,EAAE,GAAQ,EAAA;AACnD,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,OAAO;SACR;AAED,QAAA,IAAI,OAAO,GAAY;AACrB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,GAAG,EAAE,GAAG;SACT,CAAC;AAEF,QAAA,OAAO,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAExE,QAAA,OAAO,OAAO,CAAC;KAChB;AAES,IAAA,MAAM,aAAa,CAAC,IAAY,EAAE,IAAyB,EAAA;AACnE,QAAA,IAAI,IAAU,CAAC;QAEf,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;SAC/B;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC;SAC/C;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;SAChC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE;YAChC,IAAI,CAAC,SAAS,CAAC,GAAG;AAChB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;aACzB,CAAA;SACF;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;SACtC;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,QAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;AAC5B,YAAA,IAAI,GAAG;AACL,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;AACtG,gBAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;aAC1B,CAAC;YAEF,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE;AAChC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;aAClC;SACF;aAAM,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,OAAO,EAAE;AACrD,YAAA,IAAI,GAAG;AACL,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;gBACtG,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACzC,CAAC;SACH;aAAM;YACL,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACnD,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;aACjD;AAED,YAAA,IAAI,GAAG;AACL,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;aACvG,CAAC;AAEF,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACnH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;aACtC;AAED,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE;AAC5E,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,gBAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE;AAC7D,oBAAA,IAAI;AACF,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAA4B,CAAC,CAAC,CAAC;qBACvF;oBAAC,OAAO,KAAK,EAAE;qBACf;iBACF;aACF;SACF;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAEO,IAAA,MAAM,iBAAiB,CAAC,IAAY,EAAE,IAAyB,EAAA;QACrE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;SAC/B;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC;SAC/C;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;SAChC;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,IAAI,GAAqB,CAAC;AAC1B,QAAA,IAAI,MAAM,CAAC;QACX,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE;;;AAGlC,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;YAE5C,IAAI,GAAG,QAAQ,CAAC;YAChB,GAAG,GAAG,aAAa,CAAC;SACrB;aAAM,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,OAAO,EAAE;YACrD,IAAI,GAAG,QAAQ,CAAC;YAChB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;SACnD;AAAM,aAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;YACnC,IAAI,GAAG,QAAQ,CAAC;AAChB,YAAA,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtB;AAAM,aAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;YAChC,IAAI,GAAG,QAAQ,CAAC;YAChB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;AAC9B,gBAAA,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;aACzB;SACF;AAAM,aAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;YACjC,IAAI,GAAG,SAAS,CAAC;SAClB;AAAM,aAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;YAChC,IAAI,GAAG,QAAQ,CAAC;SACjB;AAAM,aAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;YACjC,IAAI,GAAG,SAAS,CAAC;SAClB;AAAM,aAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;YAC7B,IAAI,GAAG,KAAK,CAAC;SACd;aAAM;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SACpE;AAED,QAAA,MAAM,QAAQ,GAAa;AACzB,YAAA,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;AACtG,YAAA,IAAI,EAAE,IAAI;SACX,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE;AAC7E,YAAA,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;SAC1C;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACpD,YAAA,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;SAC1B;QAED,IAAI,GAAG,EAAE;AACP,YAAA,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;SAC1B;AAED,QAAA,OAAO,QAAQ,CAAC;KACjB;AAES,IAAA,QAAQ,CAAC,IAAS,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC9D,OAAO,IAAI,CAAC,MAAM,CAAC;SACpB;AAAM,aAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACpC,YAAA,OAAO,GAAG,CAAC;SACZ;aAAM,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC/C,OAAO,IAAI,CAAC,IAAI,CAAC;SAClB;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;;YAEhC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAClC;aAAM;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SACnE;KACF;AAES,IAAA,KAAK,CAAC,KAAU,EAAA;QACxB,OAAO,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC;KACvD;IAES,GAAG,CAAC,MAAW,EAAE,IAAmB,EAAA;AAC5C,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3B,gBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;aACpB;SACF;AAED,QAAA,OAAO,SAAS,CAAC;KAClB;AAES,IAAA,YAAY,CAAC,GAAW,EAAA;AAChC,QAAA,OAAO,GAAG;AACP,aAAA,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;AAC7B,aAAA,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;KAC5B;IAES,MAAM,IAAI,CAAC,IAAY,EAAA;QAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACnF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AACtC,aAAA,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACnD,IAAI,CAAC,EAAE,CAAC,CAAC;KACb;AAEF;;AC1SK,MAAO,cAAe,SAAQ,UAAU,CAAA;AAE7C;;ACGK,MAAO,WAAY,SAAQ,cAAc,CAAA;IAE7C,IAAI,GAAwB,EAAE,CAAC;IAC/B,aAAa,GAAwB,EAAE,CAAC;IAE/B,MAAM,SAAS,CAAC,MAAc,EAAA;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAwB,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEzC,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAExB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE;AAC5E,YAAA,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;gBAC9D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzD,oBAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AAC/B,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClC,qBAAC,CAAC,CAAC;iBACJ;aACF;SACF;AAED,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AAC7D,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;aACvD;YAAC,OAAO,KAAK,EAAE;aACf;SACF;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAEO,IAAA,MAAM,aAAa,CAAC,IAAY,EAAE,MAAc,EAAA;QACtD,MAAM,UAAU,GAAqB,EAAE,CAAC;AAExC,QAAA,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACxD,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE;gBAC1E,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC5C;iBAAM;gBACL,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC;aAC3E;YAED,IAAI,WAAW,GAAG,EAAE,CAAC;AACrB,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;AAClE,gBAAA,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;aAC7B;AAAM,iBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE;AACjF,gBAAA,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;aACjC;YAED,IAAI,IAAI,GAAoB,EAAE,CAAC;AAC/B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;gBACnE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAA8B,KAAI;AAC1D,oBAAA,IAAI;wBACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;qBAC1C;oBAAC,OAAO,KAAK,EAAE;qBACf;AACH,iBAAC,CAAC,CAAC;aACJ;YAED,IAAI,OAAO,GAAqB,SAAS,CAAC;AAC1C,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE;gBAC1E,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;aACtD;YAED,IAAI,QAAQ,GAAG,GAAG,CAAC;YACnB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAiB,EAAE,CAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;AACtE,gBAAA,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;oBAC1D,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;wBAC7C,SAAS;qBACV;AAED,oBAAA,IAAI;AACF,wBAAA,IAAI,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAClC,IAAI,YAAY,IAAI,GAAG,IAAI,YAAY,GAAG,GAAG,EAAE;4BAC7C,QAAQ,GAAG,YAAY,CAAC;4BACxB,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;yBAC5C;6BAAM,IAAI,YAAY,IAAI,GAAG,IAAI,YAAY,GAAG,GAAG,EAAE;4BACpD,MAAM,CAAC,IAAI,CAAC;AACV,gCAAA,IAAI,EAAE,YAAY;AAClB,gCAAA,IAAI,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACxC,6BAAA,CAAC,CAAA;yBACH;qBACF;oBAAC,OAAO,KAAK,EAAE;qBACf;iBACF;aACF;YAED,IAAI,IAAI,GAAkB,EAAE,CAAC;AAC7B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACvD,gBAAA,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;aACnB;YAED,UAAU,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,YAAY,EAAE,SAAS;AACvB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CAAC,CAAC;SACJ;AAED,QAAA,OAAO,UAAU,CAAC;KACnB;IAEO,MAAM,YAAY,CAAC,WAAmB,EAAA;QAC5C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,OAAO,CAAC;SAChB;aAAM;YACL,OAAO;SACR;KACF;AAEO,IAAA,aAAa,CAAC,SAA8B,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;YAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;aAC1C;YACD,SAAS,GAAG,QAAQ,CAAC;SACtB;QAED,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;YAC9E,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;SACtD;AAED,QAAA,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,EAAE;YACvE,OAAO;AACL,gBAAA,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;AACvB,gBAAA,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC;AACnB,gBAAA,IAAI,EAAE,IAAI;aACX,CAAC;SACH;aAAM;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SACjD;KACF;AAEO,IAAA,mBAAmB,CAAC,MAA2B,EAAA;AACrD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;YACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;AACvH,gBAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;aACzB;SACF;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;YACpE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;SAC1C;AAAM,aAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;AAC3E,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;SACvB;aAAM;AACL,YAAA,OAAO,EAAE,CAAC;SACX;KACF;IAEO,MAAM,gBAAgB,CAAC,QAA6B,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;YACxE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;SAC3C;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,EAAE,CAAC;SACX;AAED,QAAA,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACzB,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;SAC/B;aAAM;AACL,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,YAAA,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;AAE3C,YAAA,OAAO,aAAa,CAAC;SACtB;KACF;AAEO,IAAA,aAAa,CAAC,QAA6B,EAAA;AACjD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE;YAC9E,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,KAAK,QAAQ,EAAE;AACtH,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC1I,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,CAAC;iBAC1D;aACF;SACF;QACD,OAAO;KACR;AAEO,IAAA,OAAO,CAAC,GAAW,EAAA;QACzB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACzB,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAChD;AAED,QAAA,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAEvB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;AAC1B,gBAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;aACnB;iBAAM;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;aAC9C;AACH,SAAC,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,CAAC;KACb;AAEkB,IAAA,YAAY,CAAC,GAAW,EAAA;AACzC,QAAA,OAAO,GAAG;AACP,aAAA,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;KACzC;AAEF;;AC3NK,MAAO,OAAQ,SAAQ,UAAU,CAAA;IAErC,WAAY,CAAA,cAA8B,EAAE,eAAgC,EAAA;AAC1E,QAAA,KAAK,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;KACxC;IAEQ,MAAM,SAAS,CAAC,MAAc,EAAA;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAgB,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;AACtE,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC1D,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;aAC3D;SACF;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAEO,kBAAkB,CAAC,IAAY,EAAE,IAAsB,EAAA;AAC7D,QAAA,IAAI,SAAS,GAAc;AACzB,YAAA,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE;YAC7F,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,KAAK;YAC9F,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG;AACtE,YAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG;AAC1G,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,WAAW,EAAE,SAAS;SACvB,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACzD,gBAAA,IAAI,KAAK,CAAC,EAAE,KAAK,MAAM,EAAE;AACvB,oBAAA,IAAI,KAAK,CAAC,WAAW,EAAE;AACrB,wBAAA,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;AACtC,wBAAA,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC;qBACjC;AAAM,yBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;wBACvB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAChD,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;qBACxD;iBACF;qBAAM;AACL,oBAAA,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;iBAC9D;aACF;SACF;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACtD,gBAAA,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;aACxD;SACF;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBAC3B,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC3C,gBAAA,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC;aAChC;AAAM,iBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC7B,gBAAA,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrD,gBAAA,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aAC7D;SACF;QAED,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;YACxD,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChG,gBAAA,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;aACtC;SACF;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACjD,YAAA,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;SACpC;QAED,IAAI,IAAI,CAAC,aAAa,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;AACjE,YAAA,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;SAC9C;AAED,QAAA,OAAO,SAAS,CAAC;KAClB;IAEO,iBAAiB,CAAC,IAAY,EAAE,IAAS,EAAA;QAC/C,OAAO;AACL,YAAA,IAAI,EAAE,IAAI;YACV,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,OAAO;YAC9D,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;SACjC,CAAC;KACH;IAEO,cAAc,CAAC,IAAY,EAAE,IAAS,EAAA;QAC5C,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG;YAClE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;SACjC,CAAC;KACH;AAEO,IAAA,UAAU,CAAC,IAAS,EAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;AACtH,YAAA,OAAO,KAAK,CAAC;SACd;AAAM,aAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,KAAK,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAC/G,YAAA,OAAO,OAAO,CAAC;SAChB;aAAM;YACL,OAAO;SACR;KACF;AAEF;;ACnHK,MAAO,WAAY,SAAQ,WAAW,CAAA;IAEjC,MAAM,SAAS,CAAC,MAAc,EAAA;AACrC,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACvD;AAEF;;ACNK,MAAO,cAAe,SAAQ,cAAc,CAAA;IAEvC,MAAM,SAAS,CAAC,MAAc,EAAA;AACrC,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACvD;AAEF;;MCFY,OAAO,CAAA;AAII,IAAA,cAAA,CAAA;IAFtB,aAAa,GAAgB,EAAE,CAAC;AAEhC,IAAA,WAAA,CAAsB,cAA8B,EAAA;QAA9B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KACnD;IAED,MAAM,SAAS,CAAC,MAAc,EAAA;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;KACvC;IAES,MAAM,KAAK,CAAC,IAAyB,EAAA;AAC7C,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AAExB,QAAA,MAAM,IAAI,GAAkB;AAC1B,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,KAAK,EAAE,EAAE;SACV,CAAC;AAEF,QAAA,MAAM,IAAI,GAAS;AACjB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAChC,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,UAAU,EAAE,EAAE;SACf,CAAC;AAEF,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvD,YAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,gBAAA,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aACjC;SACF;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEtB,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AAC7D,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACxB;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAEO,IAAA,MAAM,cAAc,CAAC,IAAY,EAAE,IAAS,EAAA;QAClD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,2DAA2D,EAAE,GAAG,CAAC,CAAC;YAChG,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;YAE/D,IAAI,MAAM,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACrB,MAAM,GAAG,MAAM,CAAC;aACjB;AAAM,iBAAA,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChC,MAAM,GAAG,WAAW,CAAC;aACtB;AAAM,iBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,GAAG,MAAM,CAAC;aACjB;AAED,YAAA,MAAM,QAAQ,GAAa;AACzB,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,IAAI,EAAE,QAAQ;aACf,CAAC;AAEF,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,gBAAA,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;aAC1B;AAED,YAAA,OAAO,QAAQ,CAAC;SACjB;AAAM,aAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACnC,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBAC1B,OAAO;AACL,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,WAAW,EAAE,EAAE;AACf,oBAAA,IAAI,EAAE,SAAS;iBAChB,CAAC;aACH;iBAAM;gBACL,OAAO;AACL,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,WAAW,EAAE,EAAE;AACf,oBAAA,IAAI,EAAE,QAAQ;iBACf,CAAC;aACH;SACF;AAAM,aAAA,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE;YACpC,OAAO;AACL,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,IAAI,EAAE,SAAS;aAChB,CAAC;SACH;AAAM,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAE3D,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,YAAA,IAAI,QAAQ,EAAE,SAAS,EAAE;AACvB,gBAAA,GAAG,GAAG,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC;aACjC;AAAM,iBAAA,IAAI,QAAQ,EAAE,IAAI,EAAE;AACzB,gBAAA,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC;aACtB;YAED,OAAO;AACL,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,SAAS,EAAE,GAAG;aACf,CAAC;SACH;AAAM,aAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC5C,YAAA,MAAM,IAAI,GAAS;AACjB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,UAAU,EAAE,EAAE;aACf,CAAC;AAEF,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvD,gBAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,oBAAA,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACjC;aACF;AAED,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9B,OAAO;AACL,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,QAAQ;aACpB,CAAC;SACH;aAAM;AACL,YAAA,OAAO,IAAI,CAAC;SACb;KACF;IAEO,MAAM,SAAS,CAAC,IAAS,EAAA;AAC/B,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,OAAO,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACtC;AAES,IAAA,IAAI,CAAC,IAAY,EAAA;QACzB,IAAI,IAAI,GAAG,CAAC,CAAC;AACb,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,IAAI,CAAC;SACd;QAED,OAAO,EAAE,GAAG,IAAI,CAAC;KAClB;AAEF;;AC9JK,MAAO,OAAQ,SAAQ,OAAO,CAAA;IAEzB,MAAM,SAAS,CAAC,MAAc,EAAA;AACrC,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACvD;AAEF;;MCFY,cAAc,CAAA;AAKL,IAAA,UAAA,CAAA;IAHZ,OAAO,GAAW,4BAA4B,CAAC;AAC/C,IAAA,MAAM,CAAS;AAEvB,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACxC;IAEM,MAAM,aAAa,CAAC,MAAe,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;KACpD;AAEM,IAAA,MAAM,YAAY,CAAC,IAAY,EAAE,IAAY,EAAA;AAClD,QAAA,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACrD;AAEM,IAAA,MAAM,MAAM,CAAC,IAAY,EAAE,IAAY,EAAE,OAAe,EAAA;AAC7D,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;AAC/D,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,MAAM,EAAE,kBAAkB;AAC3B,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAClB,OAAO;SACR;AAED,QAAA,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,YAAA,OAAO,MAAM,CAAC;SACf;aAAM;AACL,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAC/B;KACF;IAEM,QAAQ,CAAC,IAAY,EAAE,IAAY,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC7C;wGArCU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCUY,cAAc,CAAA;AAEzB,IAAA,SAAS,CAAC,aAA4B,EAAA;;QAEpC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,cAAc,KAAI;AAC7D,YAAA,IAAI,SAAS,CAAC,OAAO,EAAE;gBACrB,OAAO;aACR;YAED,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,aAAa,KAAI;AACtD,gBAAA,IAAI,QAAQ,CAAC,EAAE,KAAK,MAAM,EAAE;AAC1B,oBAAA,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;AAClC,oBAAA,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC;AAEnC,oBAAA,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;iBAC9E;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,aAAa,CAAC;KACtB;wGApBU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCJY,eAAe,CAAA;AAGN,IAAA,cAAA,CAAA;AAAwC,IAAA,UAAA,CAAA;AADpD,IAAA,WAAW,CAAuB;IAC1C,WAAoB,CAAA,cAA8B,EAAU,UAAsB,EAAA;QAA9D,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAAU,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QAChF,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;KACzD;IAEM,MAAM,mBAAmB,CAAC,OAA0B,EAAA;QACzD,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAC5B,OAAO;SACR;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,OAAO,GAAG,IAAI,CAAC;AACnB,QAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/E,IAAI,CAAC,GAAG,EAAE;gBACR,OAAO;aACR;YAED,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrF,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO;aACR;SACF;AAAM,aAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAChE,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAC,YAAY,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC;SACvF;QAED,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;wGAvCU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCQY,aAAa,CAAA;IAEhB,WAAW,GAAyC,EAAE,CAAC;AAE/D,IAAA,WAAA,CAAY,cAA8B,EAAE,cAA8B,EAAE,eAAgC,EAAA;QAC1G,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,OAAO,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,IAAI,UAAU,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI,cAAc,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI,cAAc,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAC1F,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;KAC5D;AAED,IAAA,MAAM,SAAS,CAAC,IAAgB,EAAE,MAAc,EAAA;AAC9C,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACjD;aAAM;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;SAC5C;KACF;wGAtBU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCTY,iBAAiB,CAAA;IAEnB,IAAI,GAAoB,EAAE,CAAC;AAC3B,IAAA,aAAa,CAAiB;AAC7B,IAAA,UAAU,GAAE,IAAI,YAAY,EAAmB,CAAC;IAE1D,MAAM,GAAoB,EAAE,CAAC;AAE7B,IAAA,OAAO,CAAU;AACjB,IAAA,KAAK,CAA+B;IACpC,OAAO,GAAY,QAAQ,CAAC;AAE5B,IAAA,KAAK,GAAG;AACN,QAAA,EAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;AAChC,QAAA,EAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAC;AAClC,QAAA,EAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;AAChC,QAAA,EAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAC;KACnC,CAAC;AAEF,IAAA,GAAG,GAAG;AACJ,QAAA,EAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAC;AAC5B,QAAA,EAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAC;AAC9B,QAAA,EAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;KACjC,CAAC;IAEF,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,aAAC,CAAC,CAAC;SACJ;KACF;IAED,GAAG,GAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjD,OAAO;SACR;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,EAAE,EAAE,IAAI,CAAC,KAAK;YACd,IAAI,EAAE,IAAI,CAAC,OAAO;AACnB,SAAA,CAAC,CAAA;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;KACzB;AAED,IAAA,MAAM,CAAC,IAAa,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AACvC,YAAA,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;AAC3B,SAAC,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACnC;wGA1DU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,6JCT9B,+vFAwDA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD/Ca,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,+vFAAA,EAAA,CAAA;8BAMvB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACI,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;MELI,aAAa,CAAA;AAKJ,IAAA,gBAAA,CAAA;AAHX,IAAA,IAAI,CAAU;AACd,IAAA,QAAQ,CAAW;AAE5B,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KAAK;IAE3D,QAAQ,GAAA;KACP;AAED,IAAA,QAAQ,CAAC,IAAY,EAAA;QACnB,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;KACtD;wGAZU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,uGCR1B,qOAOA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDCa,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,qOAAA,EAAA,CAAA;qFAMlB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEJK,eAAe,CAAA;AAEjB,IAAA,GAAG,CAAU;IAEtB,IAAI,GAAW,EAAE,CAAC;AAElB,IAAA,WAAA,GAAA,GAAiB;IAEjB,QAAQ,GAAA;QACN,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE;YAC/B,IAAI,CAAC,IAAI,GAAG,8BAA8B,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,GAAG,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;SAC7G;aAAM;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;SACtB;KACF;wGAfU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,iFCP5B,sCAEA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDKa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,sCAAA,EAAA,CAAA;wDAMpB,GAAG,EAAA,CAAA;sBAAX,KAAK;;;MEAK,cAAc,CAAA;IAEhB,IAAI,GAAiB,EAAE,CAAC;AACxB,IAAA,aAAa,CAAiB;AAC9B,IAAA,YAAY,CAAwC;AACnD,IAAA,UAAU,GAAG,IAAI,YAAY,EAAgB,CAAC;IAExD,MAAM,GAAiB,EAAE,CAAC;AAE1B,IAAA,OAAO,CAAU;AACjB,IAAA,OAAO,CAAU;AAEjB,IAAA,gBAAgB,GAAG;AACjB,QAAA,EAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAC;AACnB,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAC;AAChC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAC;AACrC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAC;AAC9B,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAC;AAC9B,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,oBAAoB,EAAC;AACvC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAC;AACpC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAC;AAC7B,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAC;AACzB,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,qBAAqB,EAAC;AACxC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,oBAAoB,EAAC;AACvC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,sBAAsB,EAAC;AACzC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAC;AAC3B,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAC;AACtC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAC;AACtC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,uBAAuB,EAAC;AAC1C,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAC;AACpC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAC;AAChC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,qBAAqB,EAAC;AACxC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAC;AACpC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,sBAAsB,EAAC;AACzC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,EAAC;AAClC,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAC;AACxB,QAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAC;KAC/B,CAAA;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,aAAC,CAAC,CAAA;SACH;KACF;IAED,GAAG,GAAA;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAClC,OAAO;SACR;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,IAAI,EAAE,IAAI,CAAC,OAAO;AACnB,SAAA,CAAC,CAAA;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;KAC1B;AAED,IAAA,aAAa,CAAC,UAAkB,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;YAC5B,OAAO;SACR;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KACnC;IAED,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AACxC,gBAAA,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC;AAC/B,aAAC,CAAC,CAAC;YACH,OAAO,CAAC,QAAQ,CAAC;AACnB,SAAC,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;QACT,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC1B,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC9B;wGAvFU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,wLCT3B,4/FAuDA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD9Ca,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,4/FAAA,EAAA,CAAA;8BAMpB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACI,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;MEMI,eAAe,CAAA;AAmGN,IAAA,aAAA,CAAA;AAAsC,IAAA,eAAA,CAAA;AAA0C,IAAA,cAAA,CAAA;AAAwC,IAAA,YAAA,CAAA;AAAgC,IAAA,gBAAA,CAAA;AAAwC,IAAA,gBAAA,CAAA;AAjG3M,IAAA,aAAa,GAAkB;AACtC,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,KAAK,EAAE,EAAE;KACV,CAAC;IACO,gBAAgB,GAAY,KAAK,CAAC;IAClC,aAAa,GAAY,IAAI,CAAC;IAC9B,QAAQ,GAAY,KAAK,CAAC;IAC1B,EAAE,GAAW,EAAE,CAAC;AAEhB,IAAA,SAAS,CAAoB;AAC7B,IAAA,QAAQ,CAAoB;AAC5B,IAAA,MAAM,CAAoB;AAC1B,IAAA,SAAS,CAAoB;AAC7B,IAAA,UAAU,CAAoB;AAC9B,IAAA,SAAS,CAAoB;AAC7B,IAAA,UAAU,CAAoB;AAE7B,IAAA,IAAI,GAAG,IAAI,YAAY,EAAiB,CAAC;AACzC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAiB,CAAC;AAExB,IAAA,iBAAiB,CAAc;AACpC,IAAA,YAAY,CAAc;AAElD,IAAA,SAAS,GAAc;AACrB,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,MAAM,EAAE,EAAE;KACX,CAAC;AAEF,IAAA,KAAK,GAAU;AACb,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,IAAI,EAAE,EAAE;KACT,CAAC;AAEF,IAAA,IAAI,GAAS;AACX,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,QAAQ,GAAkB,EAAE,CAAC;IAC7B,QAAQ,GAAkB,EAAE,CAAC;AAE7B,IAAA,QAAQ,GAAa;AACnB,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,IAAI,EAAE,QAAQ;KACf,CAAC;IAEF,MAAM,GAAW,EAAE,CAAC;IACpB,UAAU,GAAe,UAAU,CAAC;IACpC,MAAM,GAAW,EAAE,CAAC;AAEpB,IAAA,YAAY,CAAU;AACtB,IAAA,iBAAiB,CAAU;IAC3B,SAAS,GAAY,KAAK,CAAC;IAE3B,OAAO,GAAY,KAAK,CAAC;IACzB,KAAK,GAAY,KAAK,CAAC;AACvB,IAAA,QAAQ,CAAW;AAEnB,IAAA,OAAO,CAAU;AACjB,IAAA,QAAQ,CAAY;AAEpB,IAAA,YAAY,GAAyC,CAAC;AACpD,YAAA,IAAI,EAAE,0BAA0B;AAChC,YAAA,KAAK,EAAE,0BAA0B;SAClC,EAAE;AACD,YAAA,IAAI,EAAE,mCAAmC;AACzC,YAAA,KAAK,EAAE,mCAAmC;SAC3C,EAAE;AACD,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,KAAK,EAAE,kBAAkB;SAC1B,EAAE;AACD,YAAA,IAAI,EAAE,qBAAqB;AAC3B,YAAA,KAAK,EAAE,qBAAqB;SAC7B,EAAE;AACD,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,KAAK,EAAE,YAAY;SACpB,EAAE;AACD,YAAA,IAAI,EAAE,iBAAiB;AACvB,YAAA,KAAK,EAAE,iBAAiB;AACzB,SAAA,CAAC,CAAC;AAEH,IAAA,OAAO,GAAY;AACjB,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,KAAK,EAAE,EAAE;KACV,CAAC;IAEF,WAAoB,CAAA,aAA4B,EAAU,eAAgC,EAAU,cAA8B,EAAU,YAAsB,EAAU,gBAA8B,EAAU,gBAAkC,EAAA;QAAlO,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAAU,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAAU,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAAU,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAU;QAAU,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAc;QAAU,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KAAK;AAE3P,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,EAAE,CAAC;SACpC;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3D,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9C,gBAAA,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAC7B,oBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;iBAC/F;aACF;SACF;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvE,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,MAAM,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACtC;AAED,IAAA,OAAO,CAAC,SAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,SAAS,CAAC;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAe,EAAE,KAAgB,KAAI;YACvE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,aAAa,CAAC,OAAY,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG;AACf,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,WAAW,EAAE,SAAS;SACvB,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnE,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAEpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE;gBAClD,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,sEAAsE;iBAChF,CAAC;gBACF,OAAO;aACR;YAED,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,EAAE,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;IAED,aAAa,CAAC,OAAY,EAAE,cAAsB,EAAA;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QAElF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnE,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AACxB,gBAAA,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;aAC1B;AACD,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACrB,gBAAA,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;aACvB;YAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE;gBAClD,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,sEAAsE;iBAChF,CAAC;gBACF,OAAO;aACR;YAED,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;YAC1D,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,EAAE,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,eAAe,CAAC,cAAsB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;SACR;AAED,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,cAAc,EAAE;AAC7C,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;SACpC;aAAM;AACL,YAAA,IAAI,CAAC,iBAAiB,GAAG,cAAc,CAAC;SACzC;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAU,EAAE,KAAW,KAAI;YACxD,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,QAAQ,CAAC,OAAY,EAAA;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,WAAW,EAAE,EAAE;SAChB,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnE,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YAErB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE;gBAC5C,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,gEAAgE;iBAC1E,CAAC;gBACF,OAAO;aACR;YAED,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,EAAE,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,CAAC,OAAY,EAAE,SAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAEnE,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnE,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;aACtB;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE;gBAC5C,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,gEAAgE;iBAC1E,CAAC;gBACF,OAAO;aACR;YAED,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;YAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,EAAE,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;IAED,iBAAiB,CAAC,SAAiB,EAAE,UAAkB,EAAA;QACrD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACxC,OAAO;SACR;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;QAC5D,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACxB,OAAO;SACR;AAED,QAAA,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;KAC5B;AAED,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;SACR;AAED,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AACnC,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;SAC/B;aAAM;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;SAC/B;KACF;AAGD,IAAA,mBAAmB,CAAC,KAAoB,EAAA;QACtC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACnC,OAAO;SACR;AAED,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE;YAC7E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACpE;AAAM,aAAA,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE;AACpF,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC9C;aAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC5C,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC5C;AAAM,aAAA,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YAC/E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SACrD;AAAM,aAAA,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AAC/E,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACpC;aAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC5C,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAClC;KACF;AAED,IAAA,YAAY,CAAC,IAAgB,EAAA;QAC3B,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE,CAAC;SACX;AAED,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,EAAE,CAAC;SACX;QAED,IAAI,MAAM,GAAkB,EAAE,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACtC,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACtB;SACF;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,mBAAmB,CAAC,aAAqB,EAAA;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7D,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE;gBAC3D,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aACzC;SACF;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,cAAc,CAAC,QAAgB,EAAA;QAC7B,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK,EAAE;AACtJ,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxD,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjD,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,cAAc,CAAC,QAAgB,EAAA;AAC7B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxD,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACjD,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACpC;SACF;QAED,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC;SACb;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAEtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1D,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;gBACrD,SAAS;aACV;AAED,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAClD,IAAI,CAAC,KAAK,EAAE;gBACV,SAAS;aACV;AAED,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;AAC1B,oBAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;iBACjB;aACF;SACF;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,mBAAmB,CAAC,MAAa,EAAA;QAC/B,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,EAAE,CAAC;SACX;QAED,IAAI,MAAM,GAAkB,EAAE,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE;AAChC,gBAAA,IAAI,IAAI,EAAE,IAAI,EAAE;AACd,oBAAA,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC;oBAC9B,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;qBAC9C;iBACF;qBAAM;AACL,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACxB;aACF;SACF;AAED,QAAA,OAAO,MAAM,CAAC;KACf;IAED,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,aAAa,GAAA;QACX,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACvC,IAAI,OAAO,GAA2B,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SAC5F;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KAC7B;IAED,cAAc,GAAA;QACZ,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,IAAI,QAAQ,GAA2B,EAAE,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/E,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SAC7F;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC/B;IAED,uBAAuB,GAAA;QACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC;SACnC;KACF;AAED,IAAA,eAAe,CAAC,cAAsB,EAAA;QACpC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AAED,IAAA,aAAa,CAAC,cAAsB,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;YAClD,OAAO;SACR;QAED,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAC7F,QAAA,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE;AACxC,YAAA,CAAC,EAAE,CAAC;YACJ,OAAO,GAAG,YAAY,CAAC,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;SAC3C;AACD,QAAA,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC;QAE5B,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,UAAU,CAAC,cAAsB,EAAE,aAAqB,EAAA;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAChG,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,YAAY,CAAC,cAAsB,EAAE,aAAqB,EAAA;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAChG,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,cAAc,CAAC,cAAsB,EAAE,aAAqB,EAAA;QAC1D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;YAClD,OAAO;SACR;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,OAAO,CAAC,cAAsB,EAAE,UAAkB,EAAA;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,SAAS,CAAC,cAAsB,EAAE,UAAkB,EAAA;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,WAAW,CAAC,cAAsB,EAAE,UAAkB,EAAA;QACpD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;YAClD,OAAO;SACR;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AAED,IAAA,UAAU,CAAC,SAAiB,EAAA;QAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AAED,IAAA,QAAQ,CAAC,SAAiB,EAAA;QACxB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACxC,OAAO;SACR;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC9E,QAAA,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;AACnC,YAAA,CAAC,EAAE,CAAC;YACJ,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;SACtC;AACD,QAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;QAEvB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,UAAU,CAAC,SAAiB,EAAE,aAAqB,EAAA;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,YAAY,CAAC,SAAiB,EAAE,aAAqB,EAAA;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,YAAY,CAAC,OAAY,EAAE,SAAiB,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnE,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE;gBAClD,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,sEAAsE;iBAChF,CAAC;gBACF,OAAO;aACR;AAED,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,EAAE,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,YAAY,CAAC,OAAY,EAAE,SAAiB,EAAE,aAAqB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC;QAC7D,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QAExD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE;AACxC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;SAC7B;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACnE,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE;gBAClD,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,sEAAsE;iBAChF,CAAC;gBACF,OAAO;aACR;AAED,YAAA,KAAK,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,EAAE,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;IAED,cAAc,CAAC,SAAiB,EAAE,aAAqB,EAAA;QACrD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACxC,OAAO;SACR;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AAED,IAAA,aAAa,CAAC,YAAoB,EAAA;QAChC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AAED,IAAA,YAAY,CAAC,OAAY,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI;AAC7C,YAAA,IAAI,EAAE,MAAM;SACb,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,MAAM,KAAI;YACzE,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAE1C,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtE,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;gBACtE,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;aAC7C;iBAAM;AACL,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,SAAS,CAAC;aACzC;AAED,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,EAAE,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,OAAY,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,KAAK,EAAE,EAAE;SACV,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,MAAM,KAAI;AACzE,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,YAAA,OAAO,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACxE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEzC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,EAAE,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,UAAU,CAAC,OAAY,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AAEjB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,MAAM,KAAI;AAC3D,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAEpB,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAE9E,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YAChD,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAEpC,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,EAAE,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,UAAU,CAAC,OAAY,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAE1D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACrD,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,EAAE,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,OAAO,CAAC,OAAY,EAAA;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,uBAAuB,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAC1F,CAAC,MAAM,KAAI;AACT,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/C,SAAC,EACD,CAAC,MAAM,KAAI;AACT,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CACF,CAAC;KACH;IAED,oBAAoB,GAAA;QAClB,IAAI,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC5D,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;AAChC,YAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SACtF;KACF;IAEO,mBAAmB,GAAA;AACzB,QAAA,OAAO,oBAAoB,GAAG,IAAI,CAAC,EAAE,CAAC;KACvC;IAEO,oBAAoB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;KACvI;wGA5xBU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,yrBCpB5B,0z5CAm0BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,cAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD/yBa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,0z5CAAA,EAAA,CAAA;qNAMpB,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAKG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,EAAE,EAAA,CAAA;sBAAV,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEI,IAAI,EAAA,CAAA;sBAAb,MAAM;gBACG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAEsB,iBAAiB,EAAA,CAAA;sBAA7C,SAAS;uBAAC,gBAAgB,CAAA;gBACH,YAAY,EAAA,CAAA;sBAAnC,SAAS;uBAAC,WAAW,CAAA;gBAuStB,mBAAmB,EAAA,CAAA;sBADlB,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ME1UjC,sBAAsB,CAAA;AACjC,IAAA,aAAa,CACX,SAAkB,EAClB,YAAoC,EACpC,YAAiC,EACjC,SAA+B,EAAA;AAE/B,QAAA,IAAI,SAAS,YAAY,eAAe,EAAE;AACxC,YAAA,IAAI,SAAS,CAAC,KAAK,EAAE;AACnB,gBAAA,IAAI,OAAO,CAAC,mGAAmG,CAAC,EAAE;AAChH,oBAAA,OAAO,IAAI,CAAC;iBACb;qBAAM;AACL,oBAAA,OAAO,KAAK,CAAC;iBACd;aACF;SACF;AAED,QAAA,OAAO,IAAI,CAAC;KACb;wGAlBU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCoBY,sBAAsB,CAAA;wGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,iBAf/B,iBAAiB;YACjB,aAAa;YACb,eAAe;YACf,cAAc;AACd,YAAA,eAAe,aAGf,SAAS;YACT,YAAY;AACZ,YAAA,WAAW,aAGX,eAAe,CAAA,EAAA,CAAA,CAAA;AAGN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAR/B,SAAS;YACT,YAAY;YACZ,WAAW,CAAA,EAAA,CAAA,CAAA;;4FAMF,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAjBlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,iBAAiB;wBACjB,aAAa;wBACb,eAAe;wBACf,cAAc;wBACd,eAAe;AAChB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,SAAS;wBACT,YAAY;wBACZ,WAAW;AACZ,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,eAAe;AAChB,qBAAA;AACF,iBAAA,CAAA;;;AC1BD;;AAEG;;ACFH;;AAEG;;;;"}