@things-factory/marketplace-base 4.3.197 → 4.3.204

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist-server/constants/reserve-qty-order-statuses.js +2 -2
  2. package/dist-server/constants/reserve-qty-order-statuses.js.map +1 -1
  3. package/dist-server/entities/index.js +12 -9
  4. package/dist-server/entities/index.js.map +1 -1
  5. package/dist-server/entities/marketplace-order-item.js +16 -0
  6. package/dist-server/entities/marketplace-order-item.js.map +1 -1
  7. package/dist-server/entities/marketplace-order-shipping.js +4 -0
  8. package/dist-server/entities/marketplace-order-shipping.js.map +1 -1
  9. package/dist-server/entities/{marketplace-setting.js → marketplace-transaction-rate.js} +28 -24
  10. package/dist-server/entities/marketplace-transaction-rate.js.map +1 -0
  11. package/dist-server/graphql/resolvers/index.js +1 -0
  12. package/dist-server/graphql/resolvers/index.js.map +1 -1
  13. package/dist-server/graphql/resolvers/marketplace-order/generate-marketplace-order.js +101 -1
  14. package/dist-server/graphql/resolvers/marketplace-order/generate-marketplace-order.js.map +1 -1
  15. package/dist-server/graphql/resolvers/marketplace-order/index.js +5 -3
  16. package/dist-server/graphql/resolvers/marketplace-order/index.js.map +1 -1
  17. package/dist-server/graphql/resolvers/marketplace-order/sync-marketplace-order.js +1 -0
  18. package/dist-server/graphql/resolvers/marketplace-order/sync-marketplace-order.js.map +1 -1
  19. package/dist-server/graphql/resolvers/marketplace-order/update-order-ready-to-ship.js +3 -1
  20. package/dist-server/graphql/resolvers/marketplace-order/update-order-ready-to-ship.js.map +1 -1
  21. package/dist-server/graphql/resolvers/marketplace-transaction-rate/delete-marketplace-transaction-rates.js +16 -0
  22. package/dist-server/graphql/resolvers/marketplace-transaction-rate/delete-marketplace-transaction-rates.js.map +1 -0
  23. package/dist-server/graphql/resolvers/marketplace-transaction-rate/index.js +11 -0
  24. package/dist-server/graphql/resolvers/marketplace-transaction-rate/index.js.map +1 -0
  25. package/dist-server/graphql/resolvers/marketplace-transaction-rate/marketplace-transaction-rates.js +14 -0
  26. package/dist-server/graphql/resolvers/marketplace-transaction-rate/marketplace-transaction-rates.js.map +1 -0
  27. package/dist-server/graphql/resolvers/marketplace-transaction-rate/update-multiple-marketplace-transaction-rate.js +31 -0
  28. package/dist-server/graphql/resolvers/marketplace-transaction-rate/update-multiple-marketplace-transaction-rate.js.map +1 -0
  29. package/dist-server/graphql/types/index.js +1 -0
  30. package/dist-server/graphql/types/index.js.map +1 -1
  31. package/dist-server/graphql/types/marketplace-order-item/marketplace-order-item.js +4 -0
  32. package/dist-server/graphql/types/marketplace-order-item/marketplace-order-item.js.map +1 -1
  33. package/dist-server/graphql/types/marketplace-order-shipping/marketplace-order-shipping.js +1 -0
  34. package/dist-server/graphql/types/marketplace-order-shipping/marketplace-order-shipping.js.map +1 -1
  35. package/dist-server/graphql/types/marketplace-transaction-rate/index.js +39 -0
  36. package/dist-server/graphql/types/marketplace-transaction-rate/index.js.map +1 -0
  37. package/dist-server/graphql/types/marketplace-transaction-rate/marketplace-transaction-rate-list.js +14 -0
  38. package/dist-server/graphql/types/marketplace-transaction-rate/marketplace-transaction-rate-list.js.map +1 -0
  39. package/dist-server/graphql/types/marketplace-transaction-rate/marketplace-transaction-rate-patch.js +19 -0
  40. package/dist-server/graphql/types/marketplace-transaction-rate/marketplace-transaction-rate-patch.js.map +1 -0
  41. package/dist-server/graphql/types/marketplace-transaction-rate/marketplace-transaction-rate.js +24 -0
  42. package/dist-server/graphql/types/marketplace-transaction-rate/marketplace-transaction-rate.js.map +1 -0
  43. package/dist-server/index.js +4 -0
  44. package/dist-server/index.js.map +1 -1
  45. package/package.json +4 -4
  46. package/server/constants/reserve-qty-order-statuses.ts +2 -2
  47. package/server/entities/index.ts +11 -8
  48. package/server/entities/marketplace-order-item.ts +12 -0
  49. package/server/entities/marketplace-order-shipping.ts +3 -0
  50. package/server/entities/{marketplace-setting.ts → marketplace-transaction-rate.ts} +16 -12
  51. package/server/graphql/resolvers/index.ts +1 -0
  52. package/server/graphql/resolvers/marketplace-order/generate-marketplace-order.ts +111 -0
  53. package/server/graphql/resolvers/marketplace-order/index.ts +8 -4
  54. package/server/graphql/resolvers/marketplace-order/sync-marketplace-order.ts +2 -1
  55. package/server/graphql/resolvers/marketplace-order/update-order-ready-to-ship.ts +3 -1
  56. package/server/graphql/resolvers/marketplace-transaction-rate/delete-marketplace-transaction-rates.ts +15 -0
  57. package/server/graphql/resolvers/marketplace-transaction-rate/index.ts +13 -0
  58. package/server/graphql/resolvers/marketplace-transaction-rate/marketplace-transaction-rates.ts +15 -0
  59. package/server/graphql/resolvers/marketplace-transaction-rate/update-multiple-marketplace-transaction-rate.ts +47 -0
  60. package/server/graphql/types/index.ts +1 -0
  61. package/server/graphql/types/marketplace-order-item/marketplace-order-item.ts +4 -0
  62. package/server/graphql/types/marketplace-order-shipping/marketplace-order-shipping.ts +1 -0
  63. package/server/graphql/types/marketplace-transaction-rate/index.ts +20 -0
  64. package/server/graphql/types/marketplace-transaction-rate/marketplace-transaction-rate-list.ts +8 -0
  65. package/server/graphql/types/marketplace-transaction-rate/marketplace-transaction-rate-patch.ts +13 -0
  66. package/server/graphql/types/marketplace-transaction-rate/marketplace-transaction-rate.ts +18 -0
  67. package/server/index.ts +1 -0
  68. package/dist-server/entities/marketplace-setting.js.map +0 -1
