@devx-commerce/plugin-gati 0.0.34-beta.46 → 0.0.34-beta.48

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.
@@ -4,7 +4,39 @@ exports.processOrderMasterFromWebhookStep = void 0;
4
4
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
5
  const utils_1 = require("@medusajs/framework/utils");
6
6
  const order_master_1 = require("../../../modules/order-master");
7
+ const party_master_1 = require("../../../modules/party-master");
8
+ const extended_variant_1 = require("../../../modules/extended-variant");
9
+ const shipping_info_master_1 = require("../../../modules/shipping-info-master");
7
10
  const framework_1 = require("@medusajs/framework");
11
+ /**
12
+ * Map ERP BookName to Medusa payment provider_id.
13
+ * Matches the reverse of the payment mapping in sync-order-to-erp.ts.
14
+ */
15
+ function getProviderFromBookName(bookName) {
16
+ const name = (bookName ?? "").toLowerCase();
17
+ if (name.includes("upi") || name.includes("card") || name.includes("worldline") || name.includes("pos") || name.includes("swipe")) {
18
+ return "pp_worldline-pos_worldline_pos";
19
+ }
20
+ if (name.includes("delivery") || name.includes("cod") || name.includes("payu") || name.includes("gokwik")) {
21
+ return "pp_gokwik_gokwik";
22
+ }
23
+ if (name.includes("razorpay")) {
24
+ return "pp_razorpay_razorpay";
25
+ }
26
+ if (name.includes("cheque")) {
27
+ return "pp_cheque_cheque";
28
+ }
29
+ if (name.includes("bank") || name.includes("transfer") || name.includes("neft") || name.includes("rtgs") || name.includes("imps")) {
30
+ return "pp_bank_transfer_bank_transfer";
31
+ }
32
+ if (name.includes("wallet")) {
33
+ return "pp_wallet_wallet";
34
+ }
35
+ if (name.includes("cash")) {
36
+ return "pp_cash_cash";
37
+ }
38
+ return "pp_system_default";
39
+ }
8
40
  /**
9
41
  * Normalize fetch result: getMasterData can return single object or array per id.
10
42
  */
@@ -16,8 +48,570 @@ function normalizeOrderDataList(result) {
16
48
  }
17
49
  return result && typeof result === "object" && "OrderId" in result ? [result] : [];
18
50
  }
