order-management 0.0.23 → 0.0.25

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,8 +4,9 @@ exports.createMedusaExchangeStep = void 0;
4
4
  const utils_1 = require("@medusajs/framework/utils");
5
5
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
6
  const swap_1 = require("../../../modules/swap");
7
+ const order_exchange_data_1 = require("../../../helpers/order-exchange-data");
7
8
  exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medusa-exchange", async (input, { container }) => {
8
- const { swap_id, return_id, outbound_shipping_method_id, send_notification, new_items: inputNewItems } = input;
9
+ const { swap_id, return_id, outbound_shipping_method_id, shipping_option_id, send_notification, new_items: inputNewItems } = input;
9
10
  if (!swap_id) {
10
11
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "swap_id is required");
11
12
  }
@@ -22,6 +23,25 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
22
23
  swap,
23
24
  });
24
25
  }
26
+ // Get order_id from swap - required for exchange creation
27
+ const orderId = swapData.order_id;
28
+ if (!orderId) {
29
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Swap must have order_id to create exchange");
30
+ }
31
+ // CRITICAL: Ensure order shipping methods have names before creating exchange
32
+ // Medusa's createExchange copies shipping methods from the order, and they must have names
33
+ // This prevents the error: "Value for OrderShippingMethod.name is required, 'undefined' found"
34
+ try {
35
+ const shippingMethodsFixed = await (0, order_exchange_data_1.ensureOrderShippingMethodsHaveNames)(orderId, container);
36
+ if (!shippingMethodsFixed) {
37
+ console.warn(`[Create Medusa Exchange] Failed to ensure shipping methods have names for order ${orderId}. Exchange creation may fail if shipping methods don't have names.`);
38
+ }
39
+ }
40
+ catch (preCheckError) {
41
+ // Log but don't fail - we'll catch the actual error during exchange creation
42
+ const errorMessage = preCheckError instanceof Error ? preCheckError.message : String(preCheckError);
43
+ console.warn(`[Create Medusa Exchange] Error checking shipping methods before exchange creation: ${errorMessage}. Will attempt exchange creation anyway.`);
44
+ }
25
45
  // Use new_items from input if provided, otherwise use from swap model
26
46
  let newItems = [];