@@ -10,5 +10,6 @@ export * from './store-replenishment'
10
10
  export * from './store-replenishment-item'
11
11
  export * from './marketplace-refund-order'
12
12
  export * from './marketplace-report'
13
+ export * from './marketplace-transaction-rate'
13
14
 
14
15
  export * from './marketplace-product-variation-price'
@@ -2,6 +2,7 @@ import { EntityManager, IsNull, SelectQueryBuilder } from 'typeorm'
2
2
  import { v4 as uuidv4 } from 'uuid'
3
3
 
4
4
  import { User } from '@things-factory/auth-base'
5
+ import { logger } from '@things-factory/env'
5
6
  import { MarketplaceStore as MarketplaceStoreEntity } from '@things-factory/integration-marketplace'
6
7
  import { Product, ProductBundle, ProductBundleSetting } from '@things-factory/product-base'
7
8
  import { Domain } from '@things-factory/shell'
@@ -113,6 +114,10 @@ export async function generateMarketplaceOrder(
113
114
  marketplaceOrderItem.domain = domain
114
115
  marketplaceOrderItem.creator = user
115
116
 
117
+ if (foundVariation.sku) {
118
+ await updateQtyAndReserveQty(tx, foundVariation, newMarketplaceOrder, marketplaceOrderItem.qty)
119
+ }
120
+
116
121
  return marketplaceOrderItem
117
122
  })
118
123
  )
@@ -179,3 +184,109 @@ export async function generateMarketplaceOrder(
179
184
 
180
185
  return newMarketplaceOrder
181
186
  }
