{"version":3,"file":"release.mjs","sources":["../../../server/src/controllers/release.ts"],"sourcesContent":["import type Koa from 'koa';\nimport { errors } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\nimport { RELEASE_MODEL_UID } from '../constants';\nimport { validateRelease, validatefindByDocumentAttachedParams } from './validation/release';\nimport type {\n  CreateRelease,\n  UpdateRelease,\n  PublishRelease,\n  GetRelease,\n  Release,\n  DeleteRelease,\n  GetReleases,\n  MapEntriesToReleases,\n} from '../../../shared/contracts/releases';\nimport type { UserInfo } from '../../../shared/types';\nimport { getService } from '../utils';\n\ntype ReleaseWithPopulatedActions = Release & { actions: { count: number } };\n\nconst releaseController = {\n  /**\n   * Find releases based on documents attached or not to the release.\n   * If `hasEntryAttached` is true, it will return all releases that have the entry attached.\n   * If `hasEntryAttached` is false, it will return all releases that don't have the entry attached.\n   */\n  async findByDocumentAttached(ctx: Koa.Context) {\n    const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n      ability: ctx.state.userAbility,\n      model: RELEASE_MODEL_UID,\n    });\n    await permissionsManager.validateQuery(ctx.query);\n    const releaseService = getService('release', { strapi });\n    const query = await permissionsManager.sanitizeQuery(ctx.query);\n\n    await validatefindByDocumentAttachedParams(query);\n\n    // If entry is a singleType, we need to manually add the entryDocumentId to the query\n    const model = strapi.getModel(query.contentType) as Schema.ContentType;\n    if (model.kind && model.kind === 'singleType') {\n      const document = await strapi.db.query(model.uid).findOne({ select: ['documentId'] });\n\n      if (!document) {\n        throw new errors.NotFoundError(`No entry found for contentType ${query.contentType}`);\n      }\n\n      query.entryDocumentId = document.documentId;\n    }\n\n    const { contentType, hasEntryAttached, entryDocumentId, locale } = query;\n    const isEntryAttached =\n      typeof hasEntryAttached === 'string' ? Boolean(JSON.parse(hasEntryAttached)) : false;\n\n    if (isEntryAttached) {\n      const releases = await releaseService.findMany({\n        where: {\n          releasedAt: null,\n          actions: {\n            contentType,\n            entryDocumentId: entryDocumentId ?? null,\n            locale: locale ?? null,\n          },\n        },\n        populate: {\n          actions: {\n            fields: ['type'],\n            filters: {\n              contentType,\n              entryDocumentId: entryDocumentId ?? null,\n              locale: locale ?? null,\n            },\n          },\n        },\n      });\n\n      ctx.body = { data: releases };\n    } else {\n      const relatedReleases = await releaseService.findMany({\n        where: {\n          releasedAt: null,\n          actions: {\n            contentType,\n            entryDocumentId: entryDocumentId ?? null,\n            locale: locale ?? null,\n          },\n        },\n      });\n\n      const releases = await releaseService.findMany({\n        where: {\n          $or: [\n            {\n              id: {\n                $notIn: relatedReleases.map((release: any) => release.id),\n              },\n            },\n            {\n              actions: null,\n            },\n          ],\n          releasedAt: null,\n        },\n      });\n      ctx.body = { data: releases };\n    }\n  },\n\n  async findPage(ctx: Koa.Context) {\n    const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n      ability: ctx.state.userAbility,\n      model: RELEASE_MODEL_UID,\n    });\n\n    await permissionsManager.validateQuery(ctx.query);\n\n    const releaseService = getService('release', { strapi });\n\n    const query: GetReleases.Request['query'] = await permissionsManager.sanitizeQuery(ctx.query);\n    const { results, pagination } = await releaseService.findPage(query);\n\n    const data = results.map((release: ReleaseWithPopulatedActions) => {\n      const { actions, ...releaseData } = release;\n\n      return {\n        ...releaseData,\n        actions: {\n          meta: {\n            count: actions.count,\n          },\n        },\n      };\n    });\n\n    const pendingReleasesCount = await strapi.db.query(RELEASE_MODEL_UID).count({\n      where: {\n        releasedAt: null,\n      },\n    });\n\n    ctx.body = { data, meta: { pagination, pendingReleasesCount } };\n  },\n\n  async findOne(ctx: Koa.Context) {\n    const id: GetRelease.Request['params']['id'] = ctx.params.id;\n\n    const releaseService = getService('release', { strapi });\n    const releaseActionService = getService('release-action', { strapi });\n    const release = await releaseService.findOne(id, { populate: ['createdBy'] });\n    if (!release) {\n      throw new errors.NotFoundError(`Release not found for id: ${id}`);\n    }\n\n    const count = await releaseActionService.countActions({\n      filters: {\n        release: id,\n      },\n    });\n    const sanitizedRelease = {\n      ...release,\n      createdBy: release.createdBy\n        ? strapi.service('admin::user').sanitizeUser(release.createdBy)\n        : null,\n    };\n\n    // Format the data object\n    const data = {\n      ...sanitizedRelease,\n      actions: {\n        meta: {\n          count,\n        },\n      },\n    };\n\n    ctx.body = { data };\n  },\n\n  async mapEntriesToReleases(ctx: Koa.Context) {\n    const { contentTypeUid, documentIds, locale } = ctx.query;\n\n    if (!contentTypeUid || !documentIds) {\n      throw new errors.ValidationError('Missing required query parameters');\n    }\n\n    const releaseService = getService('release', { strapi });\n\n    const releasesWithActions = await releaseService.findMany({\n      where: {\n        releasedAt: null,\n        actions: {\n          contentType: contentTypeUid,\n          entryDocumentId: {\n            $in: documentIds,\n          },\n          locale,\n        },\n      },\n      populate: {\n        actions: true,\n      },\n    });\n\n    const mappedEntriesInReleases = releasesWithActions.reduce(\n      (acc: MapEntriesToReleases.Response['data'], release: Release) => {\n        release.actions.forEach((action) => {\n          if (action.contentType !== contentTypeUid) {\n            return;\n          }\n\n          if (locale && action.locale !== locale) {\n            return;\n          }\n\n          if (!acc[action.entryDocumentId]) {\n            acc[action.entryDocumentId] = [{ id: release.id, name: release.name }];\n          } else {\n            acc[action.entryDocumentId].push({ id: release.id, name: release.name });\n          }\n        });\n\n        return acc;\n      },\n      {} as MapEntriesToReleases.Response['data']\n    );\n\n    ctx.body = {\n      data: mappedEntriesInReleases,\n    };\n  },\n\n  async create(ctx: Koa.Context) {\n    const user: UserInfo = ctx.state.user;\n    const releaseArgs = ctx.request.body as CreateRelease.Request['body'];\n\n    await validateRelease(releaseArgs);\n\n    const releaseService = getService('release', { strapi });\n    const release = await releaseService.create(releaseArgs, { user });\n\n    const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n      ability: ctx.state.userAbility,\n      model: RELEASE_MODEL_UID,\n    });\n\n    ctx.created({\n      data: await permissionsManager.sanitizeOutput(release),\n    });\n  },\n\n  async update(ctx: Koa.Context) {\n    const user: UserInfo = ctx.state.user;\n    const releaseArgs = ctx.request.body as UpdateRelease.Request['body'];\n    const id: UpdateRelease.Request['params']['id'] = ctx.params.id;\n\n    await validateRelease(releaseArgs);\n\n    const releaseService = getService('release', { strapi });\n    const release = await releaseService.update(id, releaseArgs, { user });\n\n    const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n      ability: ctx.state.userAbility,\n      model: RELEASE_MODEL_UID,\n    });\n\n    ctx.body = {\n      data: await permissionsManager.sanitizeOutput(release),\n    };\n  },\n\n  async delete(ctx: Koa.Context) {\n    const id: DeleteRelease.Request['params']['id'] = ctx.params.id;\n\n    const releaseService = getService('release', { strapi });\n    const release = await releaseService.delete(id);\n\n    ctx.body = {\n      data: release,\n    };\n  },\n\n  async publish(ctx: Koa.Context) {\n    const id: PublishRelease.Request['params']['id'] = ctx.params.id;\n\n    const releaseService = getService('release', { strapi });\n    const releaseActionService = getService('release-action', { strapi });\n    const release = await releaseService.publish(id);\n\n    const [countPublishActions, countUnpublishActions] = await Promise.all([\n      releaseActionService.countActions({\n        filters: {\n          release: id,\n          type: 'publish',\n        },\n      }),\n      releaseActionService.countActions({\n        filters: {\n          release: id,\n          type: 'unpublish',\n        },\n      }),\n    ]);\n\n    ctx.body = {\n      data: release,\n      meta: {\n        totalEntries: countPublishActions + countUnpublishActions,\n        totalPublishedEntries: countPublishActions,\n        totalUnpublishedEntries: countUnpublishActions,\n      },\n    };\n  },\n};\n\nexport default releaseController;\n"],"names":["releaseController","findByDocumentAttached","ctx","permissionsManager","strapi","service","createPermissionsManager","ability","state","userAbility","model","RELEASE_MODEL_UID","validateQuery","query","releaseService","getService","sanitizeQuery","validatefindByDocumentAttachedParams","getModel","contentType","kind","document","db","uid","findOne","select","errors","NotFoundError","entryDocumentId","documentId","hasEntryAttached","locale","isEntryAttached","Boolean","JSON","parse","releases","findMany","where","releasedAt","actions","populate","fields","filters","body","data","relatedReleases","$or","id","$notIn","map","release","findPage","results","pagination","releaseData","meta","count","pendingReleasesCount","params","releaseActionService","countActions","sanitizedRelease","createdBy","sanitizeUser","mapEntriesToReleases","contentTypeUid","documentIds","ValidationError","releasesWithActions","$in","mappedEntriesInReleases","reduce","acc","forEach","action","name","push","create","user","releaseArgs","request","validateRelease","created","sanitizeOutput","update","delete","publish","countPublishActions","countUnpublishActions","Promise","all","type","totalEntries","totalPublishedEntries","totalUnpublishedEntries"],"mappings":";;;;;AAoBA,MAAMA,iBAAAA,GAAoB;AACxB;;;;MAKA,MAAMC,wBAAuBC,GAAgB,EAAA;AAC3C,QAAA,MAAMC,qBAAqBC,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA,CAAqBC,wBAAwB,CAAC;YACtFC,OAAAA,EAASL,GAAAA,CAAIM,KAAK,CAACC,WAAW;YAC9BC,KAAAA,EAAOC;AACT,SAAA,CAAA;AACA,QAAA,MAAMR,kBAAAA,CAAmBS,aAAa,CAACV,GAAAA,CAAIW,KAAK,CAAA;QAChD,MAAMC,cAAAA,GAAiBC,WAAW,SAAA,EAAW;AAAEX,YAAAA;AAAO,SAAA,CAAA;AACtD,QAAA,MAAMS,QAAQ,MAAMV,kBAAAA,CAAmBa,aAAa,CAACd,IAAIW,KAAK,CAAA;AAE9D,QAAA,MAAMI,oCAAAA,CAAqCJ,KAAAA,CAAAA;;AAG3C,QAAA,MAAMH,KAAAA,GAAQN,MAAAA,CAAOc,QAAQ,CAACL,MAAMM,WAAW,CAAA;AAC/C,QAAA,IAAIT,MAAMU,IAAI,IAAIV,KAAAA,CAAMU,IAAI,KAAK,YAAA,EAAc;YAC7C,MAAMC,QAAAA,GAAW,MAAMjB,MAAAA,CAAOkB,EAAE,CAACT,KAAK,CAACH,KAAAA,CAAMa,GAAG,CAAA,CAAEC,OAAO,CAAC;gBAAEC,MAAAA,EAAQ;AAAC,oBAAA;AAAa;AAAC,aAAA,CAAA;AAEnF,YAAA,IAAI,CAACJ,QAAAA,EAAU;gBACb,MAAM,IAAIK,OAAOC,aAAa,CAAC,CAAC,+BAA+B,EAAEd,KAAAA,CAAMM,WAAW,CAAA,CAAE,CAAA;AACtF,YAAA;YAEAN,KAAAA,CAAMe,eAAe,GAAGP,QAAAA,CAASQ,UAAU;AAC7C,QAAA;QAEA,MAAM,EAAEV,WAAW,EAAEW,gBAAgB,EAAEF,eAAe,EAAEG,MAAM,EAAE,GAAGlB,KAAAA;QACnE,MAAMmB,eAAAA,GACJ,OAAOF,gBAAAA,KAAqB,QAAA,GAAWG,QAAQC,IAAAA,CAAKC,KAAK,CAACL,gBAAAA,CAAAA,CAAAA,GAAqB,KAAA;AAEjF,QAAA,IAAIE,eAAAA,EAAiB;AACnB,YAAA,MAAMI,QAAAA,GAAW,MAAMtB,cAAAA,CAAeuB,QAAQ,CAAC;gBAC7CC,KAAAA,EAAO;oBACLC,UAAAA,EAAY,IAAA;oBACZC,OAAAA,EAAS;AACPrB,wBAAAA,WAAAA;AACAS,wBAAAA,eAAAA,EAAiBA,eAAAA,IAAmB,IAAA;AACpCG,wBAAAA,MAAAA,EAAQA,MAAAA,IAAU;AACpB;AACF,iBAAA;gBACAU,QAAAA,EAAU;oBACRD,OAAAA,EAAS;wBACPE,MAAAA,EAAQ;AAAC,4BAAA;AAAO,yBAAA;wBAChBC,OAAAA,EAAS;AACPxB,4BAAAA,WAAAA;AACAS,4BAAAA,eAAAA,EAAiBA,eAAAA,IAAmB,IAAA;AACpCG,4BAAAA,MAAAA,EAAQA,MAAAA,IAAU;AACpB;AACF;AACF;AACF,aAAA,CAAA;AAEA7B,YAAAA,GAAAA,CAAI0C,IAAI,GAAG;gBAAEC,IAAAA,EAAMT;AAAS,aAAA;QAC9B,CAAA,MAAO;AACL,YAAA,MAAMU,eAAAA,GAAkB,MAAMhC,cAAAA,CAAeuB,QAAQ,CAAC;gBACpDC,KAAAA,EAAO;oBACLC,UAAAA,EAAY,IAAA;oBACZC,OAAAA,EAAS;AACPrB,wBAAAA,WAAAA;AACAS,wBAAAA,eAAAA,EAAiBA,eAAAA,IAAmB,IAAA;AACpCG,wBAAAA,MAAAA,EAAQA,MAAAA,IAAU;AACpB;AACF;AACF,aAAA,CAAA;AAEA,YAAA,MAAMK,QAAAA,GAAW,MAAMtB,cAAAA,CAAeuB,QAAQ,CAAC;gBAC7CC,KAAAA,EAAO;oBACLS,GAAAA,EAAK;AACH,wBAAA;4BACEC,EAAAA,EAAI;AACFC,gCAAAA,MAAAA,EAAQH,gBAAgBI,GAAG,CAAC,CAACC,OAAAA,GAAiBA,QAAQH,EAAE;AAC1D;AACF,yBAAA;AACA,wBAAA;4BACER,OAAAA,EAAS;AACX;AACD,qBAAA;oBACDD,UAAAA,EAAY;AACd;AACF,aAAA,CAAA;AACArC,YAAAA,GAAAA,CAAI0C,IAAI,GAAG;gBAAEC,IAAAA,EAAMT;AAAS,aAAA;AAC9B,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMgB,UAASlD,GAAgB,EAAA;AAC7B,QAAA,MAAMC,qBAAqBC,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA,CAAqBC,wBAAwB,CAAC;YACtFC,OAAAA,EAASL,GAAAA,CAAIM,KAAK,CAACC,WAAW;YAC9BC,KAAAA,EAAOC;AACT,SAAA,CAAA;AAEA,QAAA,MAAMR,kBAAAA,CAAmBS,aAAa,CAACV,GAAAA,CAAIW,KAAK,CAAA;QAEhD,MAAMC,cAAAA,GAAiBC,WAAW,SAAA,EAAW;AAAEX,YAAAA;AAAO,SAAA,CAAA;AAEtD,QAAA,MAAMS,QAAsC,MAAMV,kBAAAA,CAAmBa,aAAa,CAACd,IAAIW,KAAK,CAAA;QAC5F,MAAM,EAAEwC,OAAO,EAAEC,UAAU,EAAE,GAAG,MAAMxC,cAAAA,CAAesC,QAAQ,CAACvC,KAAAA,CAAAA;AAE9D,QAAA,MAAMgC,IAAAA,GAAOQ,OAAAA,CAAQH,GAAG,CAAC,CAACC,OAAAA,GAAAA;AACxB,YAAA,MAAM,EAAEX,OAAO,EAAE,GAAGe,aAAa,GAAGJ,OAAAA;YAEpC,OAAO;AACL,gBAAA,GAAGI,WAAW;gBACdf,OAAAA,EAAS;oBACPgB,IAAAA,EAAM;AACJC,wBAAAA,KAAAA,EAAOjB,QAAQiB;AACjB;AACF;AACF,aAAA;AACF,QAAA,CAAA,CAAA;QAEA,MAAMC,oBAAAA,GAAuB,MAAMtD,MAAAA,CAAOkB,EAAE,CAACT,KAAK,CAACF,iBAAAA,CAAAA,CAAmB8C,KAAK,CAAC;YAC1EnB,KAAAA,EAAO;gBACLC,UAAAA,EAAY;AACd;AACF,SAAA,CAAA;AAEArC,QAAAA,GAAAA,CAAI0C,IAAI,GAAG;AAAEC,YAAAA,IAAAA;YAAMW,IAAAA,EAAM;AAAEF,gBAAAA,UAAAA;AAAYI,gBAAAA;AAAqB;AAAE,SAAA;AAChE,IAAA,CAAA;AAEA,IAAA,MAAMlC,SAAQtB,GAAgB,EAAA;AAC5B,QAAA,MAAM8C,EAAAA,GAAyC9C,GAAAA,CAAIyD,MAAM,CAACX,EAAE;QAE5D,MAAMlC,cAAAA,GAAiBC,WAAW,SAAA,EAAW;AAAEX,YAAAA;AAAO,SAAA,CAAA;QACtD,MAAMwD,oBAAAA,GAAuB7C,WAAW,gBAAA,EAAkB;AAAEX,YAAAA;AAAO,SAAA,CAAA;AACnE,QAAA,MAAM+C,OAAAA,GAAU,MAAMrC,cAAAA,CAAeU,OAAO,CAACwB,EAAAA,EAAI;YAAEP,QAAAA,EAAU;AAAC,gBAAA;AAAY;AAAC,SAAA,CAAA;AAC3E,QAAA,IAAI,CAACU,OAAAA,EAAS;AACZ,YAAA,MAAM,IAAIzB,MAAAA,CAAOC,aAAa,CAAC,CAAC,0BAA0B,EAAEqB,EAAAA,CAAAA,CAAI,CAAA;AAClE,QAAA;AAEA,QAAA,MAAMS,KAAAA,GAAQ,MAAMG,oBAAAA,CAAqBC,YAAY,CAAC;YACpDlB,OAAAA,EAAS;gBACPQ,OAAAA,EAASH;AACX;AACF,SAAA,CAAA;AACA,QAAA,MAAMc,gBAAAA,GAAmB;AACvB,YAAA,GAAGX,OAAO;YACVY,SAAAA,EAAWZ,OAAAA,CAAQY,SAAS,GACxB3D,MAAAA,CAAOC,OAAO,CAAC,aAAA,CAAA,CAAe2D,YAAY,CAACb,OAAAA,CAAQY,SAAS,CAAA,GAC5D;AACN,SAAA;;AAGA,QAAA,MAAMlB,IAAAA,GAAO;AACX,YAAA,GAAGiB,gBAAgB;YACnBtB,OAAAA,EAAS;gBACPgB,IAAAA,EAAM;AACJC,oBAAAA;AACF;AACF;AACF,SAAA;AAEAvD,QAAAA,GAAAA,CAAI0C,IAAI,GAAG;AAAEC,YAAAA;AAAK,SAAA;AACpB,IAAA,CAAA;AAEA,IAAA,MAAMoB,sBAAqB/D,GAAgB,EAAA;QACzC,MAAM,EAAEgE,cAAc,EAAEC,WAAW,EAAEpC,MAAM,EAAE,GAAG7B,GAAAA,CAAIW,KAAK;QAEzD,IAAI,CAACqD,cAAAA,IAAkB,CAACC,WAAAA,EAAa;YACnC,MAAM,IAAIzC,MAAAA,CAAO0C,eAAe,CAAC,mCAAA,CAAA;AACnC,QAAA;QAEA,MAAMtD,cAAAA,GAAiBC,WAAW,SAAA,EAAW;AAAEX,YAAAA;AAAO,SAAA,CAAA;AAEtD,QAAA,MAAMiE,mBAAAA,GAAsB,MAAMvD,cAAAA,CAAeuB,QAAQ,CAAC;YACxDC,KAAAA,EAAO;gBACLC,UAAAA,EAAY,IAAA;gBACZC,OAAAA,EAAS;oBACPrB,WAAAA,EAAa+C,cAAAA;oBACbtC,eAAAA,EAAiB;wBACf0C,GAAAA,EAAKH;AACP,qBAAA;AACApC,oBAAAA;AACF;AACF,aAAA;YACAU,QAAAA,EAAU;gBACRD,OAAAA,EAAS;AACX;AACF,SAAA,CAAA;AAEA,QAAA,MAAM+B,uBAAAA,GAA0BF,mBAAAA,CAAoBG,MAAM,CACxD,CAACC,GAAAA,EAA4CtB,OAAAA,GAAAA;AAC3CA,YAAAA,OAAAA,CAAQX,OAAO,CAACkC,OAAO,CAAC,CAACC,MAAAA,GAAAA;gBACvB,IAAIA,MAAAA,CAAOxD,WAAW,KAAK+C,cAAAA,EAAgB;AACzC,oBAAA;AACF,gBAAA;AAEA,gBAAA,IAAInC,MAAAA,IAAU4C,MAAAA,CAAO5C,MAAM,KAAKA,MAAAA,EAAQ;AACtC,oBAAA;AACF,gBAAA;AAEA,gBAAA,IAAI,CAAC0C,GAAG,CAACE,MAAAA,CAAO/C,eAAe,CAAC,EAAE;AAChC6C,oBAAAA,GAAG,CAACE,MAAAA,CAAO/C,eAAe,CAAC,GAAG;AAAC,wBAAA;AAAEoB,4BAAAA,EAAAA,EAAIG,QAAQH,EAAE;AAAE4B,4BAAAA,IAAAA,EAAMzB,QAAQyB;AAAK;AAAE,qBAAA;gBACxE,CAAA,MAAO;AACLH,oBAAAA,GAAG,CAACE,MAAAA,CAAO/C,eAAe,CAAC,CAACiD,IAAI,CAAC;AAAE7B,wBAAAA,EAAAA,EAAIG,QAAQH,EAAE;AAAE4B,wBAAAA,IAAAA,EAAMzB,QAAQyB;AAAK,qBAAA,CAAA;AACxE,gBAAA;AACF,YAAA,CAAA,CAAA;YAEA,OAAOH,GAAAA;AACT,QAAA,CAAA,EACA,EAAC,CAAA;AAGHvE,QAAAA,GAAAA,CAAI0C,IAAI,GAAG;YACTC,IAAAA,EAAM0B;AACR,SAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMO,QAAO5E,GAAgB,EAAA;AAC3B,QAAA,MAAM6E,IAAAA,GAAiB7E,GAAAA,CAAIM,KAAK,CAACuE,IAAI;AACrC,QAAA,MAAMC,WAAAA,GAAc9E,GAAAA,CAAI+E,OAAO,CAACrC,IAAI;AAEpC,QAAA,MAAMsC,eAAAA,CAAgBF,WAAAA,CAAAA;QAEtB,MAAMlE,cAAAA,GAAiBC,WAAW,SAAA,EAAW;AAAEX,YAAAA;AAAO,SAAA,CAAA;AACtD,QAAA,MAAM+C,OAAAA,GAAU,MAAMrC,cAAAA,CAAegE,MAAM,CAACE,WAAAA,EAAa;AAAED,YAAAA;AAAK,SAAA,CAAA;AAEhE,QAAA,MAAM5E,qBAAqBC,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA,CAAqBC,wBAAwB,CAAC;YACtFC,OAAAA,EAASL,GAAAA,CAAIM,KAAK,CAACC,WAAW;YAC9BC,KAAAA,EAAOC;AACT,SAAA,CAAA;AAEAT,QAAAA,GAAAA,CAAIiF,OAAO,CAAC;YACVtC,IAAAA,EAAM,MAAM1C,kBAAAA,CAAmBiF,cAAc,CAACjC,OAAAA;AAChD,SAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMkC,QAAOnF,GAAgB,EAAA;AAC3B,QAAA,MAAM6E,IAAAA,GAAiB7E,GAAAA,CAAIM,KAAK,CAACuE,IAAI;AACrC,QAAA,MAAMC,WAAAA,GAAc9E,GAAAA,CAAI+E,OAAO,CAACrC,IAAI;AACpC,QAAA,MAAMI,EAAAA,GAA4C9C,GAAAA,CAAIyD,MAAM,CAACX,EAAE;AAE/D,QAAA,MAAMkC,eAAAA,CAAgBF,WAAAA,CAAAA;QAEtB,MAAMlE,cAAAA,GAAiBC,WAAW,SAAA,EAAW;AAAEX,YAAAA;AAAO,SAAA,CAAA;AACtD,QAAA,MAAM+C,UAAU,MAAMrC,cAAAA,CAAeuE,MAAM,CAACrC,IAAIgC,WAAAA,EAAa;AAAED,YAAAA;AAAK,SAAA,CAAA;AAEpE,QAAA,MAAM5E,qBAAqBC,MAAAA,CAAOC,OAAO,CAAC,mBAAA,CAAA,CAAqBC,wBAAwB,CAAC;YACtFC,OAAAA,EAASL,GAAAA,CAAIM,KAAK,CAACC,WAAW;YAC9BC,KAAAA,EAAOC;AACT,SAAA,CAAA;AAEAT,QAAAA,GAAAA,CAAI0C,IAAI,GAAG;YACTC,IAAAA,EAAM,MAAM1C,kBAAAA,CAAmBiF,cAAc,CAACjC,OAAAA;AAChD,SAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMmC,QAAOpF,GAAgB,EAAA;AAC3B,QAAA,MAAM8C,EAAAA,GAA4C9C,GAAAA,CAAIyD,MAAM,CAACX,EAAE;QAE/D,MAAMlC,cAAAA,GAAiBC,WAAW,SAAA,EAAW;AAAEX,YAAAA;AAAO,SAAA,CAAA;AACtD,QAAA,MAAM+C,OAAAA,GAAU,MAAMrC,cAAAA,CAAewE,MAAM,CAACtC,EAAAA,CAAAA;AAE5C9C,QAAAA,GAAAA,CAAI0C,IAAI,GAAG;YACTC,IAAAA,EAAMM;AACR,SAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMoC,SAAQrF,GAAgB,EAAA;AAC5B,QAAA,MAAM8C,EAAAA,GAA6C9C,GAAAA,CAAIyD,MAAM,CAACX,EAAE;QAEhE,MAAMlC,cAAAA,GAAiBC,WAAW,SAAA,EAAW;AAAEX,YAAAA;AAAO,SAAA,CAAA;QACtD,MAAMwD,oBAAAA,GAAuB7C,WAAW,gBAAA,EAAkB;AAAEX,YAAAA;AAAO,SAAA,CAAA;AACnE,QAAA,MAAM+C,OAAAA,GAAU,MAAMrC,cAAAA,CAAeyE,OAAO,CAACvC,EAAAA,CAAAA;AAE7C,QAAA,MAAM,CAACwC,mBAAAA,EAAqBC,qBAAAA,CAAsB,GAAG,MAAMC,OAAAA,CAAQC,GAAG,CAAC;AACrE/B,YAAAA,oBAAAA,CAAqBC,YAAY,CAAC;gBAChClB,OAAAA,EAAS;oBACPQ,OAAAA,EAASH,EAAAA;oBACT4C,IAAAA,EAAM;AACR;AACF,aAAA,CAAA;AACAhC,YAAAA,oBAAAA,CAAqBC,YAAY,CAAC;gBAChClB,OAAAA,EAAS;oBACPQ,OAAAA,EAASH,EAAAA;oBACT4C,IAAAA,EAAM;AACR;AACF,aAAA;AACD,SAAA,CAAA;AAED1F,QAAAA,GAAAA,CAAI0C,IAAI,GAAG;YACTC,IAAAA,EAAMM,OAAAA;YACNK,IAAAA,EAAM;AACJqC,gBAAAA,YAAAA,EAAcL,mBAAAA,GAAsBC,qBAAAA;gBACpCK,qBAAAA,EAAuBN,mBAAAA;gBACvBO,uBAAAA,EAAyBN;AAC3B;AACF,SAAA;AACF,IAAA;AACF;;;;"}