51
+ // ─── Shared: Create Medusa payment collections from ERP PaymentOption data ───
52
+ async function createPaymentCollectionsFromErp(container, link, medusaOrderId, data) {
53
+ const erpPayments = (data.PaymentOption ?? []).filter((p) => p.Amount > 0);
54
+ if (!erpPayments.length) {
55
+ framework_1.logger.info(`[Webhook] No ERP payments (Amount>0) for order ${medusaOrderId} — skipping payment collection`);
56
+ return;
57
+ }
58
+ try {
59
+ const paymentModule = container.resolve(utils_1.Modules.PAYMENT);
60
+ const orderModule = container.resolve(utils_1.Modules.ORDER);
61
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
62
+ // Check for existing payment collections linked to this order
63
+ const { data: existingOrders } = await query.graph({
64
+ entity: "order",
65
+ fields: [
66
+ "payment_collections.id",
67
+ "payment_collections.status",
68
+ "payment_collections.payments.id",
69
+ "payment_collections.payments.amount",
70
+ "payment_collections.payments.captured_at",
71
+ ],
72
+ filters: { id: medusaOrderId },
73
+ });
74
+ const existingCollections = existingOrders?.[0]?.payment_collections ?? [];
75
+ if (existingCollections.length > 0) {
76
+ // Payment collections already exist — ensure transactions are registered
77
+ for (const col of existingCollections) {
78
+ for (const payment of (col.payments ?? [])) {
79
+ if (payment.captured_at) {
80
+ try {
81
+ await orderModule.addTransactions([{
82
+ order_id: medusaOrderId,
83
+ amount: payment.amount,
84
+ currency_code: "inr",
85
+ reference: "payment",
86
+ reference_id: payment.id,
87
+ }]);
88
+ framework_1.logger.info(`[Webhook] addTransactions for existing payment ${payment.id} on order ${medusaOrderId}`);
89
+ }
90
+ catch (txErr) {
91
+ framework_1.logger.warn(`[Webhook] addTransactions (existing payment) skipped for ${medusaOrderId}: ${txErr?.message}`);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ return;
97
+ }
98
+ const totalAmount = erpPayments.reduce((sum, p) => sum + Math.round(p.Amount), 0);
99
+ const paymentCollection = await paymentModule.createPaymentCollections({
100
+ currency_code: "inr",
101
+ amount: totalAmount,
102
+ });
103
+ // Link payment collection → Medusa order
104
+ await link.create({
105
+ [utils_1.Modules.ORDER]: { order_id: medusaOrderId },
106
+ [utils_1.Modules.PAYMENT]: { payment_collection_id: paymentCollection.id },
107
+ });
108
+ // One session per ERP payment → authorize → capture
109
+ for (const p of erpPayments) {
110
+ const amount = Math.round(p.Amount);
111
+ const providerId = getProviderFromBookName(p.BookName);
112
+ const session = await paymentModule.createPaymentSession(paymentCollection.id, {
113
+ provider_id: providerId,
114
+ currency_code: "inr",
115
+ amount: amount,
116
+ data: {
117
+ book_name: p.BookName ?? "",
118
+ trans_prefix: p.TransPrefix ?? "",
119
+ trans_no: p.TransNo ?? "",
120
+ voucher_entry_id: String(p.VoucherEntryId ?? ""),
121
+ },
122
+ });
123
+ // authorizePaymentSession returns PaymentDTO (the payment itself, not the session)
124
+ const payment = await paymentModule.authorizePaymentSession(session.id, {});
125
+ if (payment?.id) {
126
+ await paymentModule.capturePayment({
127
+ payment_id: payment.id,
128
+ amount: amount,
129
+ });
130
+ // Register transaction with order module so paid_total / pending_difference are correct
131
+ try {
132
+ await orderModule.addTransactions([{
133
+ order_id: medusaOrderId,
134
+ amount: amount,
135
+ currency_code: "inr",
136
+ reference: "payment",
137
+ reference_id: payment.id,
138
+ }]);
139
+ }
140
+ catch (txErr) {
141
+ framework_1.logger.warn(`[Webhook] addTransactions failed for order ${medusaOrderId}: ${txErr?.message}`);
142
+ }
143
+ }
144
+ }
145
+ framework_1.logger.info(`[Webhook] Created payment collection ${paymentCollection.id} with ${erpPayments.length} payments (total: ${totalAmount}) for order ${medusaOrderId}`);
146
+ }
147
+ catch (payErr) {
148
+ framework_1.logger.warn(`[Webhook] Payment collection creation failed for order ${medusaOrderId}: ${payErr?.message}`);
149
+ }
150
+ }
151
+ // ─── Shared: Create or update extended_order record ──────────────────────────
152
+ async function createOrUpdateExtendedOrder(container, link, medusaOrderId, erpOrderIdStr, data, customerInfo = {}) {
153
+ try {
154
+ const extOrderService = container.resolve("extended_order");
155
+ const erpPayments = (data.PaymentOption ?? []).filter((p) => p.Amount > 0);
156
+ const paymentMode = erpPayments.length > 1 ? "split" : erpPayments.length === 1 ? "single" : null;
157
+ const existing = await extOrderService.listExtendedOrders({ order_id: medusaOrderId });
158
+ if (existing?.length > 0) {
159
+ const updatePayload = {
160
+ id: existing[0].id,
161
+ external_id: erpOrderIdStr,
162
+ sync_erp: true,
163
+ sync_erp_error: null,
164
+ };
165
+ if (paymentMode)
166
+ updatePayload.payment_mode = paymentMode;
167
+ if (customerInfo.customerId)
168
+ updatePayload.customer_id = customerInfo.customerId;
169
+ if (customerInfo.email)
170
+ updatePayload.customer_email = customerInfo.email;
171
+ if (customerInfo.phone)
172
+ updatePayload.customer_phone = customerInfo.phone;
173
+ if (data.Customer)
174
+ updatePayload.customer_name = data.Customer;
175
+ await extOrderService.updateExtendedOrders(updatePayload);
176
+ framework_1.logger.info(`[Webhook] Updated extended_order ${existing[0].id} for order ${medusaOrderId}`);
177
+ }
178
+ else {
179
+ const extOrder = await extOrderService.createExtendedOrders({
180
+ order_id: medusaOrderId,
181
+ display_id: [data.OrderPrefix, data.OrderNo].filter(Boolean).join("/") || erpOrderIdStr,
182
+ is_manual: false,
183
+ source: "pos",
184
+ order_type: null,
185
+ customer_id: customerInfo.customerId || "",
186
+ customer_name: data.Customer || null,
187
+ customer_email: customerInfo.email || null,
188
+ customer_phone: customerInfo.phone || null,
189
+ payment_mode: paymentMode,
190
+ payment_type: "full",
191
+ external_id: erpOrderIdStr,
192
+ sync_erp: true,
193
+ sync_erp_error: null,
194
+ });
195
+ // Link extended_order → Medusa order via link module
196
+ try {
197
+ await link.create({
198
+ [utils_1.Modules.ORDER]: { order_id: medusaOrderId },
199
+ extended_order: { extended_order_id: extOrder.id },
200
+ });
201
+ }
202
+ catch (linkErr) {
203
+ framework_1.logger.warn(`[Webhook] extended_order link failed for order ${medusaOrderId}: ${linkErr?.message}`);
204
+ }
205
+ framework_1.logger.info(`[Webhook] Created extended_order ${extOrder.id} for order ${medusaOrderId}`);
206
+ }
207
+ }
208
+ catch (err) {
209
+ framework_1.logger.warn(`[Webhook] extended_order create/update failed for order ${medusaOrderId}: ${err?.message}`);
210
+ }
211
+ }
212
+ // ─── Sub-scenario B: Link existing Medusa order ─────────────────────────────
213
+ async function handleExistingMedusaOrder(medusaOrderId, master, data, erpOrderIdStr, link, query, container) {
214
+ const partyMasterService = container.resolve(party_master_1.PARTY_MASTER_MODULE);
215
+ // ─── Resolve customer info ───────────────────────────────────────────────
216
+ const partyList = await partyMasterService.listPartyMasters({
217
+ party_no: data.CustomerId,
218
+ });
219
+ const party = partyList?.[0] ?? null;
220
+ const medusaCustomerId = party?.mapping_id ?? null;
221
+ let orderEmail = party?.firm_email || "";
222
+ if (!orderEmail && medusaCustomerId) {
223
+ try {
224
+ const { data: customers } = await query.graph({
225
+ entity: "customer",
226
+ fields: ["email"],
227
+ filters: { id: medusaCustomerId },
228
+ });
229
+ orderEmail = customers?.[0]?.email || "";
230
+ }
231
+ catch (_) { /* ignore */ }
232
+ }
233
+ // Merge ERP fields into order metadata (Medusa does a shallow merge — existing keys are preserved)
234
+ try {
235
+ const orderModule = container.resolve(utils_1.Modules.ORDER);
236
+ const addlessItemsExisting = (data.AddlessDetail ?? []);
237
+ const disAmountExisting = addlessItemsExisting.find((a) => a.Prompt === "DIS")?.AddLessAmount ?? 0;
238
+ const promoAmountExisting = addlessItemsExisting.find((a) => a.Prompt === "PROMOCODE")?.AddLessAmount ?? 0;
239
+ const roundingAmountExisting = addlessItemsExisting.find((a) => /rounding/i.test(a.Prompt ?? ""))?.AddLessAmount ?? 0;
240
+ await orderModule.updateOrders({
241
+ id: medusaOrderId,
242
+ metadata: {
243
+ external_id: erpOrderIdStr,
244
+ sync_erp: true,
245
+ OrderId: data.OrderId ?? null,
246
+ OrderPrefix: data.OrderPrefix ?? null,
247
+ OrderNo: data.OrderNo ?? null,
248
+ OrderDate: data.OrderDate ?? null,
249
+ Detail: (data.OrderDetail ?? []).map((item) => ({
250
+ SrNo: item.SrNo,
251
+ JewelId: item.JewelId,
252
+ StyleId: item.StyleId,
253
+ OrderItemId: item.OrderItemId,
254
+ PartyStyleId: item.PartyStyleId,
255
+ })),
256
+ ...(disAmountExisting !== 0 ? { store_discount: { code: "STORE_DISCOUNT", amount: disAmountExisting } } : {}),
257
+ ...(roundingAmountExisting !== 0 ? { rounded_discount: { code: "ROUNDED_DISCOUNT", amount: roundingAmountExisting } } : {}),
258
+ ...(promoAmountExisting > 0 ? { discount: { code: data.Promocode || "PROMOCODE", amount: promoAmountExisting } } : {}),
259
+ },
260
+ });
261
+ framework_1.logger.info(`[Webhook] Updated metadata.external_id=${erpOrderIdStr} on order ${medusaOrderId}`);
262
+ }
263
+ catch (updateErr) {
264
+ framework_1.logger.warn(`[Webhook] metadata update failed for order ${medusaOrderId}: ${updateErr?.message}`);
265
+ }
266
+ // Link order_master → Medusa order
267
+ try {
268
+ await link.create({
269
+ [order_master_1.ORDER_MASTER_MODULE]: { order_master_id: master.id },
270
+ [utils_1.Modules.ORDER]: { order_id: medusaOrderId },
271
+ });
272
+ framework_1.logger.info(`[Webhook] Linked order_master ${master.id} → order ${medusaOrderId}`);
273
+ }
274
+ catch (linkError) {
275
+ const msg = linkError?.message || "";
276
+ if (msg.includes("Cannot create multiple links") ||
277
+ msg.includes("already exists") ||
278
+ msg.includes("argument of AND must be type boolean") ||
279
+ linkError?.code === "23505" ||
280
+ linkError?.name === "UniqueConstraintViolationError") {
281
+ framework_1.logger.info(`[Webhook] Link already exists (or entity verify failed) for order_master ${master.id} → order ${medusaOrderId}`);
282
+ }
283
+ else {
284
+ throw linkError;
285
+ }
286
+ }
287
+ // ─── Create extended_order and payment collections ───────────────────────
288
+ await createOrUpdateExtendedOrder(container, link, medusaOrderId, erpOrderIdStr, data, {
289
+ customerId: medusaCustomerId,
290
+ email: orderEmail,
291
+ phone: party?.owner_mobile || "",
292
+ });
293
+ await createPaymentCollectionsFromErp(container, link, medusaOrderId, data);
294
+ // Set order status to "completed" if ERP reports captured payments
295
+ const erpPaymentsExist = (data.PaymentOption ?? []).some((p) => p.Amount > 0);
296
+ if (erpPaymentsExist) {
297
+ try {
298
+ const orderModule = container.resolve(utils_1.Modules.ORDER);
299
+ await orderModule.updateOrders({ id: medusaOrderId, status: "completed" });
300
+ framework_1.logger.info(`[Webhook] Set order ${medusaOrderId} status → completed`);
301
+ }
302
+ catch (e) {
303
+ framework_1.logger.warn(`[Webhook] Failed to set order status completed for ${medusaOrderId}: ${e?.message}`);
304
+ }
305
+ }
306
+ }
307
+ // ─── Sub-scenario A: Create new Medusa order from ERP data ──────────────────
308
+ async function handleNewMedusaOrderFromErp(master, data, erpOrderIdStr, link, container) {
309
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
310
+ const orderModule = container.resolve(utils_1.Modules.ORDER);
311
+ const regionModule = container.resolve(utils_1.Modules.REGION);
312
+ const partyMasterService = container.resolve(party_master_1.PARTY_MASTER_MODULE);
313
+ const extendedVariantService = container.resolve(extended_variant_1.EXTENDED_VARIANT_MODULE);
314
+ const shippingInfoService = container.resolve(shipping_info_master_1.SHIPPING_INFO_MASTER_MODULE);
315
+ // ─── Resolve customer ───────────────────────────────────────────────────
316
+ const partyList = await partyMasterService.listPartyMasters({
317
+ party_no: data.CustomerId,
318
+ });
319
+ const party = partyList?.[0] ?? null;
320
+ const medusaCustomerId = party?.mapping_id ?? null;
321
+ if (!medusaCustomerId) {
322
+ framework_1.logger.warn(`[Webhook] No Medusa customer mapping for party_no=${data.CustomerId}, will create as guest`);
323
+ }
324
+ // Resolve order email: firm_email → Medusa customer email → ""
325
+ let orderEmail = party?.firm_email || "";
326
+ if (!orderEmail && medusaCustomerId) {
327
+ try {
328
+ const { data: customers } = await query.graph({
329
+ entity: "customer",
330
+ fields: ["email"],
331
+ filters: { id: medusaCustomerId },
332
+ });
333
+ orderEmail = customers?.[0]?.email || "";
334
+ }
335
+ catch (_) { /* ignore */ }
336
+ }
337
+ // ─── Resolve region ─────────────────────────────────────────────────────
338
+ const regions = await regionModule.listRegions({ currency_code: "inr" });
339
+ const region = regions?.[0] ?? null;
340
+ if (!region) {
341
+ framework_1.logger.error(`[Webhook] No INR region found — cannot create Medusa order for ERP order ${erpOrderIdStr}. ` +
342
+ `order_master ${master.id} was created/updated but has no linked Medusa order. ` +
343
+ `Create an INR region and re-trigger the webhook to complete the link.`);
344
+ return;
345
+ }
346
+ // ─── Parse taxes and discounts from AddlessDetail ────────────────────────
347
+ const addlessItems = (data.AddlessDetail ?? []);
348
+ const igstEntry = addlessItems.find((a) => /igst/i.test(a.Prompt ?? ""));
349
+ const sgstEntry = addlessItems.find((a) => /sgst/i.test(a.Prompt ?? ""));
350
+ const cgstEntry = addlessItems.find((a) => /cgst/i.test(a.Prompt ?? ""));
351
+ let gstRate = 0;
352
+ if (igstEntry && (igstEntry.AddlessPer ?? 0) > 0) {
353
+ gstRate = igstEntry.AddlessPer;
354
+ }
355
+ else {
356
+ gstRate = (sgstEntry?.AddlessPer ?? 0) + (cgstEntry?.AddlessPer ?? 0);
357
+ }
358
+ const disAmount = addlessItems.find((a) => a.Prompt === "DIS")?.AddLessAmount ?? 0;
359
+ const promoAmount = addlessItems.find((a) => a.Prompt === "PROMOCODE")?.AddLessAmount ?? 0;
360
+ const roundingAmount = addlessItems.find((a) => /rounding/i.test(a.Prompt ?? ""))?.AddLessAmount ?? 0;
361
+ const promoCode = data.Promocode || "PROMOCODE";
362
+ // Look up GST tax_rate_id via Tax Module (best-effort)
363
+ let gstTaxRateId = null;
364
+ if (gstRate > 0) {
365
+ try {
366
+ const taxModule = container.resolve(utils_1.Modules.TAX);
367
+ const taxRegions = await taxModule.listTaxRegions({ country_code: "in" });
368
+ if (taxRegions.length > 0) {
369
+ const taxRates = await taxModule.listTaxRates({
370
+ tax_region_id: taxRegions.map((r) => r.id),
371
+ });
372
+ const match = taxRates.find((r) => Math.abs((r.rate ?? 0) - gstRate) < 0.5);
373
+ gstTaxRateId = match?.id ?? null;
374
+ }
375
+ }
376
+ catch (_) { /* ignore */ }
377
+ }
378
+ // ─── Resolve variants per OrderDetail ────────────────────────────────────
379
+ const resolvedItems = await Promise.all((data.OrderDetail ?? []).map(async (item) => {
380
+ let variants = [];
381
+ // Priority 1: party_style_id (most precise — unique per variant)
382
+ if (item.PartyStyleId && item.PartyStyleId > 0) {
383
+ variants = await extendedVariantService.listExtendedVariants({
384
+ party_style_id: item.PartyStyleId,
385
+ });
386
+ }
387
+ // Priority 2: style_code + metal
388
+ if (!variants.length && item.StyleCode && item.Metal) {
389
+ variants = await extendedVariantService.listExtendedVariants({
390
+ style_code: item.StyleCode,
391
+ metal: item.Metal,
392
+ });
393
+ }
394
+ // Priority 3: style_code only
395
+ if (!variants.length && item.StyleCode) {
396
+ variants = await extendedVariantService.listExtendedVariants({
397
+ style_code: item.StyleCode,
398
+ });
399
+ }
400
+ const variantMappingId = variants?.[0]?.mapping_id ?? null;
401
+ if (!variantMappingId) {
402
+ framework_1.logger.warn(`[Webhook] No variant found for StyleCode=${item.StyleCode} PartyStyleId=${item.PartyStyleId}`);
403
+ }
404
+ // Fetch product info for line item denormalization
405
+ let variantInfo = null;
406
+ if (variantMappingId) {
407
+ try {
408
+ const { data: variantData } = await query.graph({
409
+ entity: "product_variant",
410
+ fields: ["id", "title", "sku", "product.id", "product.title", "product.handle", "product.thumbnail", "product.subtitle"],
411
+ filters: { id: variantMappingId },
412
+ });
413
+ variantInfo = variantData?.[0] ?? null;
414
+ }
415
+ catch (_) { /* ignore */ }
416
+ }
417
+ return {
418
+ item,
419
+ variantMappingId,
420
+ variantInfo,
421
+ unitPrice: Math.round(item.MRP ?? 0),
422
+ };
423
+ }));
424
+ // ─── Build line items (only resolvable variants) ─────────────────────────
425
+ const resolvedFiltered = resolvedItems.filter((i) => i.variantMappingId);
426
+ const totalSubtotal = resolvedFiltered.reduce((sum, i) => sum + i.unitPrice * (i.item.OrderItemPcs ?? 1), 0);
427
+ const lineItems = resolvedFiltered.map((i) => {
428
+ const itemSubtotal = i.unitPrice * (i.item.OrderItemPcs ?? 1);
429
+ const proportion = totalSubtotal > 0 ? itemSubtotal / totalSubtotal : 1;
430
+ const taxLines = [];
431
+ if (gstRate > 0) {
432
+ taxLines.push({
433
+ description: "GST",
434
+ ...(gstTaxRateId ? { tax_rate_id: gstTaxRateId } : {}),
435
+ code: "GST",
436
+ provider_id: "system",
437
+ rate: gstRate,
438
+ });
439
+ }
440
+ const adjustments = [];
441
+ if (disAmount > 0) {
442
+ adjustments.push({
443
+ code: "STORE_DISCOUNT",
444
+ amount: Math.round(disAmount * proportion * 100) / 100,
445
+ });
446
+ }
447
+ if (promoAmount > 0) {
448
+ adjustments.push({
449
+ code: promoCode,
450
+ amount: Math.round(promoAmount * proportion * 100) / 100,
451
+ });
452
+ }
453
+ if (roundingAmount !== 0) {
454
+ adjustments.push({
455
+ code: "ROUNDED_DISCOUNT",
456
+ amount: Math.round(roundingAmount * proportion * 100) / 100,
457
+ });
458
+ }
459
+ return {
460
+ variant_id: i.variantMappingId,
461
+ product_id: i.variantInfo?.product?.id ?? null,
462
+ product_title: i.variantInfo?.product?.title ?? null,
463
+ product_handle: i.variantInfo?.product?.handle ?? null,
464
+ product_subtitle: i.variantInfo?.product?.subtitle ?? null,
465
+ thumbnail: i.variantInfo?.product?.thumbnail ?? null,
466
+ variant_title: i.variantInfo?.title ?? null,
467
+ variant_sku: i.variantInfo?.sku ?? null,
468
+ quantity: i.item.OrderItemPcs ?? 1,
469
+ unit_price: i.unitPrice,
470
+ title: i.variantInfo?.product?.title ?? [i.item.StyleCode, i.item.ItemSizeName, i.item.Metal, i.item.Tone].filter(Boolean).join(" - "),
471
+ subtitle: i.variantInfo?.title ?? null,
472
+ ...(taxLines.length > 0 ? { tax_lines: taxLines } : {}),
473
+ ...(adjustments.length > 0 ? { adjustments } : {}),
474
+ metadata: {
475
+ erp_order_item_id: String(i.item.OrderItemId ?? ""),
476
+ erp_style_id: String(i.item.StyleId ?? ""),
477
+ erp_make_type: i.item.MakeType ?? null,
478
+ erp_stock_type: i.item.StockType ?? null,
479
+ erp_expected_delivery: i.item.Expecteddeliverydate ?? null,
480
+ item_po_no: i.item.ItemPoNo || null,
481
+ },
482
+ };
483
+ });
484
+ if (!lineItems.length) {
485
+ framework_1.logger.warn(`[Webhook] No resolvable variants for ERP order ${erpOrderIdStr} — Medusa order not created. ` +
486
+ `order_master ${master.id} was created/updated but has no linked Medusa order. ` +
487
+ `Resolve variant mappings and re-trigger the webhook to complete the link.`);
488
+ return;
489
+ }
490
+ // ─── Resolve shipping address ─────────────────────────────────────────────
491
+ let shippingAddress = undefined;
492
+ let billingAddress = undefined;
493
+ // Try ShippingId from ERP order first
494
+ if (data.ShippingId) {
495
+ try {
496
+ const shippingList = await shippingInfoService.listShippingInfoMasters({
497
+ shipping_id: data.ShippingId,
498
+ });
499
+ const si = shippingList?.[0];
500
+ if (si) {
501
+ shippingAddress = {
502
+ first_name: si.shipping_name || data.Customer || "",
503
+ last_name: "",
504
+ address_1: si.address1 || "",
505
+ address_2: si.address2 || "",
506
+ city: si.city || "",
507
+ country_code: "in",
508
+ province: si.state || "",
509
+ postal_code: si.pin_code || "",
510
+ phone: si.mobile_no || party?.owner_mobile || "",
511
+ company: "",
512
+ metadata: { party_shipping_id: String(si.shipping_id ?? "") },
513
+ };
514
+ }
515
+ }
516
+ catch (_) { /* ignore */ }
517
+ }
518
+ // Fallback: build address from party_master firm address
519
+ if (!shippingAddress && party) {
520
+ const addrLine = [party.firm_add1, party.firm_add2, party.firm_add3].filter(Boolean).join(", ");
521
+ if (addrLine) {
522
+ shippingAddress = {
523
+ first_name: party.firm_name || data.Customer || "",
524
+ last_name: "",
525
+ address_1: party.firm_add1 || "",
526
+ address_2: [party.firm_add2, party.firm_add3].filter(Boolean).join(", ") || "",
527
+ city: party.firm_city || "",
528
+ country_code: "in",
529
+ province: party.state || "",
530
+ postal_code: party.firm_pin_code || "",
531
+ phone: party.owner_mobile || "",
532
+ company: "",
533
+ };
534
+ }
535
+ }
536
+ billingAddress = shippingAddress;
537
+ // ─── Create Medusa order ─────────────────────────────────────────────────
538
+ const erpPaymentsForNewOrder = (data.PaymentOption ?? []).filter((p) => p.Amount > 0);
539
+ const newMedusaOrder = await orderModule.createOrders({
540
+ region_id: region.id,
541
+ currency_code: "inr",
542
+ status: erpPaymentsForNewOrder.length > 0 ? "completed" : "pending",
543
+ customer_id: medusaCustomerId ?? undefined,
544
+ email: orderEmail || undefined,
545
+ shipping_address: shippingAddress,
546
+ billing_address: billingAddress,
547
+ items: lineItems,
548
+ metadata: {
549
+ external_id: erpOrderIdStr, // ERP OrderId — prevents Flow 1 re-sync
550
+ sync_erp: true, // tells Flow 1 cron: already synced, skip
551
+ source: "erp", // origin marker
552
+ code: null,
553
+ OrderId: data.OrderId ?? null,
554
+ OrderPrefix: data.OrderPrefix ?? null,
555
+ OrderNo: data.OrderNo ?? null,
556
+ OrderDate: data.OrderDate ?? null,
557
+ customer: {
558
+ name: data.Customer ?? "",
559
+ email: "",
560
+ phone: "",
561
+ },
562
+ branch_no: data.BranchNo ?? null,
563
+ cart_type: "POS_CART",
564
+ sales_person_name: data.SalesPerson ?? null,
565
+ payment_mode: erpPaymentsForNewOrder.length > 1 ? "split" : "single",
566
+ payment_type: "full",
567
+ cart_order_type: "ready_to_sell",
568
+ store_discount: disAmount !== 0 ? { code: "STORE_DISCOUNT", amount: disAmount } : null,
569
+ rounded_discount: roundingAmount !== 0 ? { code: "ROUNDED_DISCOUNT", amount: roundingAmount } : null,
570
+ discount: promoAmount > 0
571
+ ? { code: data.Promocode || "PROMOCODE", amount: promoAmount }
572
+ : (data.Promocode ? { code: data.Promocode, amount: data.PromocodeAmount ?? 0 } : null),
573
+ Detail: (data.OrderDetail ?? []).map((item) => ({
574
+ SrNo: item.SrNo,
575
+ JewelId: item.JewelId,
576
+ StyleId: item.StyleId,
577
+ OrderItemId: item.OrderItemId,
578
+ PartyStyleId: item.PartyStyleId,
579
+ })),
580
+ },
581
+ });
582
+ framework_1.logger.info(`[Webhook] Created Medusa order ${newMedusaOrder.id} for ERP order ${erpOrderIdStr}`);
583
+ // ─── Link order_master → new Medusa order ────────────────────────────────
584
+ try {
585
+ await link.create({
586
+ [order_master_1.ORDER_MASTER_MODULE]: { order_master_id: master.id },
587
+ [utils_1.Modules.ORDER]: { order_id: newMedusaOrder.id },
588
+ });
589
+ framework_1.logger.info(`[Webhook] Linked order_master ${master.id} → new order ${newMedusaOrder.id}`);
590
+ }
591
+ catch (linkError) {
592
+ if (linkError?.message?.includes("Cannot create multiple links") ||
593
+ linkError?.message?.includes("already exists") ||
594
+ linkError?.code === "23505" ||
595
+ linkError?.name === "UniqueConstraintViolationError") {
596
+ framework_1.logger.info(`[Webhook] Link already exists for order_master ${master.id}`);
597
+ }
598
+ else {
599
+ throw linkError;
600
+ }
601
+ }
602
+ // ─── Create payment collections and extended_order ──────────────────────
603
+ await createPaymentCollectionsFromErp(container, link, newMedusaOrder.id, data);
604
+ await createOrUpdateExtendedOrder(container, link, newMedusaOrder.id, erpOrderIdStr, data, {
605
+ customerId: medusaCustomerId,
606
+ email: orderEmail,
607
+ phone: party?.owner_mobile || "",
608
+ });
609
+ }
610
+ // ─── Main Step ───────────────────────────────────────────────────────────────
19
611
  exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("process-order-master-from-webhook-step", async (fetchResult, { container }) => {
20
612
  const orderMasterService = container.resolve(order_master_1.ORDER_MASTER_MODULE);
613
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
614
+ const link = container.resolve("link");
21
615
  const orderDataList = normalizeOrderDataList(fetchResult);
22
616
  if (!orderDataList.length) {
23
617
  framework_1.logger.info("No order data to process from webhook");
@@ -32,6 +626,7 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
32
626
  erp_order_id: Number(orderId),
33
627
  });
34
628
  let master;
629
+ // ─── STEP 1: Upsert order_master ──────────────────────────────────────
35
630
  if (existing?.length > 0) {
36
631
  framework_1.logger.info(`[Webhook] Updating Order ${orderId}`);
37
632
  master = existing[0];
@@ -56,6 +651,7 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
56
651
  promocode_percentage: data.PromocodePercentage ?? null,
57
652
  promocode_amount: data.PromocodeAmount ?? null,
58
653
  });
654
+ // ─── STEP 2: Upsert order_detail_master ───────────────────────────
59
655
  if (data?.OrderDetail?.length) {
60
656
  for (const d of data.OrderDetail) {
61
657
  const existingDetail = await orderMasterService.listOrderDetailMasters({
@@ -114,6 +710,7 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
114
710
  }
115
711
  }
116
712
  }
713
+ // ─── STEP 3: Upsert order_payment_option_master ───────────────────
117
714
  if (data?.PaymentOption?.length) {
118
715
  for (const p of data.PaymentOption) {
119
716
  let existingPayment = await orderMasterService.listOrderPaymentOptionMasters({
@@ -123,12 +720,11 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
123
720
  order_master: master.id,
124
721
  });
125
722
  if (existingPayment?.length === 0 && p.TransNo) {
126
- existingPayment =
127
- await orderMasterService.listOrderPaymentOptionMasters({
128
- erp_order_id: p.OrderId,
129
- voucher_entry_id: p.VoucherEntryId,
130
- order_master: master.id,
131
- });
723
+ existingPayment = await orderMasterService.listOrderPaymentOptionMasters({
724
+ erp_order_id: p.OrderId,
725
+ voucher_entry_id: p.VoucherEntryId,
726
+ order_master: master.id,
727
+ });
132
728
  }
133
729
  const paymentData = {
134
730
  erp_order_id: p.OrderId,
@@ -153,8 +749,36 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
153
749
  }
154
750
  }
155
751
  }
752
+ // ─── STEP 4: Upsert order_addless_detail_master (update path) ────
753
+ if (data?.AddlessDetail?.length) {
754
+ for (const a of data.AddlessDetail) {
755
+ const existingAddless = await orderMasterService.listOrderAddlessDetailMasters({
756
+ erp_order_id: a.OrderId,
757
+ prompt: a.Prompt,
758
+ order_master: master.id,
759
+ });
760
+ const addlessData = {
761
+ erp_order_id: a.OrderId,
762
+ addless_id: a.Id ?? null,
763
+ prompt: a.Prompt,
764
+ addless_per: a.AddlessPer ?? null,
765
+ addless_amount: a.AddLessAmount,
766
+ order_master: master.id,
767
+ };
768
+ if (existingAddless?.length > 0) {
769
+ await orderMasterService.updateOrderAddlessDetailMasters({
770
+ id: existingAddless[0].id,
771
+ ...addlessData,
772
+ });
773
+ }
774
+ else {
775
+ await orderMasterService.createOrderAddlessDetailMasters(addlessData);
776
+ }
777
+ }
778
+ }
156
779
  }
157
780
  else {
781
+ // ─── Create new order_master ───────────────────────────────────────
158
782
  framework_1.logger.info(`[Webhook] Creating new Order ${orderId}`);
159
783
  master = await orderMasterService.createOrderMasters({
160
784
  erp_order_id: data.OrderId,
@@ -232,52 +856,62 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
232
856
  amount: p.Amount,
233
857
  })));
234
858
  }
859
+ if (data?.AddlessDetail?.length) {
860
+ await orderMasterService.createOrderAddlessDetailMasters(data.AddlessDetail.map((a) => ({
861
+ erp_order_id: a.OrderId,
862
+ addless_id: a.Id ?? null,
863
+ prompt: a.Prompt,
864
+ addless_per: a.AddlessPer ?? null,
865
+ addless_amount: a.AddLessAmount,
866
+ order_master: master.id,
867
+ })));
868
+ }
235
869
  }
236
- // Link order_master to Medusa order when order has metadata.external_id or metadata.OrderId matching ERP OrderId
870
+ // ─── STEP 5: Detect sub-scenario ────────────────────────────────────
237
871
  const erpOrderIdStr = String(orderId);
238
- const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
239
- const link = container.resolve("link");
240
- try {
241
- const { data: orders } = await query.graph({
242
- entity: "order",
243
- fields: ["id"],
244
- filters: {
245
- // @ts-ignore - metadata filter for external_id (set by sync-order-to-erp)
246
- metadata: {
247
- external_id: erpOrderIdStr,
872
+ // CHECK 1: PoNo is a Medusa order ID (Sub-scenario B)
873
+ const poNoIsMedusaOrderId = typeof data.PoNo === "string" && data.PoNo.startsWith("order_");
874
+ let medusaOrderId = null;
875
+ if (poNoIsMedusaOrderId) {
876
+ medusaOrderId = data.PoNo;
877
+ framework_1.logger.info(`[Webhook] Order ${erpOrderIdStr} is a returning Medusa order via PoNo: ${medusaOrderId}`);
878
+ }
879
+ // CHECK 2: Existing Medusa order by metadata.external_id (Sub-scenario B)
880
+ if (!medusaOrderId) {
881
+ try {
882
+ const { data: existingOrders } = await query.graph({
883
+ entity: "order",
884
+ fields: ["id"],
885
+ filters: {
886
+ // @ts-ignore - metadata filter for external_id
887
+ metadata: { external_id: erpOrderIdStr },
248
888
  },
249
- },
250
- });
251
- if (orders?.length > 0) {
252
- const medusaOrderId = orders[0].id;
253
- try {
254
- await link.create({
255
- [order_master_1.ORDER_MASTER_MODULE]: { order_master_id: master.id },
256
- [utils_1.Modules.ORDER]: { order_id: medusaOrderId },
257
- });
258
- framework_1.logger.info(`[Webhook] Linked order_master ${master.id} to order ${medusaOrderId} (ERP OrderId: ${erpOrderIdStr})`);
259
- }
260
- catch (linkError) {
261
- if (linkError?.message?.includes("Cannot create multiple links") ||
262
- linkError?.message?.includes("already exists") ||
263
- linkError?.code === "23505" ||
264
- linkError?.name === "UniqueConstraintViolationError") {
265
- framework_1.logger.info(`[Webhook] Link already exists order_master ${master.id} to order ${medusaOrderId}`);
266
- }
267
- else {
268
- throw linkError;
269
- }
889
+ });
890
+ if (existingOrders?.length > 0) {
891
+ medusaOrderId = existingOrders[0].id;
892
+ framework_1.logger.info(`[Webhook] Found Medusa order ${medusaOrderId} by metadata.external_id=${erpOrderIdStr}`);
270
893
  }
271
894
  }
895
+ catch (queryErr) {
896
+ framework_1.logger.warn(`[Webhook] metadata.external_id lookup failed: ${queryErr?.message}`);
897
+ }
898
+ }
899
+ // ─── STEP 6/7-9: Route to correct handler ───────────────────────────
900
+ try {
901
+ if (medusaOrderId) {
902
+ // Sub-scenario B: link existing Medusa order
903
+ await handleExistingMedusaOrder(medusaOrderId, master, data, erpOrderIdStr, link, query, container);
904
+ }
272
905
  else {
273
- framework_1.logger.info(`[Webhook] No order found with metadata.external_id=${erpOrderIdStr}, skip linking order_master ${master.id}`);
906
+ // Sub-scenario A: create new Medusa order from ERP data
907
+ await handleNewMedusaOrderFromErp(master, data, erpOrderIdStr, link, container);
274
908
  }
275
909
  }
276
- catch (linkOrQueryError) {
277
- framework_1.logger.warn(`[Webhook] Could not link order_master ${master.id} to order: ${linkOrQueryError?.message}`);
910
+ catch (handlerError) {
911
+ framework_1.logger.warn(`[Webhook] Order handler error for ERP order ${erpOrderIdStr}: ${handlerError?.message}`);
278
912
  }
279
913
  processed.push(master);
280
914
  }
281
915
  return new workflows_sdk_1.StepResponse(processed);
282
916
  });
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1vcmRlci1tYXN0ZXItZnJvbS13ZWJob29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9vcmRlci1tYXN0ZXIvc3RlcHMvcHJvY2Vzcy1vcmRlci1tYXN0ZXItZnJvbS13ZWJob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUM3RSxxREFBK0U7QUFFL0UsZ0VBQW9FO0FBQ3BFLG1EQUE2QztBQUU3Qzs7R0FFRztBQUNILFNBQVMsc0JBQXNCLENBQUMsTUFBVztJQUN6QyxJQUFJLE1BQU0sSUFBSSxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDN0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDakcsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JGLENBQUM7QUFFWSxRQUFBLGlDQUFpQyxHQUFHLElBQUEsMEJBQVUsRUFDekQsd0NBQXdDLEVBQ3hDLEtBQUssRUFBRSxXQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN4QyxNQUFNLGtCQUFrQixHQUF1QixTQUFTLENBQUMsT0FBTyxDQUM5RCxrQ0FBbUIsQ0FDcEIsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsa0JBQU0sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUNyRCxPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQVUsRUFBRSxDQUFDO0lBRTVCLEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsWUFBWSxDQUFDO1FBQ3BELElBQUksT0FBTyxJQUFJLElBQUk7WUFBRSxTQUFTO1FBRTlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsZ0JBQWdCLENBQUM7WUFDekQsWUFBWSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUM7UUFFWCxJQUFJLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsa0JBQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDbkQsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixNQUFNLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDO2dCQUMxQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ2IsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUMxQixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJO2dCQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJO2dCQUNwQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFO2dCQUNwQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFO2dCQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUk7Z0JBQ3BDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUk7Z0JBQ3BDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUk7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUk7Z0JBQzVCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQ3RDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQ3ZDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUk7Z0JBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUk7Z0JBQ3BDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJO2dCQUNuRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJO2dCQUNqQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSTtnQkFDdEQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJO2FBQy9DLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ2pDLE1BQU0sY0FBYyxHQUNsQixNQUFNLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDO3dCQUM5QyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE9BQU87d0JBQ3ZCLGFBQWEsRUFBRSxDQUFDLENBQUMsV0FBVzt3QkFDNUIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFO3FCQUN4QixDQUFDLENBQUM7b0JBRUwsTUFBTSxVQUFVLEdBQUc7d0JBQ2pCLFlBQVksRUFBRSxDQUFDLENBQUMsT0FBTzt3QkFDdkIsYUFBYSxFQUFFLENBQUMsQ0FBQyxXQUFXO3dCQUM1QixZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUU7d0JBQ3ZCLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSTt3QkFDYixRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU87d0JBQ25CLFVBQVUsRUFBRSxDQUFDLENBQUMsU0FBUzt3QkFDdkIsY0FBYyxFQUFFLENBQUMsQ0FBQyxZQUFZO3dCQUM5QixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUk7d0JBQzFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUk7d0JBQzNCLFVBQVUsRUFBRSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUk7d0JBQy9CLFlBQVksRUFBRSxDQUFDLENBQUMsVUFBVTt3QkFDMUIsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRO3dCQUNyQixjQUFjLEVBQUUsQ0FBQyxDQUFDLFlBQVk7d0JBQzlCLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUTt3QkFDckIsY0FBYyxFQUFFLENBQUMsQ0FBQyxZQUFZO3dCQUM5QixhQUFhLEVBQUUsQ0FBQyxDQUFDLFdBQVc7d0JBQzVCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSzt3QkFDZCxVQUFVLEVBQUUsQ0FBQyxDQUFDLFNBQVM7d0JBQ3ZCLGFBQWEsRUFBRSxDQUFDLENBQUMsV0FBVzt3QkFDNUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO3dCQUNaLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUTt3QkFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSTt3QkFDOUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSTt3QkFDaEMsV0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVO3dCQUN6QixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7d0JBQ3BCLGFBQWEsRUFBRSxDQUFDLENBQUMsWUFBWTt3QkFDN0IsYUFBYSxFQUFFLENBQUMsQ0FBQyxXQUFXO3dCQUM1QixVQUFVLEVBQUUsQ0FBQyxDQUFDLFNBQVM7d0JBQ3ZCLGVBQWUsRUFBRSxDQUFDLENBQUMsYUFBYTt3QkFDaEMsWUFBWSxFQUFFLENBQUMsQ0FBQyxVQUFVO3dCQUMxQixTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVE7d0JBQ3JCLGNBQWMsRUFBRSxDQUFDLENBQUMsWUFBWTt3QkFDOUIsK0JBQStCLEVBQUUsQ0FBQyxDQUFDLDZCQUE2QixJQUFJLElBQUk7d0JBQ3hFLGVBQWUsRUFBRSxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUk7d0JBQ3pDLDZCQUE2QixFQUFFLENBQUMsQ0FBQywyQkFBMkIsSUFBSSxJQUFJO3dCQUNwRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLElBQUksSUFBSTt3QkFDN0Msc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxvQkFBb0I7d0JBQ3hFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRztxQkFDWCxDQUFDO29CQUVGLElBQUksY0FBYyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDL0IsTUFBTSxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQzs0QkFDaEQsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUN4QixHQUFHLFVBQVU7eUJBQ2QsQ0FBQyxDQUFDO29CQUNMLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNoRSxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxlQUFlLEdBQ2pCLE1BQU0sa0JBQWtCLENBQUMsNkJBQTZCLENBQUM7d0JBQ3JELFlBQVksRUFBRSxDQUFDLENBQUMsT0FBTzt3QkFDdkIsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLGNBQWM7d0JBQ2xDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTzt3QkFDbkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFO3FCQUN4QixDQUFDLENBQUM7b0JBQ0wsSUFBSSxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQy9DLGVBQWU7NEJBQ2IsTUFBTSxrQkFBa0IsQ0FBQyw2QkFBNkIsQ0FBQztnQ0FDckQsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPO2dDQUN2QixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsY0FBYztnQ0FDbEMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFOzZCQUN4QixDQUFDLENBQUM7b0JBQ1AsQ0FBQztvQkFFRCxNQUFNLFdBQVcsR0FBRzt3QkFDbEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPO3dCQUN2QixTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVE7d0JBQ3JCLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRTt3QkFDdkIsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLGNBQWM7d0JBQ2xDLFlBQVksRUFBRSxDQUFDLENBQUMsV0FBVzt3QkFDM0IsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPO3dCQUNuQixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsZUFBZTt3QkFDbkMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSTt3QkFDdkIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSTt3QkFDMUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNO3FCQUNqQixDQUFDO29CQUVGLElBQUksZUFBZSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsTUFBTSxrQkFBa0IsQ0FBQywrQkFBK0IsQ0FBQzs0QkFDdkQsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUN6QixHQUFHLFdBQVc7eUJBQ2YsQ0FBQyxDQUFDO29CQUNMLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLGtCQUFrQixDQUFDLCtCQUErQixDQUN0RCxXQUFXLENBQ1osQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixrQkFBTSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDbkQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUMxQixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJO2dCQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJO2dCQUNwQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFO2dCQUNwQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFO2dCQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUk7Z0JBQ3BDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUk7Z0JBQ3BDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUk7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUk7Z0JBQzVCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQ3RDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQ3ZDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUk7Z0JBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUk7Z0JBQ3BDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJO2dCQUNuRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJO2dCQUNqQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSTtnQkFDdEQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJO2FBQy9DLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2hDLFlBQVksRUFBRSxDQUFDLENBQUMsT0FBTztvQkFDdkIsYUFBYSxFQUFFLENBQUMsQ0FBQyxXQUFXO29CQUM1QixZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ3ZCLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSTtvQkFDYixRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU87b0JBQ25CLFVBQVUsRUFBRSxDQUFDLENBQUMsU0FBUztvQkFDdkIsY0FBYyxFQUFFLENBQUMsQ0FBQyxZQUFZO29CQUM5QixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUk7b0JBQzFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUk7b0JBQzNCLFVBQVUsRUFBRSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUk7b0JBQy9CLFlBQVksRUFBRSxDQUFDLENBQUMsVUFBVTtvQkFDMUIsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRO29CQUNyQixjQUFjLEVBQUUsQ0FBQyxDQUFDLFlBQVk7b0JBQzlCLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUTtvQkFDckIsY0FBYyxFQUFFLENBQUMsQ0FBQyxZQUFZO29CQUM5QixhQUFhLEVBQUUsQ0FBQyxDQUFDLFdBQVc7b0JBQzVCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztvQkFDZCxVQUFVLEVBQUUsQ0FBQyxDQUFDLFNBQVM7b0JBQ3ZCLGFBQWEsRUFBRSxDQUFDLENBQUMsV0FBVztvQkFDNUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO29CQUNaLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUTtvQkFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSTtvQkFDOUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSTtvQkFDaEMsV0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVO29CQUN6QixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7b0JBQ3BCLGFBQWEsRUFBRSxDQUFDLENBQUMsWUFBWTtvQkFDN0IsYUFBYSxFQUFFLENBQUMsQ0FBQyxXQUFXO29CQUM1QixVQUFVLEVBQUUsQ0FBQyxDQUFDLFNBQVM7b0JBQ3ZCLGVBQWUsRUFBRSxDQUFDLENBQUMsYUFBYTtvQkFDaEMsWUFBWSxFQUFFLENBQUMsQ0FBQyxVQUFVO29CQUMxQixTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVE7b0JBQ3JCLGNBQWMsRUFBRSxDQUFDLENBQUMsWUFBWTtvQkFDOUIsK0JBQStCLEVBQUUsQ0FBQyxDQUFDLDZCQUE2QixJQUFJLElBQUk7b0JBQ3hFLGVBQWUsRUFBRSxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUk7b0JBQ3pDLDZCQUE2QixFQUFFLENBQUMsQ0FBQywyQkFBMkIsSUFBSSxJQUFJO29CQUNwRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLElBQUksSUFBSTtvQkFDN0Msc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxvQkFBb0I7b0JBQ3hFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRztpQkFDWCxDQUFDLENBQUMsQ0FDSixDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxrQkFBa0IsQ0FBQywrQkFBK0IsQ0FDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2xDLFlBQVksRUFBRSxDQUFDLENBQUMsT0FBTztvQkFDdkIsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRO29CQUNyQixZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ3ZCLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxjQUFjO29CQUNsQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLFdBQVc7b0JBQzNCLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTztvQkFDbkIsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLGVBQWU7b0JBQ25DLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUk7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUk7b0JBQzFCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTTtpQkFDakIsQ0FBQyxDQUFDLENBQ0osQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsaUhBQWlIO1FBQ2pILE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ3pDLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDZCxPQUFPLEVBQUU7b0JBQ1AsMEVBQTBFO29CQUMxRSxRQUFRLEVBQUU7d0JBQ1IsV0FBVyxFQUFFLGFBQWE7cUJBQzNCO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDO3dCQUNoQixDQUFDLGtDQUFtQixDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTt3QkFDckQsQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFO3FCQUM3QyxDQUFDLENBQUM7b0JBQ0gsa0JBQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLE1BQU0sQ0FBQyxFQUFFLGFBQWEsYUFBYSxrQkFBa0IsYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDdEgsQ0FBQztnQkFBQyxPQUFPLFNBQWMsRUFBRSxDQUFDO29CQUN4QixJQUNFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLDhCQUE4QixDQUFDO3dCQUM1RCxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQzt3QkFDOUMsU0FBUyxFQUFFLElBQUksS0FBSyxPQUFPO3dCQUMzQixTQUFTLEVBQUUsSUFBSSxLQUFLLGdDQUFnQyxFQUNwRCxDQUFDO3dCQUNELGtCQUFNLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxNQUFNLENBQUMsRUFBRSxhQUFhLGFBQWEsRUFBRSxDQUFDLENBQUM7b0JBQ25HLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLFNBQVMsQ0FBQztvQkFDbEIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGtCQUFNLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxhQUFhLCtCQUErQixNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3SCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sZ0JBQXFCLEVBQUUsQ0FBQztZQUMvQixrQkFBTSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLENBQUM7UUFFRCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLElBQUksNEJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQ0YsQ0FBQyJ9
917
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1vcmRlci1tYXN0ZXItZnJvbS13ZWJob29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9vcmRlci1tYXN0ZXIvc3RlcHMvcHJvY2Vzcy1vcmRlci1tYXN0ZXItZnJvbS13ZWJob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUM3RSxxREFBK0U7QUFFL0UsZ0VBQW9FO0FBQ3BFLGdFQUFvRTtBQUNwRSx3RUFBNEU7QUFDNUUsZ0ZBQW9GO0FBQ3BGLG1EQUE2QztBQUU3Qzs7O0dBR0c7QUFDSCxTQUFTLHVCQUF1QixDQUFDLFFBQWdCO0lBQy9DLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEksT0FBTyxnQ0FBZ0MsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDMUcsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lB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