187
+
188
+ export async function updateQtyAndReserveQtyBundle(tx, variation, domain, qty, marketplaceOrder) {
189
+ const productBundle: ProductBundle = await tx.getRepository(ProductBundle).findOne({
190
+ where: { sku: variation.sku, domain },
191
+ relations: ['productBundleSettings', 'productBundleSettings.product']
192
+ })
193
+
194
+ if (productBundle) {
195
+ for (let setting of productBundle.productBundleSettings) {
196
+ const mpvs: MarketplaceProductVariationEntity[] = await tx.getRepository(MarketplaceProductVariationEntity).find({
197
+ where: { domain, sku: setting.product.sku },
198
+ relations: ['domain']
199
+ })
200
+
201
+ for (let mpv of mpvs) {
202
+ try {
203
+ let updatedReserveQty = 0
204
+ let updatedQty = 0
205
+
206
+ if (qty > 0 && marketplaceOrder.marketplaceStore.reserveEnabled) {
207
+ updatedReserveQty += setting.bundleQty * qty
208
+ }
209
+
210
+ if (mpv.qty - setting.bundleQty * qty >= 0) {
211
+ updatedQty += setting.bundleQty * qty
212
+ }
213
+ await tx
214
+ .createQueryBuilder()
215
+ .update(MarketplaceProductVariationEntity)
216
+ .set({
217
+ qty: () => `COALESCE("qty", 0) - ${updatedQty}`,
218
+ reserveQty: () => `COALESCE("reserve_qty", 0) + ${updatedReserveQty}`
219
+ })
220
+ .where('id = :id', { id: mpv.id })
221
+ .execute()
222
+
223
+ let log = {
224
+ marketplaceOrder: marketplaceOrder.name,
225
+ releaseOrder: marketplaceOrder?.releaseOrderId,
226
+ mpvId: mpv.id,
227
+ sku: mpv?.sku,
228
+ qty: updatedQty,
229
+ reservedQty: updatedReserveQty,
230
+ bundleProduct: true
231
+ }
232
+ logger.info(`[reserveQty] ${JSON.stringify(log)}`)
233
+ } catch (e) {
234
+ logger.error(`[marketplace-base] ${e}`)
235
+ }
236
+ }
237
+ }
238
+ }
239
+ }
240
+
241
+ export async function updateQtyAndReserveQty(tx, foundVariation, marketplaceOrder, qty) {
242
+ let activeVariations: MarketplaceProductVariationEntity[] = await tx
243
+ .getRepository(MarketplaceProductVariationEntity)
244
+ .createQueryBuilder('mpv')
245
+ .innerJoin('mpv.marketplaceProduct', 'marketplaceProduct')
246
+ .innerJoin('marketplaceProduct.marketplaceStore', 'marketplaceStore')
247
+ .where('mpv.domain_id = :domainId', { domainId: marketplaceOrder.domain.id })
248
+ .andWhere('mpv.sku = :sku', { sku: foundVariation.sku })
249
+ .andWhere(`marketplaceStore.status != 'TERMINATED'`)
250
+ .getMany()
251
+
252
+ await updateQtyAndReserveQtyBundle(tx, foundVariation, marketplaceOrder.domain, qty, marketplaceOrder)
253
+
254
+ await Promise.all(
255
+ activeVariations.map(async variation => {
256
+ try {
257
+ let updatedReserveQty = 0
258
+ let updatedQty = 0
259
+
260
+ if (qty > 0 && marketplaceOrder.marketplaceStore.reserveEnabled) {
261
+ updatedReserveQty = qty
262
+ }
263
+ if (variation.qty - qty >= 0) {
264
+ updatedQty = qty
265
+ }
266
+
267
+ await tx
268
+ .createQueryBuilder()
269
+ .update(MarketplaceProductVariationEntity)
270
+ .set({
271
+ qty: () => `COALESCE("qty", 0) - ${updatedQty}`,
272
+ reserveQty: () => `COALESCE("reserve_qty", 0) + ${updatedReserveQty}`
273
+ })
274
+ .where('id = :id', { id: variation.id })
275
+ .execute()
276
+
277
+ let log = {
278
+ marketplaceOrder: marketplaceOrder.name,
279
+ releaseOrder: marketplaceOrder?.releaseOrderId,
280
+ mpvId: variation.id,
281
+ sku: variation?.sku,
282
+ qty: updatedQty,
283
+ reservedQty: updatedReserveQty,
284
+ bundle: false
285
+ }
286
+ logger.info(`[reserveQty] ${JSON.stringify(log)}`)
287
+ } catch (e) {
288
+ logger.error(`[marketplace-base] ${e}`)
289
+ }
290
+ })
291
+ )
292
+ }
@@ -5,7 +5,11 @@ import { dashboardMarketplaceOrdersResolver } from './dashboard-marketplace-orde
5
5
  import { dashboardMarketplaceSalesResolver } from './dashboard-marketplace-sales'