27
47
  if (inputNewItems && inputNewItems.length > 0) {
@@ -38,9 +58,58 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
38
58
  if (newItems.length === 0) {
39
59
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Swap must have new items to create exchange");
40
60
  }
61
+ // CRITICAL: Log order shipping methods before exchange creation
62
+ // This helps diagnose issues when Medusa's createExchange fails to copy shipping_option_id
63
+ try {
64
+ const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
65
+ const orderQuery = (0, utils_1.remoteQueryObjectFromString)({
66
+ entryPoint: "order",
67
+ fields: [
68
+ "id",
69
+ "shipping_methods.id",
70
+ "shipping_methods.name",
71
+ "shipping_methods.shipping_option_id",
72
+ ],
73
+ filters: {
74
+ id: [orderId],
75
+ },
76
+ });
77
+ const orders = await remoteQuery(orderQuery);
78
+ const orderArray = Array.isArray(orders) ? orders : orders ? [orders] : [];
79
+ const order = orderArray[0];
80
+ if (order?.shipping_methods && order.shipping_methods.length > 0) {
81
+ console.log(`[Create Medusa Exchange] Order ${orderId} shipping methods before exchange creation:`);
82
+ for (const method of order.shipping_methods) {
83
+ const hasName = Boolean(method.name && method.name.trim() !== "");
84
+ const hasShippingOptionId = Boolean(method.shipping_option_id && method.shipping_option_id.trim() !== "");
85
+ console.log(` - Shipping method ${method.id}: ` +
86
+ `name=${hasName ? `"${method.name}"` : "MISSING"}, ` +
87
+ `shipping_option_id=${hasShippingOptionId ? method.shipping_option_id : "MISSING"}`);
88
+ }
89
+ // Check if all shipping methods have shipping_option_id
90
+ const methodsWithoutShippingOptionId = order.shipping_methods.filter((method) => !method.shipping_option_id || method.shipping_option_id.trim() === "");
91
+ if (methodsWithoutShippingOptionId.length === 0) {
92
+ console.log(`[Create Medusa Exchange] All shipping methods for order ${orderId} have shipping_option_id. ` +
93
+ `However, Medusa's createExchange may still fail to copy shipping_option_id when creating exchange shipping methods. ` +
94
+ `This is a known Medusa bug.`);
95
+ }
96
+ else {
97
+ console.warn(`[Create Medusa Exchange] Order ${orderId} has ${methodsWithoutShippingOptionId.length} shipping method(s) without shipping_option_id. ` +
98
+ `Exchange creation will likely fail.`);
99
+ }
100
+ }
101
+ else {
102
+ console.log(`[Create Medusa Exchange] Order ${orderId} has no shipping methods. Exchange creation should proceed without shipping method issues.`);
103
+ }
104
+ }
105
+ catch (queryError) {
106
+ // Log but don't fail - we'll catch the actual error during exchange creation
107
+ const errorMessage = queryError instanceof Error ? queryError.message : String(queryError);
108
+ console.warn(`[Create Medusa Exchange] Error querying order shipping methods before exchange creation: ${errorMessage}. Will attempt exchange creation anyway.`);
109
+ }
41
110
  // Try to resolve Medusa's exchange workflow first (preferred method)
42
111
  // This ensures exchange follows Medusa's native workflow with automatic fulfillment creation
43
- let exchangeId;
112
+ let exchangeId = "";
44
113
  let creationMethod = "service";
45
114
  try {
46
115
  // Try to resolve exchange workflow from container
@@ -78,6 +147,7 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
78
147
  const { result } = await workflowInstance.run({
79
148
  input: {
80
149
  return_id,
150
+ order_id: orderId,
81
151
  items: newItems,
82
152
  },
83
153
  });
@@ -101,46 +171,220 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
101
171
  const errorMessage = workflowError instanceof Error ? workflowError.message : String(workflowError);
102
172
  console.log(`[Create Medusa Exchange] Workflow resolution/execution failed, falling back to service call: ${errorMessage}`);
103
173
  // Fallback to direct service call if workflow not available
174
+ // WORKAROUND: Try exchangeService first, which might allow passing shipping methods data
175
+ // This is a workaround for Medusa v2 bug where createExchange doesn't copy shipping_option_id
104
176
  try {
105
- const orderService = container.resolve("order");
106
- if (!orderService) {
107
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order service is not available");
108
- }
109
- if (orderService.createExchange) {
110
- const exchange = await orderService.createExchange({
111
- return_id,
112
- items: newItems,
177
+ // First, try to get order's shipping methods with shipping_option_id for potential patching
178
+ let orderShippingMethods = [];
179
+ try {
180
+ const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
181
+ const orderQuery = (0, utils_1.remoteQueryObjectFromString)({
182
+ entryPoint: "order",
183
+ fields: [
184
+ "id",
185
+ "shipping_methods.id",
186
+ "shipping_methods.name",
187
+ "shipping_methods.shipping_option_id",
188
+ ],
189
+ filters: {
190
+ id: [orderId],
191
+ },
113
192
  });
114
- exchangeId = exchange.id;
115
- creationMethod = "service";
193
+ const orders = await remoteQuery(orderQuery);
194
+ const orderArray = Array.isArray(orders) ? orders : orders ? [orders] : [];
195
+ const order = orderArray[0];
196
+ if (order?.shipping_methods) {
197
+ orderShippingMethods = order.shipping_methods;
198
+ console.log(`[Create Medusa Exchange] Retrieved ${orderShippingMethods.length} shipping method(s) from order ${orderId} for potential patching`);
199
+ }
116
200
  }
117
- else {
118
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNKNOWN_MODULES, `Exchange creation is not available. Workflow error: ${errorMessage}. Order service createExchange method also not found.`);
201
+ catch (queryError) {
202
+ console.warn(`[Create Medusa Exchange] Failed to query order shipping methods for patching: ${queryError instanceof Error ? queryError.message : String(queryError)}`);
203
+ }
204
+ // Try exchangeService first (might allow passing shipping methods)
205
+ let exchangeCreated = false;
206
+ try {
207
+ const exchangeService = container.resolve("exchange");
208
+ if (exchangeService?.createExchange) {
209
+ // Try to pass shipping methods with shipping_option_id if available
210
+ const exchangeData = {
211
+ return_id,
212
+ order_id: orderId,
213
+ items: newItems,
214
+ };
215
+ // Patch shipping methods with shipping_option_id if we have them
216
+ if (orderShippingMethods.length > 0) {
217
+ exchangeData.shipping_methods = orderShippingMethods.map((sm) => ({
218
+ shipping_option_id: sm.shipping_option_id,
219
+ name: sm.name,
220
+ }));
221
+ console.log(`[Create Medusa Exchange] Attempting to patch exchange creation with shipping methods containing shipping_option_id`);
222
+ }
223
+ const exchange = await exchangeService.createExchange(exchangeData);
224
+ exchangeId = exchange.id;
225
+ creationMethod = "service";
226
+ exchangeCreated = true;
227
+ console.log(`[Create Medusa Exchange] Successfully created exchange ${exchangeId} using exchangeService`);
228
+ }
229
+ }
230
+ catch (exchangeServiceError) {
231
+ // Exchange service not available or failed, fall through to orderService
232
+ const errorMsg = exchangeServiceError instanceof Error ? exchangeServiceError.message : String(exchangeServiceError);
233
+ console.log(`[Create Medusa Exchange] Exchange service not available or failed: ${errorMsg}. Falling back to orderService.`);
234
+ }
235
+ // If exchangeService didn't work, try orderService
236
+ if (!exchangeCreated) {
237
+ const orderService = container.resolve("order");
238
+ if (!orderService) {
239
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order service is not available");
240
+ }
241
+ if (orderService.createExchange) {
242
+ const exchange = await orderService.createExchange({
243
+ return_id,
244
+ order_id: orderId,
245
+ items: newItems,
246
+ });
247
+ exchangeId = exchange.id;
248
+ creationMethod = "service";
249
+ }
250
+ else {
251
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNKNOWN_MODULES, `Exchange creation is not available. Workflow error: ${errorMessage}. Order service createExchange method also not found.`);
252
+ }
119
253
  }
120
254
  }
121
255
  catch (serviceError) {
122
- // If service call also fails, throw with both errors
256
+ // If service call also fails, check if it's a shipping method name error
123
257
  const serviceErrorMessage = serviceError instanceof Error ? serviceError.message : String(serviceError);
258
+ // Check if error is related to missing shipping method name
259
+ // This error occurs when Medusa's createExchange creates shipping methods with shipping_option_id: null
260
+ // Even though the order's shipping methods have shipping_option_id, Medusa isn't copying it properly
261
+ if (serviceErrorMessage.includes("OrderShippingMethod.name is required") ||
262
+ serviceErrorMessage.includes("name is required") ||
263
+ serviceErrorMessage.includes("'undefined' found") ||
264
+ serviceErrorMessage.includes("shipping_option_id: null")) {
265
+ // Provide a more helpful error message explaining this is a Medusa bug
266
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Failed to create exchange: Medusa's createExchange is creating shipping methods with shipping_option_id: null, ` +
267
+ `which causes the name to be undefined. This is a known Medusa bug where createExchange doesn't properly copy ` +
268
+ `shipping_option_id from the order's shipping methods when creating exchange shipping methods. ` +
269
+ `The order's shipping methods have shipping_option_id, but Medusa isn't copying it. ` +
270
+ `Order ID: ${orderId}. ` +
271
+ `Original error: ${serviceErrorMessage}`);
272
+ }
273
+ // For other errors, throw with both workflow and service errors
124
274
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNKNOWN_MODULES, `Failed to create exchange via workflow and service: Workflow error: ${errorMessage}, Service error: ${serviceErrorMessage}`);
125
275
  }
126
276
  }
277
+ // Ensure exchangeId was set (should always be set if we reach here, but TypeScript needs this check)
278
+ if (!exchangeId || exchangeId.trim() === "") {
279
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNKNOWN_MODULES, `Failed to create exchange: Exchange ID was not set after creation attempt. This should not happen.`);
280
+ }
281
+ // CRITICAL: If shipping_option_id is provided (selected by admin), manually add shipping method
282
+ // This works around Medusa's bug where createExchange doesn't copy shipping_option_id properly
283
+ if (shipping_option_id) {
284
+ try {
285
+ const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
286
+ // Fetch shipping option details to get the name
287
+ const shippingOptionQuery = (0, utils_1.remoteQueryObjectFromString)({
288
+ entryPoint: "shipping_option",
289
+ fields: [
290
+ "id",
291
+ "name",
292
+ ],
293
+ filters: {
294
+ id: [shipping_option_id],
295
+ },
296
+ });
297
+ const shippingOptions = await remoteQuery(shippingOptionQuery);
298
+ const optionsArray = Array.isArray(shippingOptions)
299
+ ? shippingOptions
300
+ : shippingOptions
301
+ ? [shippingOptions]
302
+ : [];
303
+ const shippingOption = optionsArray[0];
304
+ if (!shippingOption) {
305
+ console.warn(`[Create Medusa Exchange] Shipping option ${shipping_option_id} not found. Skipping manual shipping method addition.`);
306
+ }
307
+ else {
308
+ // Try to add shipping method using exchangeService
309
+ const exchangeService = container.resolve("exchange");
310
+ if (exchangeService?.addShippingMethod) {
311
+ try {
312
+ // Attempt to add shipping method with shipping_option_id
313
+ // This should properly set the shipping_option_id and name
314
+ await exchangeService.addShippingMethod({
315
+ exchange_id: exchangeId,
316
+ shipping_option_id: shipping_option_id,
317
+ name: shippingOption.name || "Shipping",
318
+ data: {},
319
+ });
320
+ console.log(`[Create Medusa Exchange] Successfully added shipping method with shipping_option_id "${shipping_option_id}" (name: "${shippingOption.name || "Shipping"}") to exchange ${exchangeId}`);
321
+ }
322
+ catch (addError) {
323
+ // Log but don't fail - exchange was created successfully
324
+ const errorMessage = addError instanceof Error ? addError.message : String(addError);
325
+ console.warn(`[Create Medusa Exchange] Failed to add shipping method with shipping_option_id ${shipping_option_id} to exchange ${exchangeId}: ${errorMessage}. ` +
326
+ `Exchange was created but shipping method may need to be added manually via admin UI.`);
327
+ }
328
+ }
329
+ else {
330
+ console.warn(`[Create Medusa Exchange] Exchange service addShippingMethod method not available. ` +
331
+ `Shipping method with shipping_option_id ${shipping_option_id} should be added manually via admin UI.`);
332
+ }
333
+ }
334
+ }
335
+ catch (error) {
336
+ // Log but don't fail - exchange was created successfully
337
+ const errorMessage = error instanceof Error ? error.message : String(error);
338
+ console.warn(`[Create Medusa Exchange] Error adding shipping method with shipping_option_id ${shipping_option_id}: ${errorMessage}. ` +
339
+ `Exchange was created but shipping method may need to be added manually via admin UI.`);
340
+ }
341
+ }
342
+ // Use swap's outbound_shipping_method_id as fallback if not provided in input
343
+ const finalOutboundShippingMethodId = outbound_shipping_method_id ||
344
+ (swapData.outbound_shipping_method_id);
127
345
  // Add outbound shipping method if provided
