{"version":3,"file":"index.min.mjs","sources":["../src/utils.ts","../src/type.ts","../src/mongo.ts","../src/index.ts"],"sourcesContent":["export type StringifyFunction = (\n  obj: any,\n  ...args: any[]\n) => string\n\nexport type ParseFunction = (\n  repr: string,\n  reviver: (k: string, v: any) => any\n) => any\n\nexport interface IRegistration {\n  item?: Function | RegExpConstructor\n  prefix?: string\n  key?: string\n  toJSON?: (_this: any, parent: any) => any,\n  fromJSON?: ((current: any, parent: any) => any) | null\n}\n\nexport function isClassConstructor (k: any): k is { prototype: { constructor: any } } {\n  return !!(k.prototype && k.prototype.constructor)\n}\n\nexport function isClassObject (k: any): k is { constructor: { name: string }} {\n  return !!(k.constructor && typeof k.constructor.name === 'string')\n}\n\nexport function compareNotFalsy (a: any, b: any) {\n  return !!a && a === b\n}\n\nexport function getFunctionName (R: Function) {\n  return R.toString().replace(/^function /, '').split('(')[0]\n}\n\nexport function functionToString (R: Function) {\n  return R.toString().replace(/^.+?\\{/s, '').replace(/\\}.*?$/s, '').trim().replace(/[\\t\\n\\r ]*/g, ' ')\n}\n\n/**\n * https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\n *\n * https://stackoverflow.com/a/52171480/9023855\n *\n * @param str\n * @param seed\n */\nexport function cyrb53 (str: string, seed = 0) {\n  let h1 = 0xdeadbeef ^ seed; let h2 = 0x41c6ce57 ^ seed\n  for (let i = 0, ch; i < str.length; i++) {\n    ch = str.charCodeAt(i)\n    h1 = Math.imul(h1 ^ ch, 2654435761)\n    h2 = Math.imul(h2 ^ ch, 1597334677)\n  }\n  h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909)\n  h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909)\n  return 4294967296 * (2097151 & h2) + (h1 >>> 0)\n}\n\n/**\n * https://stackoverflow.com/questions/34699529/convert-javascript-class-instance-to-plain-object-preserving-methods\n */\nexport function extractObjectFromClass (o: any, exclude: string[] = []) {\n  const content = {} as any\n\n  Object.getOwnPropertyNames(o).map((prop) => {\n    const val = o[prop]\n    if (['constructor', ...exclude].includes(prop)) {\n      return\n    }\n    content[prop] = val\n  })\n\n  return o\n}\n","export type TypeNativeSerializable = 'string' | 'number' | 'boolean'\nexport type TypeNativeNonSerializable = 'bigint' | 'symbol' | 'undefined' | 'function' | 'object'\nexport type TypeExtra = 'Null' | 'Array' | 'Named' | 'Constructor' | 'NaN' | 'Infinity'\nexport type TypeAll = TypeNativeSerializable | TypeNativeNonSerializable | TypeExtra\n\nexport function getTypeofDetailed (a: any) {\n  const typeof_ = typeof a\n  const output: {\n    typeof_: TypeNativeSerializable | TypeNativeNonSerializable\n    is: TypeAll[]\n    id?: Function\n    description?: string\n    entry: any\n  } = {\n    typeof_,\n    is: [],\n    entry: a\n  }\n\n  if (typeof_ === 'object') {\n    if (!a) {\n      output.is = ['Null']\n    } else {\n      /**\n       * constructor will return Class constructor\n       * or Object constructor for an Object\n       *\n       * The actual constructor name can be accessed via\n       * `constructor.name`\n       *\n       * constructor can checked for equality as well, for example\n       * Object === Object\n       *\n       * Not sure what happens when you `extends` Object or Array\n       * in which case, it might be better to check `constructor.name`\n       */\n      output.id = a.constructor\n      if (output.id === Object) {\n        output.is = ['object']\n      } else if (output.id === Array) {\n        output.is = ['Array']\n        /**\n         * Array.isArray() also includes classes that extend Array\n         * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\n         *\n         * Given a TypedArray instance, false is always returned\n         */\n      // } else if (Array.isArray(a)) {\n      //   output.is = ['NamedArray']\n      } else {\n        output.is = ['Named']\n      }\n    }\n  } else if (typeof_ === 'function') {\n    /**\n     * Checking for Class constructor is a difficult topic.\n     * https://stackoverflow.com/questions/40922531/how-to-check-if-a-javascript-function-is-a-constructor\n     *\n     * Probably the safest way is by checking prototype.\n     *\n     * new a() is more failsafe, but is dangerous. (because you ran a function)\n     */\n    if (!a.prototype) {\n      /**\n       * Arrow function doesn't have a prototype\n       */\n      output.is = ['function']\n    } else {\n      output.id = a.prototype.constructor\n\n      if (Object.getOwnPropertyNames(a.prototype).some((el) => el !== 'constructor')) {\n        output.description = 'Can also be a class constructor in some cases'\n        if (/[A-Z]/.test(a.prototype.constructor.name[0])) {\n          output.is = ['Constructor', 'function']\n        } else {\n          output.is = ['function', 'Constructor']\n        }\n      } else {\n        output.is = ['Constructor']\n      }\n    }\n  } else if (typeof_ === 'number') {\n    if (isNaN(a)) {\n      output.is = ['NaN'] // JSON.stringify returns null\n    } else if (!isFinite(a)) {\n      output.is = ['Infinity'] // JSON.stringify returns null\n    } else if (Math.round(a) === a) {\n      output.description = 'Integer' // JSON.stringify cannot distinguish, nor do JavaScript\n    }\n  }\n\n  if (output.is.length === 0) {\n    output.is = [typeof_]\n  }\n\n  return output\n}\n\nexport function isArray (a: any, t?: ReturnType<typeof getTypeofDetailed>): a is any[] {\n  return (t || getTypeofDetailed(a)).is[0] === 'Array'\n}\n\nexport function isObject (a: any, t?: ReturnType<typeof getTypeofDetailed>): a is Record<string, any> {\n  return (t || getTypeofDetailed(a).is[0]) === 'object'\n}\n","import { IRegistration } from './utils'\n\nexport const MongoDateAdapter: IRegistration = {\n  prefix: '',\n  key: '$date',\n  item: Date,\n  fromJSON: (current) => new Date(current)\n}\n\nexport const MongoRegExpAdapter: IRegistration = {\n  prefix: '',\n  key: '$regex',\n  item: RegExp,\n  fromJSON (current: string, parent: { $options?: string }) {\n    return new RegExp(current, parent.$options)\n  },\n  toJSON (_this: any, parent: any) {\n    parent.$options = _this.flags\n    return _this.source\n  }\n}\n","import {\n  StringifyFunction, ParseFunction, IRegistration,\n  isClassConstructor, getFunctionName, compareNotFalsy, cyrb53, extractObjectFromClass\n} from './utils'\nimport { getTypeofDetailed, isArray, isObject } from './type'\n\nexport class Serialize {\n  private registrar: {\n    R?: Function\n    key: any\n    toJSON?: (_this: any, parent: any) => any\n    fromJSON?: (current: any, parent: any) => any\n  }[] = []\n\n  private prefix = '__'\n  private stringifyFunction: StringifyFunction = JSON.stringify\n  private parseFunction: ParseFunction = JSON.parse\n\n  private undefinedProxy = Symbol('undefined')\n\n  constructor (\n    /**\n     * For how to write a replacer and reviver, see\n     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON\n     */\n    options: {\n      prefix?: string\n      stringify?: StringifyFunction,\n      parse?: ParseFunction\n    } = {}\n  ) {\n    this.prefix = typeof options.prefix === 'string' ? options.prefix : this.prefix\n    this.stringifyFunction = options.stringify || this.stringifyFunction\n    this.parseFunction = options.parse || this.parseFunction\n\n    this.register(\n      { item: Date },\n      {\n        item: RegExp,\n        toJSON (_this: any) {\n          const { source, flags } = _this\n          return { source, flags }\n        },\n        fromJSON (current: any) {\n          const { source, flags } = current\n          return new RegExp(source, flags)\n        }\n      },\n      WriteOnlyFunctionAdapter,\n      {\n        item: Set,\n        toJSON (_this) {\n          return Array.from(_this)\n        }\n      },\n      {\n        key: 'Infinity',\n        toJSON (_this: number) {\n          return _this.toString()\n        },\n        fromJSON (current: string) {\n          return Number(current)\n        }\n      },\n      {\n        key: 'bigint',\n        toJSON (_this: BigInt) {\n          return _this.toString()\n        },\n        fromJSON (current: string) {\n          return BigInt(current)\n        }\n      },\n      {\n        key: 'symbol',\n        toJSON (_this: Symbol) {\n          return {\n            content: _this.toString(),\n            rand: Math.random().toString(36).substr(2)\n          }\n        },\n        fromJSON ({ content }) {\n          return Symbol(content.replace(/^Symbol\\(/i, '').replace(/\\)$/, ''))\n        }\n      },\n      {\n        key: 'NaN',\n        toJSON: () => 'NaN',\n        fromJSON: () => NaN\n      }\n    )\n  }\n\n  /**\n   *\n   * @param rs Accepts Class constructors or IRegistration\n   */\n  register (...rs: ({ new(...args: any[]): any } | IRegistration)[]) {\n    this.registrar.unshift(\n      ...rs.map((r) => {\n        if (typeof r === 'function') {\n          const { __prefix__: prefix, __key__: key, fromJSON, toJSON } = r as any\n\n          return {\n            item: r,\n            prefix,\n            key,\n            fromJSON,\n            toJSON\n          }\n        }\n\n        return r\n      }).map(({\n        item: R, prefix, key, toJSON, fromJSON\n      }) => {\n        // @ts-ignore\n        fromJSON = typeof fromJSON === 'undefined'\n          ? (arg: any) => isClassConstructor(R) ? new R(arg) : arg\n          : (fromJSON || undefined)\n        key = this.getKey(prefix, key || (isClassConstructor(R)\n          ? R.prototype.constructor.name\n          : typeof R === 'function' ? getFunctionName(R) : R))\n\n        return {\n          R,\n          key,\n          toJSON,\n          fromJSON\n        }\n      })\n    )\n  }\n\n  unregister (...rs: ({ new(...args: any[]): any } | IRegistration)[]) {\n    this.registrar = this.registrar.filter(({ R, key }) => {\n      return !rs.some((r) => {\n        if (typeof r === 'function') {\n          return !!R && r.constructor === R.constructor\n        } else {\n          return compareNotFalsy(r.key, key) || (!!r.item && !!R && compareNotFalsy(r.item.constructor, R.constructor))\n        }\n      })\n    })\n  }\n\n  /**\n   *\n   * @param obj Uses `JSON.stringify` with sorter Array by default\n   */\n  stringify (obj: any) {\n    const clonedObj = this.deepCloneAndFindAndReplace([obj], 'jsonCompatible')[0]\n\n    const keys = new Set<string>()\n    const getAndSortKeys = (a: any) => {\n      if (a) {\n        if (typeof a === 'object' && a.constructor.name === 'Object') {\n          for (const k of Object.keys(a)) {\n            keys.add(k)\n            getAndSortKeys(a[k])\n          }\n        } else if (Array.isArray(a)) {\n          a.map((el) => getAndSortKeys(el))\n        }\n      }\n    }\n    getAndSortKeys(clonedObj)\n    return this.stringifyFunction(clonedObj, Array.from(keys).sort())\n  }\n\n  hash (obj: any) {\n    return cyrb53(this.stringify(obj)).toString(36)\n  }\n\n  clone<T> (obj: T): T {\n    return this.deepCloneAndFindAndReplace([obj], 'clone')[0]\n  }\n\n  deepEqual (o1: any, o2: any): boolean {\n    const t1 = getTypeofDetailed(o1)\n    const t2 = getTypeofDetailed(o2)\n\n    if (t1.typeof_ === 'function' || t1.typeof_ === 'object') {\n      if (isArray(o1, t1)) {\n        return o1.map((el1, k) => {\n          return this.deepEqual(el1, o2[k])\n        }).every((el) => el)\n      } else if (isObject(o1, t1)) {\n        return Object.entries(o1).map(([k, el1]) => {\n          return this.deepEqual(el1, o2[k])\n        }).every((el) => el)\n      } else {\n        return this.hash(o1) === this.hash(o2)\n      }\n    } else if (t1.is[0] === 'NaN' && t2.is[0] === 'NaN') {\n      /**\n       * Cannot compare directly because of infamous `NaN !== NaN`\n       */\n      return this.hash(o1) === this.hash(o2)\n    }\n\n    return o1 === o2\n  }\n\n  /**\n   *\n   * @param repr Uses `JSON.parse` by default\n   */\n  parse (repr: string) {\n    return this.parseFunction(repr, (_, v) => {\n      if (v && typeof v === 'object') {\n        for (const { key, fromJSON } of this.registrar) {\n          if (v[key]) {\n            return typeof fromJSON === 'function' ? fromJSON(v[key], v) : v\n          }\n        }\n      }\n      return v\n    })\n  }\n\n  private getKey (prefix: any, name: any) {\n    return (typeof prefix === 'string' ? prefix : this.prefix) + (name || '')\n  }\n\n  /**\n   *\n   * @param o\n   * @param type Type of findAndReplace\n   */\n  private deepCloneAndFindAndReplace (o: any, type: 'jsonCompatible' | 'clone') {\n    const t = getTypeofDetailed(o)\n\n    if (t.is[0] === 'Array') {\n      const obj = [] as any[]\n      o.map((el: any, i: number) => {\n        const v = this.deepCloneAndFindAndReplace(el, type)\n        /**\n         * `undefined` can't be ignored in serialization, and will be JSON.stringify as `null`\n         */\n        if (v === this.undefinedProxy) {\n          obj[i] = undefined\n        } else {\n          obj[i] = v\n        }\n      })\n\n      return obj\n    } else if (t.is[0] === 'object') {\n      const obj = {} as any\n      Object.entries(o).map(([k, el]) => {\n        const v = this.deepCloneAndFindAndReplace(el, type)\n        if (v === undefined) {\n\n        } else if (v === this.undefinedProxy) {\n          obj[k] = undefined\n        } else {\n          obj[k] = v\n        }\n      })\n\n      return obj\n    } else if (t.is[0] === 'Named') {\n      const k = this.getKey(o.__prefix__, o.__name__ || o.constructor.name)\n\n      for (const { R, key, toJSON, fromJSON } of this.registrar) {\n        if ((!!R && compareNotFalsy(o.constructor, R)) ||\n            compareNotFalsy(k, key)) {\n          if (!fromJSON && type === 'clone') {\n            continue\n          }\n\n          const p = {} as any\n          p[key] = (\n            (toJSON || (!!R && R.prototype.toJSON) || o.toJSON || o.toString).bind(o)\n          )(o, p)\n\n          if (p[key] === undefined) {\n            return undefined\n          } else if (type === 'clone') {\n            return fromJSON!(p[key], p)\n          } else {\n            return p\n          }\n        }\n      }\n\n      if (type === 'clone') {\n        return o\n      } else {\n        return {\n          [k]: extractObjectFromClass(o)\n        }\n      }\n    } else if (t.is[0] === 'Constructor' || t.is[0] === 'function' || t.is[0] === 'Infinity' ||\n        t.is[0] === 'bigint' || t.is[0] === 'symbol' || t.is[0] === 'NaN') {\n      let is = t.is[0]\n      if (is === 'Constructor') {\n        is = 'function'\n      }\n\n      /**\n       * functions should be attempted to be deep-cloned first\n       * because functions are objects and can be attach properties\n       */\n      if (type === 'clone' && is !== 'function') {\n        return o\n      }\n\n      const k = this.getKey(undefined, is)\n      const { R, toJSON, fromJSON } = this.registrar.filter(({ key }) => key === k)[0] || {}\n\n      if (type === 'clone' && !fromJSON) {\n        return o\n      }\n\n      const p = {} as any\n      p[k] = (\n        (toJSON || (!!R && R.prototype.toJSON) || o.toJSON || o.toString).bind(o)\n      )(o, p)\n\n      if (type === 'clone') {\n        return fromJSON!(p[k], p)\n      } else if (p[k] === undefined) {\n        return undefined\n      } else {\n        return p\n      }\n    } else if (t.is[0] === 'undefined') {\n      if (type === 'clone') {\n        return this.undefinedProxy\n      }\n\n      const k = this.getKey(undefined, t.is[0])\n      const { R, toJSON } = this.registrar.filter(({ key }) => key === k)[0] || {}\n\n      const p = {} as any\n      p[k] = (\n        (toJSON || (!!R && R.prototype.toJSON) || (() => {})).bind(o)\n      )(o, p)\n\n      return p[k] === undefined ? undefined : p\n    }\n\n    return o\n  }\n}\n\nexport const FullFunctionAdapter: IRegistration = {\n  key: 'function',\n  toJSON: (_this) => _this.toString().trim().replace(/\\[native code\\]/g, ' ').replace(/[\\t\\n\\r ]+/g, ' '),\n  fromJSON: (content: string) => {\n    // eslint-disable-next-line no-new-func\n    return new Function(`return ${content}`)()\n  }\n}\n\nexport const WriteOnlyFunctionAdapter: IRegistration = {\n  ...FullFunctionAdapter,\n  fromJSON: null\n}\n\nexport const UndefinedAdapter: IRegistration = {\n  key: 'undefined',\n  toJSON: () => 'undefined',\n  fromJSON: () => undefined\n}\n\nexport * from './mongo'\nexport * from './utils'\n"],"names":["isClassConstructor","k","prototype","constructor","isClassObject","name","compareNotFalsy","a","b","getFunctionName","R","toString","replace","split","functionToString","trim","cyrb53","str","seed","Math","imul","h1","h2","ch","i","length","charCodeAt","extractObjectFromClass","o","exclude","Object","getOwnPropertyNames","map","prop","includes","getTypeofDetailed","round","typeof_","output","is","entry","id","Array","some","el","description","test","isNaN","isFinite","isArray","t","isObject","MongoDateAdapter","prefix","key","item","Date","fromJSON","current","MongoRegExpAdapter","RegExp","parent","$options","toJSON","_this","flags","source","Serialize","options","JSON","stringify","parse","Symbol","stringifyFunction","parseFunction","register","WriteOnlyFunctionAdapter","Set","from","BigInt","content","rand","random","substr","NaN","rs","registrar","unshift","r","__prefix__","__key__","arg","getKey","unregister","filter","obj","clonedObj","deepCloneAndFindAndReplace","keys","getAndSortKeys","add","sort","hash","clone","deepEqual","o1","o2","t1","t2","el1","every","entries","repr","_","v","type","undefinedProxy","__name__","p","bind","FullFunctionAdapter","Function","UndefinedAdapter"],"mappings":"QAkBgBA,CAAAA,mBAAoBC,GAClC,MAAO,CAAC,EAAEA,CAAC,CAACC,SAAF,EAAeD,CAAC,CAACC,SAAF,CAAYC,WAA7B,CACT,SAEeC,CAAAA,cAAeH,GAC7B,MAAO,CAAC,EAAEA,CAAC,CAACE,WAAF,EAA+C,QAA9B,QAAOF,CAAAA,CAAC,CAACE,WAAF,CAAcE,IAAxC,CACT,SAEeC,CAAAA,gBAAiBC,EAAQC,GACvC,MAAO,CAAC,CAACD,CAAF,EAAOA,CAAC,GAAKC,CACrB,SAEeC,CAAAA,gBAAiBC,GAC/B,MAAOA,CAAAA,CAAC,CAACC,QAAF,GAAaC,OAAb,CAAqB,YAArB,CAAmC,EAAnC,EAAuCC,KAAvC,CAA6C,GAA7C,EAAkD,CAAlD,CACR,SAEeC,CAAAA,iBAAkBJ,GAChC,MAAOA,CAAAA,CAAC,CAACC,QAAF,GAAaC,OAAb,CAAqB,SAArB,CAAgC,EAAhC,EAAoCA,OAApC,CAA4C,SAA5C,CAAuD,EAAvD,EAA2DG,IAA3D,GAAkEH,OAAlE,CAA0E,aAA1E,CAAyF,GAAzF,CACR,SAUeI,CAAAA,OAAQC,EAAaC,CAAI,CAAG,SAInCC,IAAI,CAACC,QAHRC,CAAAA,CAAE,CAAG,WAAaH,EAAUI,CAAE,CAAG,WAAaJ,EAClD,IAAK,GAAWK,CAAAA,CAAX,CAAIC,CAAC,CAAG,CAAb,CAAoBA,CAAC,CAAGP,CAAG,CAACQ,MAA5B,CAAoCD,CAAC,EAArC,CACED,CAAE,CAAGN,CAAG,CAACS,UAAJ,CAAeF,CAAf,CADP,CAEEH,CAAE,CAAG,EAAUA,CAAE,CAAGE,CAAf,CAAmB,UAAnB,CAFP,CAGED,CAAE,CAAG,EAAUA,CAAE,CAAGC,CAAf,CAAmB,UAAnB,CAHP,CAOA,MAFAF,CAAAA,CAAE,CAAG,EAAUA,CAAE,CAAGA,CAAE,GAAK,EAAtB,CAA0B,UAA1B,EAAwC,EAAUC,CAAE,CAAGA,CAAE,GAAK,EAAtB,CAA0B,UAA1B,CAE7C,CADAA,CAAE,CAAG,EAAUA,CAAE,CAAGA,CAAE,GAAK,EAAtB,CAA0B,UAA1B,EAAwC,EAAUD,CAAE,CAAGA,CAAE,GAAK,EAAtB,CAA0B,UAA1B,CAC7C,CAAO,YAAc,QAAUC,CAAxB,GAA+BD,CAAE,GAAK,CAAtC,CACR,SAKeM,CAAAA,uBAAwBC,EAAQC,EAAoB,IAWlE,MARAC,CAAAA,MAAM,CAACC,mBAAP,CAA2BH,CAA3B,EAA8BI,GAA9B,CAAmCC,CAAD,GACpBL,CAAC,CAACK,CAAD,EACT,CAAC,aAAD,CAAgB,GAAGJ,CAAnB,EAA4BK,QAA5B,CAAqCD,CAArC,CAIL,CAND,CAQA,CAAOL,UCnEOO,CAAAA,kBAAmB5B,SAiFpBY,IAAI,CAACiB,WAhFZC,CAAAA,CAAO,CAAG,MAAO9B,CAAAA,EACjB+B,CAAM,CAMR,CACFD,OAAO,CAAPA,CADE,CAEFE,EAAE,CAAE,EAFF,CAGFC,KAAK,CAAEjC,CAHL,EAkFJ,MA5EgB,QAAZ,EAAA8B,CA4EJ,CA3EO9B,CA2EP,EA3DI+B,CAAM,CAACG,EAAP,CAAYlC,CAAC,CAACJ,WA2DlB,CAzDMmC,CAAM,CAACC,EAyDb,CA1DQD,CAAM,CAACG,EAAP,GAAcX,MA0DtB,CAzDkB,CAAC,QAAD,CAyDlB,CAxDeQ,CAAM,CAACG,EAAP,GAAcC,KAwD7B,CAvDkB,CAAC,OAAD,CAuDlB,CA7CkB,CAAC,OAAD,CA6ClB,EA1EIJ,CAAM,CAACC,EAAP,CAAY,CAAC,MAAD,CA0EhB,CA1CuB,UAAZ,GAAAF,CA0CX,CAjCO9B,CAAC,CAACL,SAiCT,EA3BIoC,CAAM,CAACG,EAAP,CAAYlC,CAAC,CAACL,SAAF,CAAYC,WA2B5B,CAzBQ2B,MAAM,CAACC,mBAAP,CAA2BxB,CAAC,CAACL,SAA7B,EAAwCyC,IAAxC,CAA8CC,CAAD,EAAe,aAAP,GAAAA,CAArD,CAyBR,EAxBMN,CAAM,CAACO,WAAP,CAAqB,+CAwB3B,CAtBQP,CAAM,CAACC,EAsBf,CAvBU,QAAQO,IAAR,CAAavC,CAAC,CAACL,SAAF,CAAYC,WAAZ,CAAwBE,IAAxB,CAA6B,CAA7B,CAAb,CAuBV,CAtBoB,CAAC,aAAD,CAAgB,UAAhB,CAsBpB,CApBoB,CAAC,UAAD,CAAa,aAAb,CAoBpB,EAjBMiC,CAAM,CAACC,EAAP,CAAY,CAAC,aAAD,CAiBlB,EA7BID,CAAM,CAACC,EAAP,CAAY,CAAC,UAAD,CA6BhB,CAduB,QAAZ,GAAAF,CAcX,GAbMU,KAAK,CAACxC,CAAD,CAaX,CAZI+B,CAAM,CAACC,EAAP,CAAY,CAAC,KAAD,CAYhB,CAXcS,QAAQ,CAACzC,CAAD,CAWtB,CATa,EAAWA,CAAX,IAAkBA,CAS/B,GARI+B,CAAM,CAACO,WAAP,CAAqB,SAQzB,EAVIP,CAAM,CAACC,EAAP,CAAY,CAAC,UAAD,CAUhB,EAJyB,CAArB,GAAAD,CAAM,CAACC,EAAP,CAAUd,MAId,GAHEa,CAAM,CAACC,EAAP,CAAY,CAACF,CAAD,CAGd,EAAOC,CACR,SAEeW,CAAAA,QAAS1C,EAAQ2C,GAC/B,MAA6C,OAAtC,IAACA,CAAC,EAAIf,iBAAiB,CAAC5B,CAAD,CAAvB,EAA4BgC,EAA5B,CAA+B,CAA/B,CACR,SAEeY,CAAAA,SAAU5C,EAAQ2C,GAChC,MAA6C,QAAtC,IAACA,CAAC,EAAIf,iBAAiB,CAAC5B,CAAD,CAAjB,CAAqBgC,EAArB,CAAwB,CAAxB,CAAN,CACR,MCtGYa,CAAAA,gBAAgB,CAAkB,CAC7CC,MAAM,CAAE,EADqC,CAE7CC,GAAG,CAAE,OAFwC,CAG7CC,IAAI,CAAEC,IAHuC,CAI7CC,QAAQ,CAAGC,CAAD,EAAa,GAAIF,CAAAA,IAAJ,CAASE,CAAT,CAJsB,EAOlCC,kBAAkB,CAAkB,CAC/CN,MAAM,CAAE,EADuC,CAE/CC,GAAG,CAAE,QAF0C,CAG/CC,IAAI,CAAEK,MAHyC,CAI/CH,QAAQ,CAAEC,CAAF,CAAmBG,CAAnB,EACN,MAAO,IAAID,CAAAA,MAAJ,CAAWF,CAAX,CAAoBG,CAAM,CAACC,QAA3B,CACR,CAN8C,CAO/CC,MAAM,CAAEC,CAAF,CAAcH,CAAd,EAEJ,MADAA,CAAAA,CAAM,CAACC,QAAP,CAAkBE,CAAK,CAACC,KACxB,CAAOD,CAAK,CAACE,MACd,CAV8C,OCHpCC,CAAAA,UAcXhE,YAKEiE,EAII,IAtBE,cAAA,CAKF,GAEE,WAAA,CAAS,KACT,sBAAA,CAAuCC,IAAI,CAACC,UAC5C,kBAAA,CAA+BD,IAAI,CAACE,MAEpC,mBAAA,CAAiBC,MAAM,CAAC,WAAD,EAa7B,KAAKnB,MAAL,CAAwC,QAA1B,QAAOe,CAAAA,CAAO,CAACf,MAAf,CAAqCe,CAAO,CAACf,MAA7C,CAAsD,KAAKA,OACzE,KAAKoB,iBAAL,CAAyBL,CAAO,CAACE,SAAR,EAAqB,KAAKG,kBACnD,KAAKC,aAAL,CAAqBN,CAAO,CAACG,KAAR,EAAiB,KAAKG,cAE3C,KAAKC,QAAL,CACE,CAAEpB,IAAI,CAAEC,IAAR,CADF,CAEE,CACED,IAAI,CAAEK,MADR,CAEEG,MAAM,CAAEC,CAAF,EACJ,KAAM,CAAEE,MAAM,CAANA,CAAF,CAAUD,KAAK,CAALA,CAAV,EAAoBD,CAA1B,CACA,MAAO,CAAEE,MAAM,CAANA,CAAF,CAAUD,KAAK,CAALA,CAAV,CACR,CALH,CAMER,QAAQ,CAAEC,CAAF,EACN,KAAM,CAAEQ,MAAM,CAANA,CAAF,CAAUD,KAAK,CAALA,CAAV,EAAoBP,CAA1B,CACA,MAAO,IAAIE,CAAAA,MAAJ,CAAWM,CAAX,CAAmBD,CAAnB,CACR,CATH,CAFF,CAaEW,wBAbF,CAcE,CACErB,IAAI,CAAEsB,GADR,CAEEd,MAAM,CAAEC,CAAF,EACJ,MAAOtB,CAAAA,KAAK,CAACoC,IAAN,CAAWd,CAAX,CACR,CAJH,CAdF,CAoBE,CACEV,GAAG,CAAE,UADP,CAEES,MAAM,CAAEC,CAAF,EACJ,MAAOA,CAAAA,CAAK,CAACrD,QAAN,EACR,CAJH,CAKE8C,QAAQ,CAAEC,CAAF,EACN,OAAcA,CACf,CAPH,CApBF,CA6BE,CACEJ,GAAG,CAAE,QADP,CAEES,MAAM,CAAEC,CAAF,EACJ,MAAOA,CAAAA,CAAK,CAACrD,QAAN,EACR,CAJH,CAKE8C,QAAQ,CAAEC,CAAF,EACN,MAAOqB,CAAAA,MAAM,CAACrB,CAAD,CACd,CAPH,CA7BF,CAsCE,CACEJ,GAAG,CAAE,QADP,CAEES,MAAM,CAAEC,CAAF,EACJ,MAAO,CACLgB,OAAO,CAAEhB,CAAK,CAACrD,QAAN,EADJ,CAELsE,IAAI,CAAE9D,IAAI,CAAC+D,MAAL,GAAcvE,QAAd,CAAuB,EAAvB,EAA2BwE,MAA3B,CAAkC,CAAlC,CAFD,CAIR,CAPH,CAQE1B,QAAQ,CAAE,CAAEuB,OAAO,CAAPA,CAAF,CAAF,EACN,MAAOR,CAAAA,MAAM,CAACQ,CAAO,CAACpE,OAAR,CAAgB,YAAhB,CAA8B,EAA9B,EAAkCA,OAAlC,CAA0C,KAA1C,CAAiD,EAAjD,CAAD,CACd,CAVH,CAtCF,CAkDE,CACE0C,GAAG,CAAE,KADP,CAEES,MAAM,CAAE,IAAM,KAFhB,CAGEN,QAAQ,CAAE,IAAM2B,GAHlB,CAlDF,CAwDD,CAMDT,QAAQ,CAAE,GAAGU,CAAL,EACN,KAAKC,SAAL,CAAeC,OAAf,CACE,GAAGF,CAAE,CAACrD,GAAH,CAAQwD,CAAD,GACR,GAAiB,UAAb,QAAOA,CAAAA,CAAX,CAA6B,CAC3B,KAAM,CAAEC,UAAU,CAAEpC,CAAd,CAAsBqC,OAAO,CAAEpC,CAA/B,CAAoCG,QAAQ,CAARA,CAApC,CAA8CM,MAAM,CAANA,CAA9C,EAAyDyB,CAA/D,CAEA,MAAO,CACLjC,IAAI,CAAEiC,CADD,CAELnC,MAAM,CAANA,CAFK,CAGLC,GAAG,CAAHA,CAHK,CAILG,QAAQ,CAARA,CAJK,CAKLM,MAAM,CAANA,CALK,CAOR,CAED,MAAOyB,CAAAA,CACR,CAdE,EAcAxD,GAdA,CAcI,CAAC,CACNuB,IAAI,CAAE7C,CADA,CACG2C,MAAM,CAANA,CADH,CACWC,GAAG,CAAHA,CADX,CACgBS,MAAM,CAANA,CADhB,CACwBN,QAAQ,CAARA,CADxB,CAAD,IAILA,CAAQ,CAAuB,WAApB,QAAOA,CAAAA,CAAP,CACNkC,CAAD,EAAc3F,kBAAkB,CAACU,CAAD,CAAlB,CAAwB,GAAIA,CAAAA,CAAJ,CAAMiF,CAAN,CAAxB,CAAqCA,CAD5C,CAENlC,CAAQ,QANR,CAOLH,CAAG,CAAG,KAAKsC,MAAL,CAAYvC,CAAZ,CAAoBC,CAAG,GAAKtD,kBAAkB,CAACU,CAAD,CAAlB,CAC9BA,CAAC,CAACR,SAAF,CAAYC,WAAZ,CAAwBE,IADM,CAEjB,UAAb,QAAOK,CAAAA,CAAP,CAA0BD,eAAe,CAACC,CAAD,CAAzC,CAA+CA,CAFtB,CAAvB,CAPD,CAWE,CACLA,CAAC,CAADA,CADK,CAEL4C,GAAG,CAAHA,CAFK,CAGLS,MAAM,CAANA,CAHK,CAILN,QAAQ,CAARA,CAJK,CAXF,CAdJ,CADL,CAkCD,CAEDoC,UAAU,CAAE,GAAGR,CAAL,EACR,KAAKC,SAAL,CAAiB,KAAKA,SAAL,CAAeQ,MAAf,CAAsB,CAAC,CAAEpF,CAAC,CAADA,CAAF,CAAK4C,GAAG,CAAHA,CAAL,CAAD,GAC9B,CAAC+B,CAAE,CAAC1C,IAAH,CAAS6C,CAAD,EACG,UAAb,QAAOA,CAAAA,CADG,CAEL,CAAC,CAAC9E,CAAF,EAAO8E,CAAC,CAACrF,WAAF,GAAkBO,CAAC,CAACP,WAFtB,CAILG,eAAe,CAACkF,CAAC,CAAClC,GAAH,CAAQA,CAAR,CAAf,EAAgC,CAAC,CAACkC,CAAC,CAACjC,IAAJ,EAAY,CAAC,CAAC7C,CAAd,EAAmBJ,eAAe,CAACkF,CAAC,CAACjC,IAAF,CAAOpD,WAAR,CAAqBO,CAAC,CAACP,WAAvB,CAJrE,CADO,CASlB,CAMDmE,SAAS,CAAEyB,CAAF,OACDC,CAAAA,CAAS,CAAG,KAAKC,0BAAL,CAAgC,CAACF,CAAD,CAAhC,CAAuC,gBAAvC,EAAyD,CAAzD,EAEZG,CAAI,CAAG,GAAIrB,CAAAA,IACXsB,CAAc,CAAI5F,CAAD,GACrB,GAAIA,CAAJ,CACE,GAAiB,QAAb,QAAOA,CAAAA,CAAP,EAAgD,QAAvB,GAAAA,CAAC,CAACJ,WAAF,CAAcE,IAA3C,CACE,IAAK,KAAMJ,CAAAA,CAAX,GAAgB6B,CAAAA,MAAM,CAACoE,IAAP,CAAY3F,CAAZ,CAAhB,CACE2F,CAAI,CAACE,GAAL,CAASnG,CAAT,CADF,CAEEkG,CAAc,CAAC5F,CAAC,CAACN,CAAD,CAAF,CAFhB,CADF,IAKWyC,CAAAA,KAAK,CAACO,OAAN,CAAc1C,CAAd,CALX,EAMEA,CAAC,CAACyB,GAAF,CAAOY,CAAD,EAAQuD,CAAc,CAACvD,CAAD,CAA5B,CAGL,EAED,MADAuD,CAAAA,CAAc,CAACH,CAAD,CACd,CAAO,KAAKvB,iBAAL,CAAuBuB,CAAvB,CAAkCtD,KAAK,CAACoC,IAAN,CAAWoB,CAAX,EAAiBG,IAAjB,EAAlC,CACR,CAEDC,IAAI,CAAEP,CAAF,EACF,MAAO/E,CAAAA,MAAM,CAAC,KAAKsD,SAAL,CAAeyB,CAAf,CAAD,CAAN,CAA4BpF,QAA5B,CAAqC,EAArC,CACR,CAED4F,KAAK,CAAKR,CAAL,EACH,MAAO,MAAKE,0BAAL,CAAgC,CAACF,CAAD,CAAhC,CAAuC,OAAvC,EAAgD,CAAhD,CACR,CAEDS,SAAS,CAAEC,CAAF,CAAWC,CAAX,OACDC,CAAAA,CAAE,CAAGxE,iBAAiB,CAACsE,CAAD,EACtBG,CAAE,CAAGzE,iBAAiB,CAACuE,CAAD,EAE5B,GAAmB,UAAf,GAAAC,CAAE,CAACtE,OAAH,EAA4C,QAAf,GAAAsE,CAAE,CAACtE,OAApC,OACMY,CAAAA,OAAO,CAACwD,CAAD,CAAKE,CAAL,CADb,CAEWF,CAAE,CAACzE,GAAH,CAAO,CAAC6E,CAAD,CAAM5G,CAAN,GACL,KAAKuG,SAAL,CAAeK,CAAf,CAAoBH,CAAE,CAACzG,CAAD,CAAtB,CADF,EAEJ6G,KAFI,CAEGlE,CAAD,EAAQA,CAFV,CAFX,CAKaO,QAAQ,CAACsD,CAAD,CAAKE,CAAL,CALrB,CAMW7E,MAAM,CAACiF,OAAP,CAAeN,CAAf,EAAmBzE,GAAnB,CAAuB,CAAC,CAAC/B,CAAD,CAAI4G,CAAJ,CAAD,GACrB,KAAKL,SAAL,CAAeK,CAAf,CAAoBH,CAAE,CAACzG,CAAD,CAAtB,CADF,EAEJ6G,KAFI,CAEGlE,CAAD,EAAQA,CAFV,CANX,CAUW,KAAK0D,IAAL,CAAUG,CAAV,IAAkB,KAAKH,IAAL,CAAUI,CAAV,CAV7B,OAYwB,KAAb,GAAAC,CAAE,CAACpE,EAAH,CAAM,CAAN,GAAmC,KAAb,GAAAqE,CAAE,CAACrE,EAAH,CAAM,CAAN,EAIxB,KAAK+D,IAAL,CAAUG,CAAV,IAAkB,KAAKH,IAAL,CAAUI,CAAV,EAGpBD,CAAE,GAAKC,CACf,CAMDnC,KAAK,CAAEyC,CAAF,EACH,MAAO,MAAKtC,aAAL,CAAmBsC,CAAnB,CAAyB,CAACC,CAAD,CAAIC,CAAJ,IAC9B,GAAIA,CAAC,EAAiB,QAAb,QAAOA,CAAAA,CAAhB,CACE,IAAK,KAAM,CAAE5D,GAAG,CAAHA,CAAF,CAAOG,QAAQ,CAARA,CAAP,CAAX,EAAgC,MAAK6B,SAArC,CACE,GAAI4B,CAAC,CAAC5D,CAAD,CAAL,CACE,MAA2B,UAApB,QAAOG,CAAAA,CAAP,CAAiCA,CAAQ,CAACyD,CAAC,CAAC5D,CAAD,CAAF,CAAS4D,CAAT,CAAzC,CAAuDA,CAA9D,CAIN,MAAOA,CAAAA,CACR,CATM,CAUR,CAEOtB,MAAM,CAAEvC,CAAF,CAAehD,CAAf,EACZ,MAAO,CAAmB,QAAlB,QAAOgD,CAAAA,CAAP,CAA6BA,CAA7B,CAAsC,KAAKA,MAA5C,GAAuDhD,CAAI,EAAI,EAA/D,CACR,CAOO4F,0BAA0B,CAAErE,CAAF,CAAUuF,CAAV,EAChC,KAAMjE,CAAAA,CAAC,CAAGf,iBAAiB,CAACP,CAAD,CAA3B,CAEA,GAAgB,OAAZ,GAAAsB,CAAC,CAACX,EAAF,CAAK,CAAL,CAAJ,CAAyB,CACvB,KAAMwD,CAAAA,CAAG,CAAG,EAAZ,CAaA,MAZAnE,CAAAA,CAAC,CAACI,GAAF,CAAM,CAACY,CAAD,CAAUpB,CAAV,IACJ,KAAM0F,CAAAA,CAAC,CAAG,KAAKjB,0BAAL,CAAgCrD,CAAhC,CAAoCuE,CAApC,CAAV,CAKEpB,CAAG,CAACvE,CAAD,EADD0F,CAAC,GAAK,KAAKE,sBAGJF,CAEZ,CAVD,CAYA,CAAOnB,CACR,CAAM,GAAgB,QAAZ,GAAA7C,CAAC,CAACX,EAAF,CAAK,CAAL,CAAJ,CAA0B,CAC/B,KAAMwD,CAAAA,CAAG,CAAG,EAAZ,CAYA,MAXAjE,CAAAA,MAAM,CAACiF,OAAP,CAAenF,CAAf,EAAkBI,GAAlB,CAAsB,CAAC,CAAC/B,CAAD,CAAI2C,CAAJ,CAAD,IACpB,KAAMsE,CAAAA,CAAC,CAAG,KAAKjB,0BAAL,CAAgCrD,CAAhC,CAAoCuE,CAApC,CAAV,CACA,GAAI,SAAAD,CAAJ,CAAqB,CAArB,IAGEnB,CAAAA,CAAG,CAAC9F,CAAD,CAHL,CAEWiH,CAAC,GAAK,KAAKE,cAFtB,QAKWF,CAEZ,CATD,CAWA,CAAOnB,CACR,CAAM,GAAgB,OAAZ,GAAA7C,CAAC,CAACX,EAAF,CAAK,CAAL,CAAJ,CAAyB,CAC9B,KAAMtC,CAAAA,CAAC,CAAG,KAAK2F,MAAL,CAAYhE,CAAC,CAAC6D,UAAd,CAA0B7D,CAAC,CAACyF,QAAF,EAAczF,CAAC,CAACzB,WAAF,CAAcE,IAAtD,CAAV,CAEA,IAAK,KAAM,CAAEK,CAAC,CAADA,CAAF,CAAK4C,GAAG,CAAHA,CAAL,CAAUS,MAAM,CAANA,CAAV,CAAkBN,QAAQ,CAARA,CAAlB,CAAX,EAA2C,MAAK6B,SAAhD,CACE,GAAK,CAAC,CAAC5E,CAAF,EAAOJ,eAAe,CAACsB,CAAC,CAACzB,WAAH,CAAgBO,CAAhB,CAAvB,EACAJ,eAAe,CAACL,CAAD,CAAIqD,CAAJ,CADnB,CAC6B,CAC3B,GAAI,CAACG,CAAD,EAAsB,OAAT,GAAA0D,CAAjB,CACE,SAGF,KAAMG,CAAAA,CAAC,CAAG,EAAV,CAL2B,MAM3BA,CAAAA,CAAC,CAAChE,CAAD,CAAD,CACE,CAACS,CAAM,EAAK,CAAC,CAACrD,CAAF,EAAOA,CAAC,CAACR,SAAF,CAAY6D,MAA9B,EAAyCnC,CAAC,CAACmC,MAA3C,EAAqDnC,CAAC,CAACjB,QAAxD,EAAkE4G,IAAlE,CAAuE3F,CAAvE,CADO,CAEPA,CAFO,CAEJ0F,CAFI,CANkB,CAUvB,SAAAA,CAAC,CAAChE,CAAD,CAVsB,QAYP,OAAT,GAAA6D,CAZgB,CAalB1D,CAAS,CAAC6D,CAAC,CAAChE,CAAD,CAAF,CAASgE,CAAT,CAbS,CAelBA,CAEV,CAtB2B,MAyBjB,OAAT,GAAAH,CAzB0B,CA0BrBvF,CA1BqB,CA4BrB,CACL,CAAC3B,CAAD,EAAK0B,sBAAsB,CAACC,CAAD,CADtB,CAIV,CAAM,GAAgB,aAAZ,GAAAsB,CAAC,CAACX,EAAF,CAAK,CAAL,GAAyC,UAAZ,GAAAW,CAAC,CAACX,EAAF,CAAK,CAAL,CAA7B,EAAmE,UAAZ,GAAAW,CAAC,CAACX,EAAF,CAAK,CAAL,CAAvD,EACK,QAAZ,GAAAW,CAAC,CAACX,EAAF,CAAK,CAAL,CADO,EAC6B,QAAZ,GAAAW,CAAC,CAACX,EAAF,CAAK,CAAL,CADjB,EACqD,KAAZ,GAAAW,CAAC,CAACX,EAAF,CAAK,CAAL,CAD7C,CACgE,CACrE,GAAIA,CAAAA,CAAE,CAAGW,CAAC,CAACX,EAAF,CAAK,CAAL,CAAT,CASA,GARW,aAAP,GAAAA,CAQJ,GAPEA,CAAE,CAAG,UAOP,EAAa,OAAT,GAAA4E,CAAI,EAAuB,UAAP,GAAA5E,CAAxB,CACE,MAAOX,CAAAA,CAAP,CAXmE,KAc/D3B,CAAAA,CAAC,CAAG,KAAK2F,MAAL,QAAuBrD,CAAvB,CAd2D,CAe/D,CAAE7B,CAAC,CAADA,CAAF,CAAKqD,MAAM,CAANA,CAAL,CAAaN,QAAQ,CAARA,CAAb,EAA0B,KAAK6B,SAAL,CAAeQ,MAAf,CAAsB,CAAC,CAAExC,GAAG,CAAHA,CAAF,CAAD,GAAaA,CAAG,GAAKrD,CAA3C,EAA8C,CAA9C,GAAoD,EAff,CAiBrE,GAAa,OAAT,GAAAkH,CAAI,EAAgB,CAAC1D,CAAzB,CACE,MAAO7B,CAAAA,CAAP,CAGF,KAAM0F,CAAAA,CAAC,CAAG,EAAV,CArBqE,MAsBrEA,CAAAA,CAAC,CAACrH,CAAD,CAAD,CACE,CAAC8D,CAAM,EAAK,CAAC,CAACrD,CAAF,EAAOA,CAAC,CAACR,SAAF,CAAY6D,MAA9B,EAAyCnC,CAAC,CAACmC,MAA3C,EAAqDnC,CAAC,CAACjB,QAAxD,EAAkE4G,IAAlE,CAAuE3F,CAAvE,CADK,CAELA,CAFK,CAEF0F,CAFE,CAtB8D,CA0BxD,OAAT,GAAAH,CA1BiE,CA2B5D1D,CAAS,CAAC6D,CAAC,CAACrH,CAAD,CAAF,CAAOqH,CAAP,CA3BmD,CA4B1D,SAAAA,CAAC,CAACrH,CAAD,CA5ByD,QA+B5DqH,CAEV,CAAM,GAAgB,WAAZ,GAAApE,CAAC,CAACX,EAAF,CAAK,CAAL,CAAJ,CAA6B,CAClC,GAAa,OAAT,GAAA4E,CAAJ,CACE,MAAO,MAAKC,cAAZ,CAFgC,KAK5BnH,CAAAA,CAAC,CAAG,KAAK2F,MAAL,QAAuB1C,CAAC,CAACX,EAAF,CAAK,CAAL,CAAvB,CALwB,CAM5B,CAAE7B,CAAC,CAADA,CAAF,CAAKqD,MAAM,CAANA,CAAL,EAAgB,KAAKuB,SAAL,CAAeQ,MAAf,CAAsB,CAAC,CAAExC,GAAG,CAAHA,CAAF,CAAD,GAAaA,CAAG,GAAKrD,CAA3C,EAA8C,CAA9C,GAAoD,EANxC,CAQ5BqH,CAAC,CAAG,EARwB,CAalC,MAJAA,CAAAA,CAAC,CAACrH,CAAD,CAAD,CACE,CAAC8D,CAAM,EAAK,CAAC,CAACrD,CAAF,EAAOA,CAAC,CAACR,SAAF,CAAY6D,MAA9B,GAA0C,KAAQ,CAAlD,CAAD,EAAsDwD,IAAtD,CAA2D3F,CAA3D,CADK,CAELA,CAFK,CAEF0F,CAFE,CAIP,CAAO,SAAAA,CAAC,CAACrH,CAAD,CAAD,QAAiCqH,CACzC,CAED,MAAO1F,CAAAA,CACR,OAGU4F,CAAAA,mBAAmB,CAAkB,CAChDlE,GAAG,CAAE,UAD2C,CAEhDS,MAAM,CAAGC,CAAD,EAAWA,CAAK,CAACrD,QAAN,GAAiBI,IAAjB,GAAwBH,OAAxB,CAAgC,kBAAhC,CAAoD,GAApD,EAAyDA,OAAzD,CAAiE,aAAjE,CAAgF,GAAhF,CAF6B,CAGhD6C,QAAQ,CAAGuB,CAAD,EAED,GAAIyC,CAAAA,QAAJ,WAAuBzC,GAAvB,GALuC,EASrCJ,wBAAwB,gCAChC4C,sBACH/D,QAAQ,CAAE,OAGCiE,gBAAgB,CAAkB,CAC7CpE,GAAG,CAAE,WADwC,CAE7CS,MAAM,CAAE,IAAM,WAF+B,CAG7CN,QAAQ,CAAE,UAHmC"}