6
6
  import { dashboardMarketplaceSalesAverageResolver } from './dashboard-marketplace-sales-average'
7
7
  import { deleteMarketplaceOrders } from './delete-marketplace-orders'
8
- import { generateMarketplaceOrderResolver } from './generate-marketplace-order'
8
+ import {
9
+ generateMarketplaceOrderResolver,
10
+ updateQtyAndReserveQty,
11
+ updateQtyAndReserveQtyBundle
12
+ } from './generate-marketplace-order'
9
13
  import { getAddressList } from './get-address-list'
10
14
  import { getBranchList } from './get-branch-list'
11
15
  import { getETraxOrderDocumentFunction, getETraxOrderDocumentResolver } from './get-etrax-order-document'
@@ -27,10 +31,10 @@ import { setOwnShippingProviderByOrdersResolver } from './set-own-shipping-provi
27
31
  import { splitOrdersByBatch } from './split-orders-by-batch'
28
32
  import { syncAllMarketplaceOrder } from './sync-all-marketplace-order'
29
33
  import { syncMarketplaceOrder } from './sync-marketplace-order'
34
+ import { syncMarketplaceOrdersByPlatform } from './sync-marketplace-orders-by-platform'
35
+ import { syncShopeeAwb } from './sync-shopee-awb'
30
36
  import { updateMarketplaceOrder } from './update-marketplace-order'
31
37
  import { updateOrderReadyToShip } from './update-order-ready-to-ship'
32
- import { syncShopeeAwb } from './sync-shopee-awb'
33
- import { syncMarketplaceOrdersByPlatform } from './sync-marketplace-orders-by-platform'
34
38
 