128
346
  // Note: This may need to be done via Medusa's exchange API after creation
129
347
  // depending on Medusa v2 API structure
130
- if (outbound_shipping_method_id) {
348
+ if (finalOutboundShippingMethodId) {
131
349
  try {
132
- const exchangeService = container.resolve("exchange");
133
- if (exchangeService?.addShippingMethod) {
134
- await exchangeService.addShippingMethod({
135
- exchange_id: exchangeId,
136
- shipping_method_id: outbound_shipping_method_id,
137
- });
350
+ // Fetch shipping method details (including name) from the order
351
+ // The name field is required for OrderShippingMethod entity
352
+ const shippingMethodData = await (0, order_exchange_data_1.getShippingMethodFromOrder)(orderId, finalOutboundShippingMethodId, container);
353
+ if (!shippingMethodData) {
354
+ console.warn(`[Create Medusa Exchange] Shipping method ${finalOutboundShippingMethodId} not found in order ${orderId}. Skipping shipping method addition.`);
355
+ }
356
+ else if (!shippingMethodData.name) {
357
+ console.warn(`[Create Medusa Exchange] Shipping method ${finalOutboundShippingMethodId} has no name field. Skipping shipping method addition to avoid validation error.`);
358
+ }
359
+ else {
360
+ // Shipping method found with name - proceed with addition
361
+ const exchangeService = container.resolve("exchange");
362
+ if (exchangeService?.addShippingMethod) {
363
+ try {
364
+ await exchangeService.addShippingMethod({
365
+ exchange_id: exchangeId,
366
+ shipping_method_id: finalOutboundShippingMethodId,
367
+ name: shippingMethodData.name,
368
+ });
369
+ console.log(`[Create Medusa Exchange] Successfully added shipping method "${shippingMethodData.name}" (${finalOutboundShippingMethodId}) to exchange ${exchangeId}`);
370
+ }
371
+ catch (addError) {
372
+ // Log but don't fail if shipping method addition fails
373
+ // Shipping method can be added manually via admin UI if needed
374
+ const errorMessage = addError instanceof Error ? addError.message : String(addError);
375
+ console.warn(`[Create Medusa Exchange] Failed to add outbound shipping method ${finalOutboundShippingMethodId} to exchange ${exchangeId}: ${errorMessage}`);
376
+ }
377
+ }
378
+ else {
379
+ console.warn("[Create Medusa Exchange] Exchange service addShippingMethod method not available. Shipping method can be added manually via admin UI.");
380
+ }
138
381
  }
139
382
  }
140
383
  catch (error) {
141
- // Log but don't fail if shipping method addition fails
384
+ // Log but don't fail if shipping method lookup or addition fails
142
385
  // Shipping method can be added manually via admin UI if needed
143
- console.warn("[Create Medusa Exchange] Failed to add outbound shipping method:", error);
386
+ const errorMessage = error instanceof Error ? error.message : String(error);
387
+ console.warn(`[Create Medusa Exchange] Error processing shipping method ${finalOutboundShippingMethodId}: ${errorMessage}. Shipping method can be added manually via admin UI.`);
144
388
  }
145
389
  }
146
390
  // Send notification if requested
@@ -193,7 +437,7 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
193
437
  selector: { id: swap_id },
194
438
  data: {
195
439
  exchange_id: exchangeId,
196
- outbound_shipping_method_id: outbound_shipping_method_id || null,
440
+ outbound_shipping_method_id: finalOutboundShippingMethodId || null,
197
441
  send_notification: send_notification || false,
198
442
  metadata: {
199
443
  ...swapMetadata,
@@ -202,7 +446,7 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
202
446
  exchange_id: exchangeId,
203
447
  exchange_created_at: new Date().toISOString(),
204
448
  exchange_creation_method: creationMethod,
205
- outbound_shipping_method_id,
449
+ outbound_shipping_method_id: finalOutboundShippingMethodId,
206
450
  notification_sent: send_notification || false,
207
451
  },
208
452
  },
@@ -214,4 +458,4 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
214
458
  swap: finalSwap || swap,
215
459
  });