35
39
  export const MarketplaceOrderResolver = {
36
40
  Query: {
@@ -72,4 +76,4 @@ export const MarketplaceOrderResolver = {
72
76
  }
73
77
  }
74
78
 
75
- export { getETraxOrderDocumentFunction }
79
+ export { getETraxOrderDocumentFunction, updateQtyAndReserveQty, updateQtyAndReserveQtyBundle }
@@ -302,6 +302,7 @@ export const syncMarketplaceOrder = {
302
302
  marketplaceOrderShipping.phone1 = orderShipping.phone1
303
303
  marketplaceOrderShipping.phone2 = orderShipping.phone2
304
304
  marketplaceOrderShipping.trackingNo = order?.trackingNo || null
305
+ marketplaceOrderShipping.packageId = orderShipping.packageId || null
305
306
  marketplaceOrderShipping.orderNoRef = marketplaceOrder.orderNo
306
307
  marketplaceOrderShipping.subOrderNoRef = marketplaceOrder.orderNo
307
308
  marketplaceOrderShipping.marketplaceStore = marketplaceStore
@@ -917,7 +918,7 @@ async function updateQtyAndReserveQty(
917
918
  .execute()
918
919
 
919
920
  // reserve qty log
920
-
921
+
921
922
  try {
922
923
  let log = {
923
924
  marketplaceOrder: marketplaceOrder.name,
@@ -98,7 +98,9 @@ export const updateOrderReadyToShip = {
98
98
  trackingUrl: mos[0].trackingUrl || '',
99
99
  trackingNo,
100
100
  order: foundMarketplaceOrder,
101
- note
101
+ note,
102
+ transporter: mos[0].ownTransporter,
103
+ packageId: mos[0].packageId
102
104
  })
103
105
 
104
106
  if (marketplaceStore.platform === 'woocommerce') {
@@ -0,0 +1,15 @@
1
+ import { getRepository, In } from 'typeorm'
2
+ import { MarketplaceTransactionRate } from '../../../entities'
3
+
4
+ export const deleteMarketplaceTransactionRates = {
5
+ async deleteMarketplaceTransactionRates(_: any, { ids }, context: any) {
6
+ const { domain, user } = context.state
7
+
8
+ await getRepository(MarketplaceTransactionRate).delete({
9
+ domain,
10
+ id: In(ids)
11
+ })
12
+
13
+ return true
14
+ }
15
+ }
@@ -0,0 +1,13 @@
1
+ import { marketplaceTransactionRatesResolver } from './marketplace-transaction-rates'
2
+ import { updateMultipleMarketplaceTransactionRate } from './update-multiple-marketplace-transaction-rate'
3
+ import { deleteMarketplaceTransactionRates }from './delete-marketplace-transaction-rates'
4
+
5
+ export const marketplaceTransactionRateResolver = {
6
+ Query: {
7
+ ...marketplaceTransactionRatesResolver
8
+ },
9
+ Mutation: {
10
+ ...updateMultipleMarketplaceTransactionRate,
11
+ ...deleteMarketplaceTransactionRates
12
+ }
13
+ }
@@ -0,0 +1,15 @@
1
+ import { convertListParams, ListParam } from '@things-factory/shell'
2
+ import { getRepository } from 'typeorm'
3
+ import { MarketplaceTransactionRate } from '../../../entities'
4
+
5
+ export const marketplaceTransactionRatesResolver = {
6
+ async marketplaceTransactionRates(_: any, params: ListParam, context: any) {
7
+ const convertedParams = convertListParams(params, context.state.domain.id)
8
+ const [items, total] = await getRepository(MarketplaceTransactionRate).findAndCount({
9
+ ...convertedParams,
10
+ relations: ['marketplaceStore', 'domain', 'creator', 'updater']
11
+ })
12
+
13
+ return { items, total }
14
+ }
15
+ }
@@ -0,0 +1,47 @@
1
+ import { getRepository } from 'typeorm'
2
+
3
+ import { MarketplaceTransactionRate } from '../../../entities'
4
+
5
+ export const updateMultipleMarketplaceTransactionRate = {
6
+ async updateMultipleMarketplaceTransactionRate(_: any, { patches }, context: any) {
7
+ const { domain, user } = context.state
8
+
9
+ let results = []
10
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
11
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
12
+ const marketplaceTransactionRateRepo = getRepository(MarketplaceTransactionRate)
13
+
14
+ if (_createRecords.length > 0) {
15
+ for (let i = 0; i < _createRecords.length; i++) {
16
+ const newRecord = _createRecords[i]
17
+
18
+ const result = await marketplaceTransactionRateRepo.save({
19
+ ...newRecord,
20
+ name: `${newRecord.brand} (${newRecord.paymentMethod})`,
21
+ domain: domain,
22
+ creator: user,
23
+ updater: user
24
+ })
25
+
26
+ results.push({ ...result, cuFlag: '+' })
27
+ }
28
+ }
29
+
30
+ if (_updateRecords.length > 0) {
31
+ for (let i = 0; i < _updateRecords.length; i++) {
32
+ const newRecord = _updateRecords[i]
33
+ const marketplaceTransactionRate = await marketplaceTransactionRateRepo.findOne({ domain, id: newRecord.id })
34
+
35
+ const result = await marketplaceTransactionRateRepo.save({
36
+ ...marketplaceTransactionRate,
37
+ ...newRecord,
38
+ updater: user
39
+ })
40
+
41
+ results.push({ ...result, cuFlag: 'M' })
42
+ }
43
+ }
44
+
45
+ return results
46
+ }
47
+ }
@@ -11,3 +11,4 @@ export * from './marketplace-product-variation-price'
11
11
  export * from './marketplace-refund-order'
12
12
  export * from './marketplace-report'
13
13
  export * from './marketplace-order-shipping-item'
14
+ export * from './marketplace-transaction-rate'
@@ -25,6 +25,10 @@ export const MarketplaceOrderItem = gql`
25
25
  promotionId: String
26
26
  paymentFee: Float
27
27
  platformFee: Float
28
+ serviceFee: Float
29
+ brand: String
30
+ transactionRateType: String
31
+ transactionRate: Float
28
32
  updater: User
29
33
  creator: User
30
34
  updatedAt: String
@@ -11,6 +11,7 @@ export const MarketplaceOrderShipping = gql`
11
11
  marketplaceStore: MarketplaceStore
12
12
  orderNoRef: String
13
13
  subOrderNoRef: String
14
+ packageId: String
14
15
  shippingId: String
15
16
  billingAddress: String
16
17
  address1: String
@@ -0,0 +1,20 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export * from './marketplace-transaction-rate'
4
+ export * from './marketplace-transaction-rate-list'
5
+ export * from './marketplace-transaction-rate-patch'
6
+
7
+ export const MarketplaceTransactionRateResolver = gql`
8
+ extend type Query {
9
+ marketplaceTransactionRates(
10
+ filters: [Filter]
11
+ pagination: Pagination
12
+ sortings: [Sorting]
13
+ ): MarketplaceTransactionRateList
14
+ }
15
+
16
+ extend type Mutation {
17
+ updateMultipleMarketplaceTransactionRate(patches: [MarketplaceTransactionRatePatch]!): [MarketplaceTransactionRate]
18
+ deleteMarketplaceTransactionRates (ids: [String]!): Boolean
19
+ }
20
+ `
@@ -0,0 +1,8 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const MarketplaceTransactionRateList = gql`
4
+ type MarketplaceTransactionRateList {
5
+ items: [MarketplaceTransactionRate]
6
+ total: Int
7
+ }
8
+ `
@@ -0,0 +1,13 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const MarketplaceTransactionRatePatch = gql`
4
+ input MarketplaceTransactionRatePatch {
5
+ id: String
6
+ brand: String
7
+ paymentMethod: String
8
+ rateType: String
9
+ rate: Float
10
+ marketplaceStore: ObjectRef
11
+ cuFlag: String
12
+ }
13
+ `
@@ -0,0 +1,18 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const MarketplaceTransactionRate = gql`
4
+ type MarketplaceTransactionRate {
5
+ id: String
6
+ name: String
7
+ domain: Domain
8
+ brand: String
9
+ paymentMethod: String
10
+ rateType: String
11
+ rate: Float
12
+ marketplaceStore: MarketplaceStore
13
+ createdAt: Date
14
+ updatedAt: Date
15
+ creator: User
16
+ updater: User
17
+ }
18
+ `
package/server/index.ts CHANGED
@@ -5,3 +5,4 @@ export * from './migrations'
5
5
  export * from './graphql'
6
6
  export * from './middlewares'
7
7
  export * from './utils'
8
+ export { updateQtyAndReserveQty, updateQtyAndReserveQtyBundle } from './graphql/resolvers/marketplace-order'
@@ -1 +0,0 @@
1
- {"version":3,"file":"marketplace-setting.js","sourceRoot":"","sources":["../../server/entities/marketplace-setting.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,yDAAgD;AAChD,qFAA0E;AAC1E,iDAA8C;AAC9C,qCAAsH;AAY/G,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CAiC9B,CAAA;AAhCC;IAAC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;8CACrB;AAEV;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;kDAClB,cAAM,oBAAN,cAAM;kDAAA;AAEd;IAAC,IAAA,gBAAM,GAAE;;gDACG;AAEZ;IAAC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDACR;AAEnB;IAAC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oDACX;AAEhB;IAAC,IAAA,gBAAM,GAAE;;iDACI;AAEb;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,0CAAgB,CAAC;kDAClB,0CAAgB,oBAAhB,0CAAgB;4DAAA;AAElC;IAAC,IAAA,0BAAgB,GAAE;8BACR,IAAI;qDAAA;AAEf;IAAC,IAAA,0BAAgB,GAAE;8BACR,IAAI;qDAAA;AAEf;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDACnC,gBAAI,oBAAJ,gBAAI;mDAAA;AAEb;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDACnC,gBAAI,oBAAJ,gBAAI;mDAAA;AAhCF,kBAAkB;IAV9B,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EACJ,0BAA0B,EAC1B,CAAC,kBAAsC,EAAE,EAAE,CAAC;QAC1C,kBAAkB,CAAC,MAAM;QACzB,kBAAkB,CAAC,gBAAgB;QACnC,kBAAkB,CAAC,IAAI;KACxB,EACD,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB;GACY,kBAAkB,CAiC9B;AAjCY,gDAAkB"}