216
460
  });
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1lZHVzYS1leGNoYW5nZS1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9zd2FwL2NyZWF0ZS1tZWR1c2EtZXhjaGFuZ2Utc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBK0c7QUFDL0cscUVBQTRFO0FBRTVFLGdEQUFtRDtBQWlCdEMsUUFBQSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2hELHdCQUF3QixFQUN4QixLQUFLLEVBQ0gsS0FBb0MsRUFDcEMsRUFBRSxTQUFTLEVBQUUsRUFDMEMsRUFBRTtJQUN6RCxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRTlHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFCQUFxQixDQUN0QixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDBDQUEwQyxDQUMzQyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQWMsa0JBQVcsQ0FBQyxDQUFBO0lBQy9ELE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNwRCxNQUFNLFFBQVEsR0FBRyxJQUlOLENBQUE7SUFFWCxJQUFLLFFBQXFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkQsMkJBQTJCO1FBQzNCLE9BQU8sSUFBSSw0QkFBWSxDQUFpQztZQUN0RCxXQUFXLEVBQUcsUUFBcUMs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
461
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1lZHVzYS1leGNoYW5nZS1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9zd2FwL2NyZWF0ZS1tZWR1c2EtZXhjaGFuZ2Utc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBK0c7QUFDL0cscUVBQTRFO0FBRTVFLGdEQUFtRDtBQUduRCw4RUFBc0g7QUFnQnpHLFFBQUEsd0JBQXdCLEdBQUcsSUFBQSwwQkFBVSxFQUNoRCx3QkFBd0IsRUFDeEIsS0FBSyxFQUNILEtBQW9DLEVBQ3BDLEVBQUUsU0FBUyxFQUFFLEVBQzBDLEVBQUU7SUFDekQsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsMkJBQTJCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUVsSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQkFBcUIsQ0FDdEIsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwwQ0FBMEMsQ0FDM0MsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFjLGtCQUFXLENBQUMsQ0FBQTtJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFLTixDQUFBO0lBRVgsSUFBSyxRQUFxQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELDJCQUEyQjtRQUMzQixPQUFPLElBQUksNEJBQVksQ0FB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