order-management 0.0.24 → 0.0.26

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.
@@ -13,16 +13,83 @@ exports.createMedusaReturnStep = (0, workflows_sdk_1.createStep)("create-medusa-
13
13
  const swapService = container.resolve(swap_1.SWAP_MODULE);
14
14
  const swap = await swapService.retrieveSwap(swap_id);
15
15
  const swapData = swap;
16
+ // Log swap data for debugging
17
+ console.log("[Create Medusa Return] Swap data retrieved:", {
18
+ swap_id,
19
+ order_id: swapData.order_id,
20
+ return_items_raw: swapData.return_items,
21
+ return_items_type: typeof swapData.return_items,
22
+ return_items_is_array: Array.isArray(swapData.return_items),
23
+ status: swapData.status,
24
+ });
16
25
  if (!swapData.order_id) {
17
26
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Swap must have an order_id");
18
27
  }
19
28
  if (swapData.return_id) {
20
29
  // Return already created
30
+ console.log("[Create Medusa Return] Return already exists for this swap:", {
31
+ swap_id,
32
+ return_id: swapData.return_id,
33
+ });
21
34
  return new workflows_sdk_1.StepResponse({
22
35
  return_id: swapData.return_id,
23
36
  swap,
24
37
  });
25
38
  }
39
+ // Check for existing returns/exchanges for this order that might conflict
40
+ try {
41
+ const remoteQuery = container.resolve(utils_2.ContainerRegistrationKeys.REMOTE_QUERY);
42
+ // Query for existing returns on this order
43
+ const existingReturnsQuery = (0, utils_2.remoteQueryObjectFromString)({
44
+ entryPoint: "return",
45
+ fields: ["id", "order_id", "items.*"],
46
+ filters: {
47
+ order_id: [swapData.order_id],
48
+ },
49
+ });
50
+ const existingReturns = await remoteQuery(existingReturnsQuery);
51
+ const returnsArray = Array.isArray(existingReturns) ? existingReturns : existingReturns ? [existingReturns] : [];
52
+ if (returnsArray.length > 0) {
53
+ console.warn("[Create Medusa Return] Found existing returns for this order:", {
54
+ order_id: swapData.order_id,
55
+ existing_returns_count: returnsArray.length,
56
+ existing_returns: returnsArray.map((ret) => {
57
+ const retData = ret;
58
+ return {
59
+ id: retData.id,
60
+ item_ids: retData.items?.map((item) => item.id) || [],
61
+ };
62
+ }),
63
+ });
64
+ }
65
+ // Query for existing exchanges on this order
66
+ const existingExchangesQuery = (0, utils_2.remoteQueryObjectFromString)({
67
+ entryPoint: "exchange",
68
+ fields: ["id", "order_id", "return_id"],
69
+ filters: {
70
+ order_id: [swapData.order_id],
71
+ },
72
+ });
73
+ const existingExchanges = await remoteQuery(existingExchangesQuery);
74
+ const exchangesArray = Array.isArray(existingExchanges) ? existingExchanges : existingExchanges ? [existingExchanges] : [];
75
+ if (exchangesArray.length > 0) {
76
+ console.warn("[Create Medusa Return] Found existing exchanges for this order:", {
77
+ order_id: swapData.order_id,
78
+ existing_exchanges_count: exchangesArray.length,
79
+ existing_exchanges: exchangesArray.map((ex) => {
80
+ const exData = ex;
81
+ return {
82
+ id: exData.id,
83
+ return_id: exData.return_id,
84
+ };
85
+ }),
86
+ });
87
+ }
88
+ }
89
+ catch (queryError) {
90
+ // Log but don't fail - this is just for debugging
91
+ console.warn("[Create Medusa Return] Failed to query existing returns/exchanges:", queryError);
92
+ }
26
93
  // Allow creating return if status is "approved" OR "requested" with pending_exchange_creation flag
27
94
  const swapMetadata = swapData.metadata || {};
28
95
  const pendingExchangeCreation = swapMetadata.pending_exchange_creation === true;
@@ -31,41 +98,93 @@ exports.createMedusaReturnStep = (0, workflows_sdk_1.createStep)("create-medusa-
31
98
  }
32
99
  // Use return_items from input if provided, otherwise parse from swap model
33
100
  let returnItems = [];
101
+ console.log("[Create Medusa Return] Processing return items:", {
102
+ has_input_return_items: !!inputReturnItems,
103
+ input_return_items_count: inputReturnItems?.length || 0,
104
+ swap_return_items: swapData.return_items,
105
+ });
34
106
  if (inputReturnItems && inputReturnItems.length > 0) {
35
107
  // Use items from input (from exchange form)
36
- returnItems = inputReturnItems.map((item) => ({
37
- id: item.item_id,
108
+ console.log("[Create Medusa Return] Using input return items:", inputReturnItems);
109
+ returnItems = inputReturnItems
110
+ .filter((item) => {
111
+ const itemId = item.id;
112
+ return itemId && typeof itemId === "string" && itemId.trim() !== "";
113
+ })
114
+ .map((item) => ({
115
+ id: item.id,
38
116
  quantity: item.quantity,
39
117
  reason: item.reason_id,
118
+ variant_id: item.variant_id, // Preserve variant_id if provided
40
119
  }));
120
+ console.log("[Create Medusa Return] Parsed input return items:", returnItems);
41
121
  }
42
122
  else {
43
123
  // Parse return_items from JSONB format in swap model
44
124
  if (swapData.return_items) {
45
125
  if (Array.isArray(swapData.return_items)) {
46
- returnItems = swapData.return_items.map((item) => ({
47
- id: String(item.id || item.item_id || ""),
48
- quantity: Number(item.quantity || 0),
49
- reason: item.reason,
50
- }));
126
+ returnItems = swapData.return_items
127
+ .filter((item) => {
128
+ const itemData = item;
129
+ const itemId = itemData.id || itemData.item_id;
130
+ return !!itemId && typeof itemId === "string" && itemId.trim() !== "" && (itemData.quantity || 0) > 0;
131
+ })
132
+ .map((item) => {
133
+ const itemData = item;
134
+ const itemId = itemData.id || itemData.item_id;
135
+ // Double-check itemId is valid - this should never happen due to filter, but be defensive
136
+ if (!itemId || typeof itemId !== "string" || itemId.trim() === "") {
137
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Invalid return item: item_id is required but got '${itemId}'`);
138
+ }
139
+ return {
140
+ id: itemId,
141
+ quantity: Number(itemData.quantity || 0),
142
+ reason: itemData.reason_id || itemData.reason, // Handle both reason_id and reason
143
+ variant_id: itemData.variant_id, // Preserve variant_id for safe ID mapping
144
+ };
145
+ });
51
146
  }
52
147
  else if (typeof swapData.return_items === "string") {
53
148
  try {
54
149
  const parsed = JSON.parse(swapData.return_items);
55
150
  if (Array.isArray(parsed)) {
56
- returnItems = parsed.map((item) => ({
57
- id: String(item.id || item.item_id || ""),
58
- quantity: Number(item.quantity || 0),
59
- reason: item.reason,
60
- }));
151
+ returnItems = parsed
152
+ .filter((item) => {
153
+ const itemData = item;
154
+ const itemId = itemData.id || itemData.item_id;
155
+ return !!itemId && typeof itemId === "string" && itemId.trim() !== "" && (itemData.quantity || 0) > 0;
156
+ })
157
+ .map((item) => {
158
+ const itemData = item;
159
+ const itemId = itemData.id || itemData.item_id;
160
+ // Double-check itemId is valid - this should never happen due to filter, but be defensive
161
+ if (!itemId || typeof itemId !== "string" || itemId.trim() === "") {
162
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Invalid return item: item_id is required but got '${itemId}'`);
163
+ }
164
+ return {
165
+ id: itemId,
166
+ quantity: Number(itemData.quantity || 0),
167
+ reason: itemData.reason_id || itemData.reason, // Handle both reason_id and reason
168
+ variant_id: itemData.variant_id, // Preserve variant_id for safe ID mapping
169
+ };
170
+ });
61
171
  }
62
172
  }
63
- catch {
64
- // Invalid JSON, will throw error below
173
+ catch (parseError) {
174
+ // If it's a MedusaError, re-throw it
175
+ if (parseError instanceof utils_1.MedusaError) {
176
+ throw parseError;
177
+ }
178
+ // Otherwise, invalid JSON - will throw error below
65
179
  }
66
180
  }
67
181
  }
68
182
  }
183
+ // Validate that all return items have valid item_id
184
+ const invalidItems = returnItems.filter((item) => !item.id || item.id.trim() === "");
185
+ if (invalidItems.length > 0) {
186
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Invalid return items found: ${invalidItems.length} item(s) missing valid item_id`);
187
+ }
69
188
  if (returnItems.length === 0) {
70
189
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Swap must have return items");
71
190
  }
@@ -77,19 +196,507 @@ exports.createMedusaReturnStep = (0, workflows_sdk_1.createStep)("create-medusa-
77
196
  // Create return using Medusa's Order Module
78
197
  let returnId;
79
198
  if (orderService.createReturn) {
80
- // Map SwapItem format (id) to Medusa return format (item_id)
81
- const returnItemsForMedusa = returnItems.map((item) => ({
82
- item_id: item.id,
83
- quantity: item.quantity,
84
- reason_id: item.reason, // Assuming reason is the reason_id
85
- }));
199
+ // Map SwapItem format (id) to Medusa return format (id)
200
+ // Filter out any items with invalid id before mapping
201
+ const returnItemsForMedusa = returnItems
202
+ .filter((item) => {
203
+ const isValid = !!item.id && typeof item.id === "string" && item.id.trim() !== "" && item.quantity > 0;
204
+ if (!isValid) {
205
+ console.warn("[Create Medusa Return] Filtering out invalid return item:", {
206
+ id: item.id,
207
+ quantity: item.quantity,
208
+ reason: item.reason,
209
+ });
210
+ }
211
+ return isValid;
212
+ })
213
+ .map((item) => {
214
+ // Double-check id is valid before mapping
215
+ if (!item.id || item.id.trim() === "") {
216
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Invalid return item: id is required but got '${item.id}'`);
217
+ }
218
+ return {
219
+ id: item.id,
220
+ quantity: item.quantity,
221
+ reason_id: item.reason, // Assuming reason is the reason_id
222
+ variant_id: item.variant_id, // Preserve variant_id for final validation mapping
223
+ };
224
+ });
225
+ if (returnItemsForMedusa.length === 0) {
226
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "No valid return items found. All items must have a valid id.");
227
+ }
228
+ // Validate that all ids exist in the order
229
+ try {
230
+ const remoteQuery = container.resolve(utils_2.ContainerRegistrationKeys.REMOTE_QUERY);
231
+ const orderQuery = (0, utils_2.remoteQueryObjectFromString)({
232
+ entryPoint: "order",
233
+ fields: ["id", "items.*", "items.variant_id"], // Use items.* to get all item fields including variant_id
234
+ filters: {
235
+ id: [swapData.order_id],
236
+ },
237
+ });
238
+ const orders = await remoteQuery(orderQuery);
239
+ const orderArray = Array.isArray(orders) ? orders : orders ? [orders] : [];
240
+ // Find the correct order (in case multiple orders are returned)
241
+ let order = orderArray.find((o) => {
242
+ const orderData = o;
243
+ return orderData.id === swapData.order_id;
244
+ });
245
+ // Fallback to first order if not found (for backwards compatibility)
246
+ if (!order && orderArray.length > 0) {
247
+ order = orderArray[0];
248
+ console.warn("[Create Medusa Return] Order ID mismatch - using first order from results:", {
249
+ requested_order_id: swapData.order_id,
250
+ first_order_id: orderArray[0].id,
251
+ });
252
+ }
253
+ if (!order) {
254
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Order ${swapData.order_id} not found`);
255
+ }
256
+ // Verify we got the correct order
257
+ const orderId = order.id;
258
+ if (orderId !== swapData.order_id) {
259
+ console.error("[Create Medusa Return] CRITICAL: Order ID mismatch:", {
260
+ requested_order_id: swapData.order_id,
261
+ actual_order_id: orderId,
262
+ swap_id: swap_id,
263
+ });
264
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Order ID mismatch: requested ${swapData.order_id} but got ${orderId}`);
265
+ }
266
+ if (!order.items || order.items.length === 0) {
267
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Order ${swapData.order_id} has no items`);
268
+ }
269
+ // Log order items for debugging
270
+ console.log("[Create Medusa Return] Order items retrieved:", {
271
+ order_id: swapData.order_id,
272
+ items_count: order.items.length,
273
+ item_ids: order.items.map((item) => item.id),
274
+ items: order.items.map((item) => ({
275
+ id: item.id,
276
+ variant_id: item.variant_id,
277
+ quantity: item.quantity,
278
+ })),
279
+ });
280
+ // Log return items we're trying to match
281
+ console.log("[Create Medusa Return] Return items to match:", {
282
+ return_items_count: returnItems.length,
283
+ return_items: returnItems.map((item) => ({
284
+ id: item.id,
285
+ quantity: item.quantity,
286
+ reason: item.reason,
287
+ })),
288
+ });
289
+ const orderItemIds = new Set(order.items.map((item) => item.id));
290
+ const orderItemsMap = new Map(order.items.map((item) => [item.id, item]));
291
+ // Create a map of variant_id to order item for fallback matching
292
+ const variantToItemMap = new Map();
293
+ order.items.forEach((item) => {
294
+ const itemData = item;
295
+ if (itemData.variant_id) {
296
+ // If multiple items have same variant_id, keep the first one
297
+ if (!variantToItemMap.has(itemData.variant_id)) {
298
+ variantToItemMap.set(itemData.variant_id, itemData);
299
+ }
300
+ }
301
+ });
302
+ // Check for invalid ids and try to map them to current item ids
303
+ const itemsToUpdate = [];
304
+ const invalidItemIds = [];
305
+ returnItemsForMedusa.forEach((returnItem, index) => {
306
+ const itemId = returnItem.id;
307
+ // Log what we're checking
308
+ console.log("[Create Medusa Return] Checking return item ID:", {
309
+ index,
310
+ item_id: itemId,
311
+ exists_in_order: orderItemIds.has(itemId),
312
+ order_item_ids: Array.from(orderItemIds),
313
+ return_item: returnItem,
314
+ });
315
+ // If id exists in order, it's valid - don't map it
316
+ if (orderItemIds.has(itemId)) {
317
+ console.log("[Create Medusa Return] Item ID exists in order, no mapping needed:", itemId);
318
+ return;
319
+ }
320
+ console.warn("[Create Medusa Return] Item ID NOT found in order, attempting to map:", {
321
+ item_id: itemId,
322
+ order_item_ids: Array.from(orderItemIds),
323
+ });
324
+ // Try to find matching item by variant_id from swap data
325
+ // The variant_id should be stored in return_items during swap creation (from validate-swap-items-step)
326
+ const swapReturnItem = returnItems.find((ri) => ri.id === itemId);
327
+ let variantId;
328
+ // Get variant_id from stored return_items (enriched during swap creation)
329
+ if (swapReturnItem) {
330
+ variantId = swapReturnItem.variant_id;
331
+ console.log("[Create Medusa Return] Found variant_id from stored return_items:", {
332
+ item_id: itemId,
333
+ variant_id: variantId,
334
+ has_variant_id: !!variantId,
335
+ });
336
+ }
337
+ // Fallback: If variant_id not stored, try to get it from current order item
338
+ // This handles legacy swaps created before variant_id was stored
339
+ if (!variantId) {
340
+ const orderItemWithId = order.items?.find((item) => item.id === itemId);
341
+ if (orderItemWithId) {
342
+ variantId = orderItemWithId.variant_id;
343
+ console.log("[Create Medusa Return] Fallback: Found variant_id from current order item:", {
344
+ item_id: itemId,
345
+ variant_id: variantId,
346
+ note: "This is a legacy swap without stored variant_id",
347
+ });
348
+ }
349
+ }
350
+ // If we have variant_id, try to match by variant_id (safe mapping)
351
+ if (variantId && variantToItemMap.has(variantId)) {
352
+ const matchingItem = variantToItemMap.get(variantId);
353
+ itemsToUpdate.push({
354
+ index,
355
+ oldItemId: itemId,
356
+ newItemId: matchingItem.id,
357
+ });
358
+ console.log("[Create Medusa Return] Successfully mapping stale id to current by variant_id:", {
359
+ old_id: itemId,
360
+ new_id: matchingItem.id,
361
+ variant_id: variantId,
362
+ note: "Safe mapping using stored variant_id from swap creation",
363
+ });
364
+ }
365
+ else if (variantId) {
366
+ // We have variant_id but it doesn't exist in current order items
367
+ // This means the variant was removed from the order
368
+ console.error("[Create Medusa Return] Cannot map - variant_id not found in current order:", {
369
+ item_id: itemId,
370
+ variant_id: variantId,
371
+ order_variant_ids: Array.from(variantToItemMap.keys()),
372
+ note: "The variant may have been removed from the order",
373
+ });
374
+ invalidItemIds.push(itemId);
375
+ }
376
+ else {
377
+ // CRITICAL: Don't guess! Only map if we can match by variant_id
378
+ // Quantity-based and single-item matching is too risky and can map to wrong items
379
+ // If the ID doesn't exist and we don't have variant_id, we can't safely map it
380
+ console.error("[Create Medusa Return] Cannot map stale ID - variant_id not available:", {
381
+ item_id: itemId,
382
+ return_item: returnItem,
383
+ swap_return_item: swapReturnItem,
384
+ order_item_ids: Array.from(orderItemIds),
385
+ note: "ID mapping requires variant_id to ensure correct matching. This swap was likely created before variant_id storage was implemented.",
386
+ });
387
+ invalidItemIds.push(itemId);
388
+ }
389
+ });
390
+ // Update returnItemsForMedusa with correct ids
391
+ if (itemsToUpdate.length > 0) {
392
+ console.log("[Create Medusa Return] Updating stale ids:", {
393
+ updates: itemsToUpdate,
394
+ returnItemsForMedusa_before: returnItemsForMedusa.map((item) => ({
395
+ id: item.id,
396
+ quantity: item.quantity,
397
+ })),
398
+ });
399
+ itemsToUpdate.forEach(({ index, newItemId }) => {
400
+ const oldItemId = returnItemsForMedusa[index].id;
401
+ returnItemsForMedusa[index].id = newItemId;
402
+ console.log("[Create Medusa Return] Updated item at index:", {
403
+ index,
404
+ old_id: oldItemId,
405
+ new_id: newItemId,
406
+ item_after_update: returnItemsForMedusa[index],
407
+ });
408
+ });
409
+ console.log("[Create Medusa Return] returnItemsForMedusa after update:", {
410
+ returnItemsForMedusa: returnItemsForMedusa.map((item) => ({
411
+ id: item.id,
412
+ quantity: item.quantity,
413
+ })),
414
+ });
415
+ }
416
+ // If there are still invalid ids after mapping, throw error
417
+ if (invalidItemIds.length > 0) {
418
+ console.error("[Create Medusa Return] Invalid ids detected (could not map):", {
419
+ invalidItemIds,
420
+ orderItemIds: Array.from(orderItemIds),
421
+ returnItemsForMedusa,
422
+ original_return_items: returnItems,
423
+ orderItems: order.items.map((item) => ({
424
+ id: item.id,
425
+ variant_id: item.variant_id,
426
+ quantity: item.quantity,
427
+ })),
428
+ swap_id: swap_id,
429
+ order_id: swapData.order_id,
430
+ });
431
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Item ID${invalidItemIds.length > 1 ? "s" : ""} "${invalidItemIds.join('", "')}" not found in order ${swapData.order_id} and could not be safely mapped. ` +
432
+ `The order may have been modified since the swap was created. ` +
433
+ `Available order item IDs: ${Array.from(orderItemIds).join(", ")}. ` +
434
+ `To fix this, the swap's return_items should include variant_id for each item to enable safe ID mapping.`);
435
+ }
436
+ }
437
+ catch (validationError) {
438
+ // If it's a MedusaError, re-throw it (don't catch and continue)
439
+ if (validationError instanceof utils_1.MedusaError) {
440
+ throw validationError;
441
+ }
442
+ // For other errors (like query failures), log and let Medusa handle validation
443
+ console.warn("[Create Medusa Return] Failed to validate ids against order:", validationError);
444
+ }
445
+ // Final safety check - ensure no items have undefined id
446
+ const itemsWithUndefinedId = returnItemsForMedusa.filter((item) => {
447
+ const hasUndefinedId = item.id === undefined || item.id === null || item.id === "";
448
+ if (hasUndefinedId) {
449
+ console.error("[Create Medusa Return] Item with undefined id detected:", {
450
+ item,
451
+ id: item.id,
452
+ id_type: typeof item.id,
453
+ });
454
+ }
455
+ return hasUndefinedId;
456
+ });
457
+ if (itemsWithUndefinedId.length > 0) {
458
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Cannot create return: ${itemsWithUndefinedId.length} item(s) have undefined or null id. Items: ${JSON.stringify(itemsWithUndefinedId)}`);
459
+ }
460
+ // Log what we're about to send to Medusa for debugging
461
+ console.log("[Create Medusa Return] Creating return with items:", {
462
+ order_id: swapData.order_id,
463
+ items_count: returnItemsForMedusa.length,
464
+ items: returnItemsForMedusa.map((item) => ({
465
+ id: item.id,
466
+ quantity: item.quantity,
467
+ reason_id: item.reason_id,
468
+ })),
469
+ });
86
470
  // Use swap's location_id as fallback if not provided in input
87
471
  const finalLocationId = return_location_id || swapData.return_location_id;
88
- const medusaReturn = await orderService.createReturn({
472
+ // Final validation before createReturn call - ensure all items have valid id and quantity
473
+ const invalidItemsBeforeCreate = returnItemsForMedusa.filter((item) => !item.id || item.id === undefined || item.id === null || item.id === "" || item.quantity <= 0);
474
+ if (invalidItemsBeforeCreate.length > 0) {
475
+ console.error("[Create Medusa Return] CRITICAL: Invalid items detected before createReturn:", {
476
+ invalidItems: invalidItemsBeforeCreate,
477
+ allItems: returnItemsForMedusa,
478
+ });
479
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Cannot create return: ${invalidItemsBeforeCreate.length} item(s) have invalid id or quantity`);
480
+ }
481
+ // Create plain objects with only required properties
482
+ // Use id instead of item_id as Medusa expects id to reference order line items
483
+ const itemsForCreateReturn = returnItemsForMedusa.map((item) => {
484
+ const returnItem = {
485
+ id: String(item.id).trim(),
486
+ quantity: Number(item.quantity),
487
+ };
488
+ if (item.reason_id && String(item.reason_id).trim() !== "") {
489
+ returnItem.reason_id = String(item.reason_id).trim();
490
+ }
491
+ return returnItem;
492
+ });
493
+ console.log("[Create Medusa Return] Final items structure for createReturn:", {
494
+ items: itemsForCreateReturn,
495
+ items_json: JSON.stringify(itemsForCreateReturn),
496
+ items_count: itemsForCreateReturn.length,
497
+ });
498
+ // Final validation: Re-query order to ensure IDs are still valid
499
+ // This catches any race conditions where order items changed between validation and createReturn
500
+ try {
501
+ const remoteQuery = container.resolve(utils_2.ContainerRegistrationKeys.REMOTE_QUERY);
502
+ const finalOrderQuery = (0, utils_2.remoteQueryObjectFromString)({
503
+ entryPoint: "order",
504
+ fields: ["id", "items.id", "items.variant_id", "items.quantity"],
505
+ filters: {
506
+ id: [swapData.order_id],
507
+ },
508
+ });
509
+ const finalOrders = await remoteQuery(finalOrderQuery);
510
+ const finalOrderArray = Array.isArray(finalOrders) ? finalOrders : finalOrders ? [finalOrders] : [];
511
+ const finalOrder = finalOrderArray[0];
512
+ if (finalOrder && finalOrder.items) {
513
+ const finalOrderItemIds = new Set(finalOrder.items.map((item) => item.id));
514
+ // Create variant_id map for final order items
515
+ const finalVariantToItemMap = new Map();
516
+ finalOrder.items.forEach((item) => {
517
+ const itemData = item;
518
+ if (itemData.variant_id) {
519
+ // If multiple items have same variant_id, keep the first one
520
+ if (!finalVariantToItemMap.has(itemData.variant_id)) {
521
+ finalVariantToItemMap.set(itemData.variant_id, itemData);
522
+ }
523
+ }
524
+ });
525
+ const invalidFinalIds = itemsForCreateReturn
526
+ .map((item) => item.id)
527
+ .filter((id) => !finalOrderItemIds.has(id));
528
+ // Enhanced logging for comparison
529
+ console.log("[Create Medusa Return] Final validation - Order vs Return Items:", {
530
+ order_id: swapData.order_id,
531
+ order_item_ids: Array.from(finalOrderItemIds),
532
+ order_items: finalOrder.items.map((item) => ({
533
+ id: item.id,
534
+ variant_id: item.variant_id,
535
+ quantity: item.quantity,
536
+ })),
537
+ return_items_being_sent: itemsForCreateReturn.map((item) => ({
538
+ id: item.id,
539
+ quantity: item.quantity,
540
+ })),
541
+ swap_return_items_original: returnItems.map((item) => ({
542
+ id: item.id,
543
+ quantity: item.quantity,
544
+ variant_id: item.variant_id,
545
+ })),
546
+ invalid_ids: invalidFinalIds,
547
+ });
548
+ // If there are invalid IDs, try to map them using variant_id
549
+ if (invalidFinalIds.length > 0) {
550
+ console.warn("[Create Medusa Return] IDs changed between queries, attempting to map using variant_id:", {
551
+ invalid_ids: invalidFinalIds,
552
+ valid_order_item_ids: Array.from(finalOrderItemIds),
553
+ });
554
+ const finalItemsToUpdate = [];
555
+ // Try to map each invalid ID using variant_id
556
+ // Use returnItemsForMedusa to get variant_id (indices match since itemsForCreateReturn is created from returnItemsForMedusa)
557
+ itemsForCreateReturn.forEach((returnItem, index) => {
558
+ if (!finalOrderItemIds.has(returnItem.id)) {
559
+ // Get variant_id from returnItemsForMedusa (indices match)
560
+ const swapReturnItem = returnItemsForMedusa[index];
561
+ const variantId = swapReturnItem.variant_id;
562
+ if (variantId && finalVariantToItemMap.has(variantId)) {
563
+ const matchingItem = finalVariantToItemMap.get(variantId);
564
+ finalItemsToUpdate.push({
565
+ index,
566
+ oldItemId: returnItem.id,
567
+ newItemId: matchingItem.id,
568
+ });
569
+ console.log("[Create Medusa Return] Final validation mapping by variant_id:", {
570
+ old_id: returnItem.id,
571
+ new_id: matchingItem.id,
572
+ variant_id: variantId,
573
+ note: "Order items changed between queries, using variant_id to map",
574
+ });
575
+ }
576
+ else if (!variantId) {
577
+ console.warn("[Create Medusa Return] Cannot map - variant_id not available:", {
578
+ item_id: returnItem.id,
579
+ index,
580
+ swap_return_item: swapReturnItem,
581
+ });
582
+ }
583
+ else {
584
+ console.warn("[Create Medusa Return] Cannot map - variant_id not found in current order:", {
585
+ item_id: returnItem.id,
586
+ variant_id: variantId,
587
+ available_variant_ids: Array.from(finalVariantToItemMap.keys()),
588
+ });
589
+ }
590
+ }
591
+ });
592
+ // Update itemsForCreateReturn with mapped IDs
593
+ if (finalItemsToUpdate.length > 0) {
594
+ console.log("[Create Medusa Return] Updating itemsForCreateReturn with mapped IDs:", {
595
+ updates: finalItemsToUpdate,
596
+ items_before: itemsForCreateReturn.map((item) => ({ id: item.id, quantity: item.quantity })),
597
+ });
598
+ finalItemsToUpdate.forEach(({ index, newItemId }) => {
599
+ itemsForCreateReturn[index].id = newItemId;
600
+ });
601
+ console.log("[Create Medusa Return] Items after mapping:", {
602
+ items_after: itemsForCreateReturn.map((item) => ({ id: item.id, quantity: item.quantity })),
603
+ });
604
+ }
605
+ // Check again after mapping
606
+ const remainingInvalidIds = itemsForCreateReturn
607
+ .map((item) => item.id)
608
+ .filter((id) => !finalOrderItemIds.has(id));
609
+ if (remainingInvalidIds.length > 0) {
610
+ // Check if variant_id mismatch is the issue
611
+ const variantMismatches = [];
612
+ remainingInvalidIds.forEach((invalidId) => {
613
+ const swapReturnItem = returnItems.find((ri) => ri.id === invalidId);
614
+ const swapVariantId = swapReturnItem?.variant_id;
615
+ if (swapVariantId) {
616
+ variantMismatches.push({
617
+ item_id: invalidId,
618
+ swap_variant_id: swapVariantId,
619
+ order_variant_ids: Array.from(finalVariantToItemMap.keys()),
620
+ });
621
+ }
622
+ });
623
+ console.error("[Create Medusa Return] CRITICAL: Invalid IDs detected after mapping:", {
624
+ invalid_ids: remainingInvalidIds,
625
+ valid_order_item_ids: Array.from(finalOrderItemIds),
626
+ items_being_sent: itemsForCreateReturn,
627
+ swap_return_items_original: returnItems,
628
+ swap_id: swap_id,
629
+ variant_mismatches: variantMismatches,
630
+ });
631
+ // Provide clearer error message if variant mismatch detected
632
+ if (variantMismatches.length > 0) {
633
+ const mismatch = variantMismatches[0];
634
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Cannot approve swap: The order item with ID "${remainingInvalidIds[0]}" (variant: ${mismatch.swap_variant_id}) no longer exists in order ${swapData.order_id}. ` +
635
+ `The order item was replaced with a different product variant (${mismatch.order_variant_ids.join(", ") || "unknown"}). ` +
636
+ `You cannot return an item that has been replaced with a different product. Please cancel this swap and create a new one for the current order items.`);
637
+ }
638
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Item ID${remainingInvalidIds.length > 1 ? "s" : ""} "${remainingInvalidIds.join('", "')}" not found in order ${swapData.order_id} and could not be mapped. Available item IDs: ${Array.from(finalOrderItemIds).join(", ")}`);
639
+ }
640
+ }
641
+ }
642
+ }
643
+ catch (finalValidationError) {
644
+ // If it's a MedusaError we created, re-throw it
645
+ if (finalValidationError instanceof utils_1.MedusaError) {
646
+ throw finalValidationError;
647
+ }
648
+ // Otherwise, log warning but continue - Medusa will validate
649
+ console.warn("[Create Medusa Return] Final validation query failed, proceeding:", finalValidationError);
650
+ }
651
+ // Log exactly what we're sending to Medusa before the call
652
+ console.log("[Create Medusa Return] About to call orderService.createReturn:", {
89
653
  order_id: swapData.order_id,
90
- items: returnItemsForMedusa,
91
654
  location_id: finalLocationId,
655
+ items_count: itemsForCreateReturn.length,
656
+ items: itemsForCreateReturn,
657
+ item_ids: itemsForCreateReturn.map((item) => item.id),
92
658
  });
659
+ // Call createReturn with simplified structure
660
+ let medusaReturn;
661
+ try {
662
+ medusaReturn = await orderService.createReturn({
663
+ order_id: swapData.order_id,
664
+ items: itemsForCreateReturn,
665
+ location_id: finalLocationId,
666
+ });
667
+ }
668
+ catch (createReturnError) {
669
+ // Enhanced error logging for Medusa's createReturn errors
670
+ const errorMessage = createReturnError instanceof Error ? createReturnError.message : String(createReturnError);
671
+ console.error("[Create Medusa Return] Error from orderService.createReturn:", {
672
+ error: createReturnError,
673
+ error_message: errorMessage,
674
+ error_type: createReturnError instanceof Error ? createReturnError.constructor.name : typeof createReturnError,
675
+ order_id: swapData.order_id,
676
+ items_sent: itemsForCreateReturn,
677
+ item_ids_sent: itemsForCreateReturn.map((item) => item.id),
678
+ location_id: finalLocationId,
679
+ swap_return_items_original: returnItems,
680
+ swap_id: swap_id,
681
+ });
682
+ // If the error message contains "Item ID" and "not found", enhance it with more context
683
+ if (errorMessage.includes("Item ID") && errorMessage.includes("not found")) {
684
+ // Try to extract the invalid ID from the error message
685
+ const idMatch = errorMessage.match(/Item ID\s+"([^"]+)"/i);
686
+ const invalidId = idMatch ? idMatch[1] : null;
687
+ if (invalidId) {
688
+ // Check if this ID was in our original return_items
689
+ const wasInOriginal = returnItems.some((ri) => ri.id === invalidId);
690
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Item ID "${invalidId}" not found in order ${swapData.order_id}. ` +
691
+ `This ID ${wasInOriginal ? "was in the swap's return_items" : "was not in the swap's return_items"}. ` +
692
+ `It may be a stale order item ID (the order may have been modified since the swap was created). ` +
693
+ `Swap ID: ${swap_id}. ` +
694
+ `Original return_items: ${JSON.stringify(returnItems)}. ` +
695
+ `Items being sent to createReturn: ${JSON.stringify(itemsForCreateReturn.map((item) => ({ id: item.id, quantity: item.quantity })))}`);
696
+ }
697
+ }
698
+ throw createReturnError;
699
+ }
93
700
  returnId = medusaReturn.id;
94
701
  // Use swap's return_shipping_method_id as fallback if not provided in input
95
702
  const finalReturnShippingMethodId = return_shipping_method_id || swapData.return_shipping_method_id;
@@ -148,4 +755,4 @@ exports.createMedusaReturnStep = (0, workflows_sdk_1.createStep)("create-medusa-
148
755
  swap: finalSwap || swap,
149
756
  });
150
757
  });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1lZHVzYS1yZXR1cm4tc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc3dhcC9jcmVhdGUtbWVkdXNhLXJldHVybi1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFDNUUscURBQWtHO0FBRWxHLGdEQUFtRDtBQWdCdEMsUUFBQSxzQkFBc0IsR0FBRyxJQUFBLDBCQUFVLEVBQzlDLHNCQUFzQixFQUN0QixLQUFLLEVBQ0gsS0FBa0MsRUFDbEMsRUFBRSxTQUFTLEVBQUUsRUFDd0MsRUFBRTtJQUN2RCxNQUFNLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV4RyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQkFBcUIsQ0FDdEIsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFjLGtCQUFXLENBQUMsQ0FBQTtJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFPaEIsQ0FBQTtJQUVELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsNEJBQTRCLENBQzdCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkIseUJBQXlCO1FBQ3pCLE9BQU8sSUFBSSw0QkFBWSxDQUErQjtZQUNwRCxTQUFT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
758
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1lZHVzYS1yZXR1cm4tc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc3dhcC9jcmVhdGUtbWVkdXNhLXJldHVybi1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFDNUUscURBQWtHO0FBRWxHLGdEQUFtRDtBQWdCdEMsUUFBQSxzQkFBc0IsR0FBRyxJQUFBLDBCQUFVLEVBQzlDLHNCQUFzQixFQUN0QixLQUFLLEVBQ0gsS0FBa0MsRUFDbEMsRUFBRSxTQUFTLEVBQUUsRUFDd0MsRUFBRTtJQUN2RCxNQUFNLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV4RyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQkFBcUIsQ0FDdEIsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFjLGtCQUFXLENBQUMsQ0FBQTtJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFPaEIsQ0FBQTtJQUVELDhCQUE4QjtJQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxFQUFFO1FBQ3pELE9BQU87UUFDUCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7UUFDM0IsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLFlBQVk7UUFDdkMsaUJBQWlCLEVBQUUsT0FBTyxRQUFRLENBQUMsWUFBWTtRQUMvQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDM0QsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0tBQ3hCLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsNEJBQTRCLENBQzdCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkIseUJBQXlCO1FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkRBQTZELEVBQUU7WUFDekUsT0FBTztZQUNQLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztTQUM5QixDQUFDLENBQUE7UUFDRixPQUFPLElBQUksNEJBQVksQ0FBK0I7WUFDcEQsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO1lBQzdCLElBQUk7U0FDTCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLElBQUksQ0FBQztRQUNILE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ25DLGlDQUF5QixDQUFDLFlBQVksQ0FDdkMsQ0FBQTtRQUVELDJDQUEyQztRQUMzQyxNQUFNLG9CQUFvQixHQUFHLElBQUEsbUNBQTJCLEVBQUM7WUFDdkQsVUFBVSxFQUFFLFFBQVE7WUFDcEIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUM7WUFDckMsT0FBTyxFQUFFO2dCQUNQLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7YUFDOUI7U0FDRixDQUFDLENBQUE7UUFFRixNQUFNLGVBQWUsR0FBRyxNQUFNLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBQy9ELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFaEgsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0RBQStELEVBQUU7Z0JBQzVFLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtnQkFDM0Isc0JBQXNCLEVBQUUsWUFBWSxDQUFDLE1BQU07Z0JBQzNDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRTtvQkFDbEQsTUFBTSxPQUFPLEdBQUcsR0FBc0QsQ0FBQTtvQkFDdEUsT0FBTzt3QkFDTCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7d0JBQ2QsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRTtxQkFDdEQsQ0FBQTtnQkFDSCxDQUFDLENBQUM7YUFDSCxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsNkNBQTZDO1FBQzdDLE1BQU0sc0JBQXNCLEdBQUcsSUFBQSxtQ0FBMkIsRUFBQztZQUN6RCxVQUFVLEVBQUUsVUFBVTtZQUN0QixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQztZQUN2QyxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzthQUM5QjtTQUNGLENBQUMsQ0FBQTtRQUVGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtRQUNuRSxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFMUgsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUVBQWlFLEVBQUU7Z0JBQzlFLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtnQkFDM0Isd0JBQXdCLEVBQUUsY0FBYyxDQUFDLE1BQU07Z0JBQy9DLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFXLEVBQUUsRUFBRTtvQkFDckQsTUFBTSxNQUFNLEdBQUcsRUFBeUMsQ0FBQTtvQkFDeEQsT0FBTzt3QkFDTCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7d0JBQ2IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO3FCQUM1QixDQUFBO2dCQUNILENBQUMsQ0FBQzthQUNILENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxVQUFVLEVBQUUsQ0FBQztRQUNwQixrREFBa0Q7UUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxvRUFBb0UsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUNoRyxDQUFDO0lBRUQsbUdBQW1HO0lBQ25HLE1BQU0sWUFBWSxHQUFJLFFBQW1ELENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQTtJQUN4RixNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQyx5QkFBeUIsS0FBSyxJQUFJLENBQUE7SUFFL0UsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksdUJBQXVCLENBQUMsRUFBRSxDQUFDO1FBQ3BHLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFHQUFxRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQ3ZILENBQUE7SUFDSCxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLElBQUksV0FBVyxHQUFrRixFQUFFLENBQUE7SUFFbkcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsRUFBRTtRQUM3RCxzQkFBc0IsRUFBRSxDQUFDLENBQUMsZ0JBQWdCO1FBQzFDLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sSUFBSSxDQUFDO1FBQ3ZELGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxZQUFZO0tBQ3pDLENBQUMsQ0FBQTtJQUVGLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3BELDRDQUE0QztRQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxFQUFFLGdCQUFnQixDQUFDLENBQUE7UUFDakYsV0FBVyxHQUFHLGdCQUFnQjthQUMzQixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7WUFDdEIsT0FBTyxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUE7UUFDckUsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2QsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztZQUN0QixVQUFVLEVBQUcsSUFBZ0MsQ0FBQyxVQUFVLEVBQUUsa0NBQWtDO1NBQzdGLENBQUMsQ0FBQyxDQUFBO1FBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtREFBbUQsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUMvRSxDQUFDO1NBQU0sQ0FBQztRQUNOLHFEQUFxRDtRQUNyRCxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWTtxQkFDaEMsTUFBTSxDQUFDLENBQUMsSUFBYSxFQUFFLEVBQUU7b0JBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQTRELENBQUE7b0JBQzdFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQTtvQkFDOUMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3ZHLENBQUMsQ0FBQztxQkFDRCxHQUFHLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRTtvQkFDckIsTUFBTSxRQUFRLEdBQUcsSUFBc0gsQ0FBQTtvQkFDdkksTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFBO29CQUM5QywwRkFBMEY7b0JBQzFGLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQzt3QkFDbEUsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscURBQXFELE1BQU0sR0FBRyxDQUMvRCxDQUFBO29CQUNILENBQUM7b0JBQ0QsT0FBTzt3QkFDTCxFQUFFLEVBQUUsTUFBTTt3QkFDVixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO3dCQUN4QyxNQUFNLEVBQUUsUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLG1DQUFtQzt3QkFDbEYsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsMENBQTBDO3FCQUM1RSxDQUFBO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ04sQ0FBQztpQkFBTSxJQUFJLE9BQU8sUUFBUSxDQUFDLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDO29CQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO29CQUNoRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDMUIsV0FBVyxHQUFHLE1BQU07NkJBQ2pCLE1BQU0sQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFOzRCQUN4QixNQUFNLFFBQVEsR0FBRyxJQUE0RCxDQUFBOzRCQUM3RSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUE7NEJBQzlDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO3dCQUN2RyxDQUFDLENBQUM7NkJBQ0QsR0FBRyxDQUFDLENBQUMsSUFBYSxFQUFFLEVBQUU7NEJBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQXNILENBQUE7NEJBQ3ZJLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQTs0QkFDOUMsMEZBQTBGOzRCQUMxRixJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7Z0NBQ2xFLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFEQUFxRCxNQUFNLEdBQUcsQ0FDL0QsQ0FBQTs0QkFDSCxDQUFDOzRCQUNELE9BQU87Z0NBQ0wsRUFBRSxFQUFFLE1BQU07Z0NBQ1YsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztnQ0FDeEMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxtQ0FBbUM7Z0NBQ2xGLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLDBDQUEwQzs2QkFDNUUsQ0FBQTt3QkFDSCxDQUFDLENBQUMsQ0FBQTtvQkFDTixDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxVQUFVLEVBQUUsQ0FBQztvQkFDcEIscUNBQXFDO29CQUNyQyxJQUFJLFVBQVUsWUFBWSxtQkFBVyxFQUFFLENBQUM7d0JBQ3RDLE1BQU0sVUFBVSxDQUFBO29CQUNsQixDQUFDO29CQUNELG1EQUFtRDtnQkFDckQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUNwRixJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsK0JBQStCLFlBQVksQ0FBQyxNQUFNLGdDQUFnQyxDQUNuRixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qiw2QkFBNkIsQ0FDOUIsQ0FBQTtJQUNILENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FPbkMsT0FBTyxDQUFDLENBQUE7SUFFWCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsZ0NBQWdDLENBQ2pDLENBQUE7SUFDSCxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLElBQUksUUFBZ0IsQ0FBQTtJQUVwQixJQUFJLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM5Qix3REFBd0Q7UUFDeEQsc0RBQXNEO1FBQ3RELE1BQU0sb0JBQW9CLEdBQUcsV0FBVzthQUNyQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNmLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUE7WUFDdEcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkRBQTJELEVBQUU7b0JBQ3hFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtpQkFDcEIsQ0FBQyxDQUFBO1lBQ0osQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFBO1FBQ2hCLENBQUMsQ0FBQzthQUNELEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1osMENBQTBDO1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGdEQUFnRCxJQUFJLENBQUMsRUFBRSxHQUFHLENBQzNELENBQUE7WUFDSCxDQUFDO1lBQ0QsT0FBTztnQkFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxtQ0FBbUM7Z0JBQzNELFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLG1EQUFtRDthQUNqRixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFSixJQUFJLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qiw4REFBOEQsQ0FDL0QsQ0FBQTtRQUNILENBQUM7UUFFRCwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDbkMsaUNBQXlCLENBQUMsWUFBWSxDQUN2QyxDQUFBO1lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBQSxtQ0FBMkIsRUFBQztnQkFDN0MsVUFBVSxFQUFFLE9BQU87Z0JBQ25CLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsRUFBRSwwREFBMEQ7Z0JBQ3pHLE9BQU8sRUFBRTtvQkFDUCxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2lCQUN4QjthQUNGLENBQUMsQ0FBQTtZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQzVDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFFMUUsZ0VBQWdFO1lBQ2hFLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxTQUFTLEdBQUcsQ0FBb0IsQ0FBQTtnQkFDdEMsT0FBTyxTQUFTLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQUE7WUFDM0MsQ0FBQyxDQUE2QyxDQUFBO1lBRTlDLHFFQUFxRTtZQUNyRSxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUE2QyxDQUFBO2dCQUNqRSxPQUFPLENBQUMsSUFBSSxDQUFDLDRFQUE0RSxFQUFFO29CQUN6RixrQkFBa0IsRUFBRSxRQUFRLENBQUMsUUFBUTtvQkFDckMsY0FBYyxFQUFHLFVBQVUsQ0FBQyxDQUFDLENBQXFCLENBQUMsRUFBRTtpQkFDdEQsQ0FBQyxDQUFBO1lBQ0osQ0FBQztZQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixTQUFTLFFBQVEsQ0FBQyxRQUFRLFlBQVksQ0FDdkMsQ0FBQTtZQUNILENBQUM7WUFFRCxrQ0FBa0M7WUFDbEMsTUFBTSxPQUFPLEdBQUksS0FBeUIsQ0FBQyxFQUFFLENBQUE7WUFDN0MsSUFBSSxPQUFPLEtBQUssUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxFQUFFO29CQUNuRSxrQkFBa0IsRUFBRSxRQUFRLENBQUMsUUFBUTtvQkFDckMsZUFBZSxFQUFFLE9BQU87b0JBQ3hCLE9BQU8sRUFBRSxPQUFPO2lCQUNqQixDQUFDLENBQUE7Z0JBQ0YsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsZ0NBQWdDLFFBQVEsQ0FBQyxRQUFRLFlBQVksT0FBTyxFQUFFLENBQ3ZFLENBQUE7WUFDSCxDQUFDO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLFNBQVMsUUFBUSxDQUFDLFFBQVEsZUFBZSxDQUMxQyxDQUFBO1lBQ0gsQ0FBQztZQUVELGdDQUFnQztZQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxFQUFFO2dCQUMzRCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQzNCLFdBQVcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQy9CLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNoQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ1gsVUFBVSxFQUFHLElBQWdDLENBQUMsVUFBVTtvQkFDeEQsUUFBUSxFQUFHLElBQThCLENBQUMsUUFBUTtpQkFDbkQsQ0FBQyxDQUFDO2FBQ0osQ0FBQyxDQUFBO1lBRUYseUNBQXlDO1lBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0NBQStDLEVBQUU7Z0JBQzNELGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxNQUFNO2dCQUN0QyxZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDdkMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2lCQUNwQixDQUFDLENBQUM7YUFDSixDQUFDLENBQUE7WUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDaEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQzNCLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBMkMsQ0FBQyxDQUFDLENBQ2xGLENBQUE7WUFFRCxpRUFBaUU7WUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBK0MsQ0FBQTtZQUMvRSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMzQixNQUFNLFFBQVEsR0FBRyxJQUEyQyxDQUFBO2dCQUM1RCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDeEIsNkRBQTZEO29CQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUMvQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTtvQkFDckQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFFRixnRUFBZ0U7WUFDaEUsTUFBTSxhQUFhLEdBQW1FLEVBQUUsQ0FBQTtZQUN4RixNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUE7WUFFbkMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNqRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFBO2dCQUU1QiwwQkFBMEI7Z0JBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELEVBQUU7b0JBQzdELEtBQUs7b0JBQ0wsT0FBTyxFQUFFLE1BQU07b0JBQ2YsZUFBZSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUN6QyxjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQ3hDLFdBQVcsRUFBRSxVQUFVO2lCQUN4QixDQUFDLENBQUE7Z0JBRUYsbURBQW1EO2dCQUNuRCxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvRUFBb0UsRUFBRSxNQUFNLENBQUMsQ0FBQTtvQkFDekYsT0FBTTtnQkFDUixDQUFDO2dCQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsdUVBQXVFLEVBQUU7b0JBQ3BGLE9BQU8sRUFBRSxNQUFNO29CQUNmLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztpQkFDekMsQ0FBQyxDQUFBO2dCQUVGLHlEQUF5RDtnQkFDekQsdUdBQXVHO2dCQUN2RyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFBO2dCQUNqRSxJQUFJLFNBQTZCLENBQUE7Z0JBRWpDLDBFQUEwRTtnQkFDMUUsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsU0FBUyxHQUFJLGNBQTBDLENBQUMsVUFBVSxDQUFBO29CQUNsRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1FQUFtRSxFQUFFO3dCQUMvRSxPQUFPLEVBQUUsTUFBTTt3QkFDZixVQUFVLEVBQUUsU0FBUzt3QkFDckIsY0FBYyxFQUFFLENBQUMsQ0FBQyxTQUFTO3FCQUM1QixDQUFDLENBQUE7Z0JBQ0osQ0FBQztnQkFFRCw0RUFBNEU7Z0JBQzVFLGlFQUFpRTtnQkFDakUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNmLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFBO29CQUN2RSxJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUNwQixTQUFTLEdBQUksZUFBMkMsQ0FBQyxVQUFVLENBQUE7d0JBQ25FLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEVBQTRFLEVBQUU7NEJBQ3hGLE9BQU8sRUFBRSxNQUFNOzRCQUNmLFVBQVUsRUFBRSxTQUFTOzRCQUNyQixJQUFJLEVBQUUsaURBQWlEO3lCQUN4RCxDQUFDLENBQUE7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO2dCQUVELG1FQUFtRTtnQkFDbkUsSUFBSSxTQUFTLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUUsQ0FBQTtvQkFDckQsYUFBYSxDQUFDLElBQUksQ0FBQzt3QkFDakIsS0FBSzt3QkFDTCxTQUFTLEVBQUUsTUFBTTt3QkFDakIsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFO3FCQUMzQixDQUFDLENBQUE7b0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRkFBZ0YsRUFBRTt3QkFDNUYsTUFBTSxFQUFFLE1BQU07d0JBQ2QsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFO3dCQUN2QixVQUFVLEVBQUUsU0FBUzt3QkFDckIsSUFBSSxFQUFFLHlEQUF5RDtxQkFDaEUsQ0FBQyxDQUFBO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDckIsaUVBQWlFO29CQUNqRSxvREFBb0Q7b0JBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsNEVBQTRFLEVBQUU7d0JBQzFGLE9BQU8sRUFBRSxNQUFNO3dCQUNmLFVBQVUsRUFBRSxTQUFTO3dCQUNyQixpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO3dCQUN0RCxJQUFJLEVBQUUsa0RBQWtEO3FCQUN6RCxDQUFDLENBQUE7b0JBQ0YsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDN0IsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGdFQUFnRTtvQkFDaEUsa0ZBQWtGO29CQUNsRiwrRUFBK0U7b0JBQy9FLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0VBQXdFLEVBQUU7d0JBQ3RGLE9BQU8sRUFBRSxNQUFNO3dCQUNmLFdBQVcsRUFBRSxVQUFVO3dCQUN2QixnQkFBZ0IsRUFBRSxjQUFjO3dCQUNoQyxjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7d0JBQ3hDLElBQUksRUFBRSxvSUFBb0k7cUJBQzNJLENBQUMsQ0FBQTtvQkFDRixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFFRiwrQ0FBK0M7WUFDL0MsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxFQUFFO29CQUN4RCxPQUFPLEVBQUUsYUFBYTtvQkFDdEIsMkJBQTJCLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUMvRCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO3FCQUN4QixDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFBO2dCQUNGLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO29CQUM3QyxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUE7b0JBQ2hELG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUE7b0JBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0NBQStDLEVBQUU7d0JBQzNELEtBQUs7d0JBQ0wsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7cUJBQy9DLENBQUMsQ0FBQTtnQkFDSixDQUFDLENBQUMsQ0FBQTtnQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLDJEQUEyRCxFQUFFO29CQUN2RSxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ3hELEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTt3QkFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7cUJBQ3hCLENBQUMsQ0FBQztpQkFDSixDQUFDLENBQUE7WUFDSixDQUFDO1lBRUQsNERBQTREO1lBQzVELElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyw4REFBOEQsRUFBRTtvQkFDNUUsY0FBYztvQkFDZCxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQ3RDLG9CQUFvQjtvQkFDcEIscUJBQXFCLEVBQUUsV0FBVztvQkFDbEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNyQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ1gsVUFBVSxFQUFHLElBQWdDLENBQUMsVUFBVTt3QkFDeEQsUUFBUSxFQUFHLElBQThCLENBQUMsUUFBUTtxQkFDbkQsQ0FBQyxDQUFDO29CQUNILE9BQU8sRUFBRSxPQUFPO29CQUNoQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7aUJBQzVCLENBQUMsQ0FBQTtnQkFDRixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixVQUFVLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsUUFBUSxDQUFDLFFBQVEsbUNBQW1DO29CQUMxSiwrREFBK0Q7b0JBQy9ELDZCQUE2QixLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtvQkFDcEUseUdBQXlHLENBQzFHLENBQUE7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sZUFBZSxFQUFFLENBQUM7WUFDekIsZ0VBQWdFO1lBQ2hFLElBQUksZUFBZSxZQUFZLG1CQUFXLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxlQUFlLENBQUE7WUFDdkIsQ0FBQztZQUNELCtFQUErRTtZQUMvRSxPQUFPLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQy9GLENBQUM7UUFFRCx5REFBeUQ7UUFDekQsTUFBTSxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQTtZQUNsRixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLHlEQUF5RCxFQUFFO29CQUN2RSxJQUFJO29CQUNKLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDWCxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRTtpQkFDeEIsQ0FBQyxDQUFBO1lBQ0osQ0FBQztZQUNELE9BQU8sY0FBYyxDQUFBO1FBQ3ZCLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIseUJBQXlCLG9CQUFvQixDQUFDLE1BQU0sOENBQThDLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUN6SSxDQUFBO1FBQ0gsQ0FBQztRQUVELHVEQUF1RDtRQUN2RCxPQUFPLENBQUMsR0FBRyxDQUFDLG9EQUFvRCxFQUFFO1lBQ2hFLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixXQUFXLEVBQUUsb0JBQW9CLENBQUMsTUFBTTtZQUN4QyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDMUIsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFBO1FBRUYsOERBQThEO1FBQzlELE1BQU0sZUFBZSxHQUFHLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQTtRQUV6RSwwRkFBMEY7UUFDMUYsTUFBTSx3QkFBd0IsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQzFELENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQ3hHLENBQUE7UUFDRCxJQUFJLHdCQUF3QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPLENBQUMsS0FBSyxDQUFDLDhFQUE4RSxFQUFFO2dCQUM1RixZQUFZLEVBQUUsd0JBQXdCO2dCQUN0QyxRQUFRLEVBQUUsb0JBQW9CO2FBQy9CLENBQUMsQ0FBQTtZQUNGLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHlCQUF5Qix3QkFBd0IsQ0FBQyxNQUFNLHNDQUFzQyxDQUMvRixDQUFBO1FBQ0gsQ0FBQztRQUVELHFEQUFxRDtRQUNyRCwrRUFBK0U7UUFDL0UsTUFBTSxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM3RCxNQUFNLFVBQVUsR0FBeUQ7Z0JBQ3ZFLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDMUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ2hDLENBQUE7WUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDM0QsVUFBVSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ3RELENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQTtRQUNuQixDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0VBQWdFLEVBQUU7WUFDNUUsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztZQUNoRCxXQUFXLEVBQUUsb0JBQW9CLENBQUMsTUFBTTtTQUN6QyxDQUFDLENBQUE7UUFFRixpRUFBaUU7UUFDakUsaUdBQWlHO1FBQ2pHLElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ25DLGlDQUF5QixDQUFDLFlBQVksQ0FDdkMsQ0FBQTtZQUVELE1BQU0sZUFBZSxHQUFHLElBQUEsbUNBQTJCLEVBQUM7Z0JBQ2xELFVBQVUsRUFBRSxPQUFPO2dCQUNuQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDO2dCQUNoRSxPQUFPLEVBQUU7b0JBQ1AsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztpQkFDeEI7YUFDRixDQUFDLENBQUE7WUFFRixNQUFNLFdBQVcsR0FBRyxNQUFNLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUN0RCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ25HLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQTZDLENBQUE7WUFFakYsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFFMUUsOENBQThDO2dCQUM5QyxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUErQyxDQUFBO2dCQUNwRixVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNoQyxNQUFNLFFBQVEsR0FBRyxJQUEyQyxDQUFBO29CQUM1RCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDeEIsNkRBQTZEO3dCQUM3RCxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDOzRCQUNwRCxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTt3QkFDMUQsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUVGLE1BQU0sZUFBZSxHQUFHLG9CQUFvQjtxQkFDekMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3FCQUN0QixNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7Z0JBRTdDLGtDQUFrQztnQkFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrRUFBa0UsRUFBRTtvQkFDOUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO29CQUMzQixjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztvQkFDN0MsV0FBVyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUMzQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ1gsVUFBVSxFQUFHLElBQWdDLENBQUMsVUFBVTt3QkFDeEQsUUFBUSxFQUFHLElBQThCLENBQUMsUUFBUTtxQkFDbkQsQ0FBQyxDQUFDO29CQUNILHVCQUF1QixFQUFFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDM0QsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtxQkFDeEIsQ0FBQyxDQUFDO29CQUNILDBCQUEwQixFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ3JELEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTt3QkFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtxQkFDNUIsQ0FBQyxDQUFDO29CQUNILFdBQVcsRUFBRSxlQUFlO2lCQUM3QixDQUFDLENBQUE7Z0JBRUYsNkRBQTZEO2dCQUM3RCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMseUZBQXlGLEVBQUU7d0JBQ3RHLFdBQVcsRUFBRSxlQUFlO3dCQUM1QixvQkFBb0IsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO3FCQUNwRCxDQUFDLENBQUE7b0JBRUYsTUFBTSxrQkFBa0IsR0FBbUUsRUFBRSxDQUFBO29CQUU3Riw4Q0FBOEM7b0JBQzlDLDZIQUE2SDtvQkFDN0gsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOzRCQUMxQywyREFBMkQ7NEJBQzNELE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFBOzRCQUNsRCxNQUFNLFNBQVMsR0FBSSxjQUEwQyxDQUFDLFVBQVUsQ0FBQTs0QkFFeEUsSUFBSSxTQUFTLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0NBQ3RELE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUUsQ0FBQTtnQ0FDMUQsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29DQUN0QixLQUFLO29DQUNMLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRTtvQ0FDeEIsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFO2lDQUMzQixDQUFDLENBQUE7Z0NBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsRUFBRTtvQ0FDNUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO29DQUNyQixNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQUU7b0NBQ3ZCLFVBQVUsRUFBRSxTQUFTO29DQUNyQixJQUFJLEVBQUUsOERBQThEO2lDQUNyRSxDQUFDLENBQUE7NEJBQ0osQ0FBQztpQ0FBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0NBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0RBQStELEVBQUU7b0NBQzVFLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtvQ0FDdEIsS0FBSztvQ0FDTCxnQkFBZ0IsRUFBRSxjQUFjO2lDQUNqQyxDQUFDLENBQUE7NEJBQ0osQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEVBQTRFLEVBQUU7b0NBQ3pGLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtvQ0FDdEIsVUFBVSxFQUFFLFNBQVM7b0NBQ3JCLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7aUNBQ2hFLENBQUMsQ0FBQTs0QkFDSixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUE7b0JBRUYsOENBQThDO29CQUM5QyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1RUFBdUUsRUFBRTs0QkFDbkYsT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsWUFBWSxFQUFFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzt5QkFDN0YsQ0FBQyxDQUFBO3dCQUVGLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7NEJBQ2xELG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUE7d0JBQzVDLENBQUMsQ0FBQyxDQUFBO3dCQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkNBQTZDLEVBQUU7NEJBQ3pELFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7eUJBQzVGLENBQUMsQ0FBQTtvQkFDSixDQUFDO29CQUVELDRCQUE0QjtvQkFDNUIsTUFBTSxtQkFBbUIsR0FBRyxvQkFBb0I7eUJBQzdDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzt5QkFDdEIsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO29CQUU3QyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsNENBQTRDO3dCQUM1QyxNQUFNLGlCQUFpQixHQUFzRixFQUFFLENBQUE7d0JBQy9HLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFOzRCQUN4QyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFBOzRCQUNwRSxNQUFNLGFBQWEsR0FBRyxjQUFjLEVBQUUsVUFBVSxDQUFBOzRCQUNoRCxJQUFJLGFBQWEsRUFBRSxDQUFDO2dDQUNsQixpQkFBaUIsQ0FBQyxJQUFJLENBQUM7b0NBQ3JCLE9BQU8sRUFBRSxTQUFTO29DQUNsQixlQUFlLEVBQUUsYUFBYTtvQ0FDOUIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQ0FDNUQsQ0FBQyxDQUFBOzRCQUNKLENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQUE7d0JBRUYsT0FBTyxDQUFDLEtBQUssQ0FBQyxzRUFBc0UsRUFBRTs0QkFDcEYsV0FBVyxFQUFFLG1CQUFtQjs0QkFDaEMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzs0QkFDbkQsZ0JBQWdCLEVBQUUsb0JBQW9COzRCQUN0QywwQkFBMEIsRUFBRSxXQUFXOzRCQUN2QyxPQUFPLEVBQUUsT0FBTzs0QkFDaEIsa0JBQWtCLEVBQUUsaUJBQWlCO3lCQUN0QyxDQUFDLENBQUE7d0JBRUYsNkRBQTZEO3dCQUM3RCxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDakMsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUE7NEJBQ3JDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGdEQUFnRCxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsZUFBZSxRQUFRLENBQUMsZUFBZSwrQkFBK0IsUUFBUSxDQUFDLFFBQVEsSUFBSTtnQ0FDakssaUVBQWlFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxLQUFLO2dDQUN4SCxzSkFBc0osQ0FDdkosQ0FBQTt3QkFDSCxDQUFDO3dCQUVELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLFVBQVUsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsUUFBUSxDQUFDLFFBQVEsaURBQWlELEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDN04sQ0FBQTtvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixnREFBZ0Q7WUFDaEQsSUFBSSxvQkFBb0IsWUFBWSxtQkFBVyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sb0JBQW9CLENBQUE7WUFDNUIsQ0FBQztZQUNELDZEQUE2RDtZQUM3RCxPQUFPLENBQUMsSUFBSSxDQUFDLG1FQUFtRSxFQUFFLG9CQUFvQixDQUFDLENBQUE7UUFDekcsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlFQUFpRSxFQUFFO1lBQzdFLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixXQUFXLEVBQUUsZUFBZTtZQUM1QixXQUFXLEVBQUUsb0JBQW9CLENBQUMsTUFBTTtZQUN4QyxLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDdEQsQ0FBQyxDQUFBO1FBRUYsOENBQThDO1FBQzlDLElBQUksWUFBNEIsQ0FBQTtRQUNoQyxJQUFJLENBQUM7WUFDSCxZQUFZLEdBQUcsTUFBTSxZQUFZLENBQUMsWUFBWSxDQUFDO2dCQUM3QyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQzNCLEtBQUssRUFBRSxvQkFBb0I7Z0JBQzNCLFdBQVcsRUFBRSxlQUFlO2FBQzdCLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFBQyxPQUFPLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsMERBQTBEO1lBQzFELE1BQU0sWUFBWSxHQUFHLGlCQUFpQixZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtZQUMvRyxPQUFPLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxFQUFFO2dCQUM1RSxLQUFLLEVBQUUsaUJBQWlCO2dCQUN4QixhQUFhLEVBQUUsWUFBWTtnQkFDM0IsVUFBVSxFQUFFLGlCQUFpQixZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxpQkFBaUI7Z0JBQzlHLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtnQkFDM0IsVUFBVSxFQUFFLG9CQUFvQjtnQkFDaEMsYUFBYSxFQUFFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsV0FBVyxFQUFFLGVBQWU7Z0JBQzVCLDBCQUEwQixFQUFFLFdBQVc7Z0JBQ3ZDLE9BQU8sRUFBRSxPQUFPO2FBQ2pCLENBQUMsQ0FBQTtZQUVGLHdGQUF3RjtZQUN4RixJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUMzRSx1REFBdUQ7Z0JBQ3ZELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtnQkFDMUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtnQkFFN0MsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCxvREFBb0Q7b0JBQ3BELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUE7b0JBRW5FLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLFlBQVksU0FBUyx3QkFBd0IsUUFBUSxDQUFDLFFBQVEsSUFBSTt3QkFDbEUsV0FBVyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxvQ0FBb0MsSUFBSTt3QkFDdEcsaUdBQWlHO3dCQUNqRyxZQUFZLE9BQU8sSUFBSTt3QkFDdkIsMEJBQTBCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUk7d0JBQ3pELHFDQUFxQyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDdEksQ0FBQTtnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0saUJBQWlCLENBQUE7UUFDekIsQ0FBQztRQUVELFFBQVEsR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFBO1FBRTFCLDRFQUE0RTtRQUM1RSxNQUFNLDJCQUEyQixHQUFHLHlCQUF5QixJQUFJLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQTtRQUVuRyx5Q0FBeUM7UUFDekMsd0VBQXdFO1FBQ3hFLHVDQUF1QztRQUN2QyxJQUFJLDJCQUEyQixFQUFFLENBQUM7WUFDaEMsdURBQXVEO1lBQ3ZELElBQUksQ0FBQztnQkFDSCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUtwQyxRQUFRLENBQUMsQ0FBQTtnQkFFWixJQUFJLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO29CQUNyQyxNQUFNLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQzt3QkFDcEMsU0FBUyxFQUFFLFFBQVE7d0JBQ25CLGtCQUFrQixFQUFFLDJCQUEyQjtxQkFDaEQsQ0FBQyxDQUFBO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZix1REFBdUQ7Z0JBQ3ZELCtEQUErRDtnQkFDL0QsT0FBTyxDQUFDLElBQUksQ0FBQyw4REFBOEQsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNyRixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sc0RBQXNEO1FBQ3RELGlFQUFpRTtRQUNqRSxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNuQyxpQ0FBeUIsQ0FBQyxZQUFZLENBQ3ZDLENBQUE7UUFFRCw0Q0FBNEM7UUFDNUMsMkRBQTJEO1FBQzNELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQ2pDLGtHQUFrRyxDQUNuRyxDQUFBO0lBQ0gsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxNQUFNLGlCQUFpQixHQUFJLFlBQVksQ0FBQyxrQkFBOEMsSUFBSSxFQUFFLENBQUE7SUFFNUYsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQ2hELFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUU7UUFDekIsSUFBSSxFQUFFO1lBQ0osU0FBUyxFQUFFLFFBQVE7WUFDbkIsa0JBQWtCLEVBQUUsa0JBQWtCLElBQUksSUFBSTtZQUM5Qyx5QkFBeUIsRUFBRSx5QkFBeUIsSUFBSSxJQUFJO1lBQzVELFFBQVEsRUFBRTtnQkFDUixHQUFHLFlBQVk7Z0JBQ2Ysa0JBQWtCLEVBQUU7b0JBQ2xCLEdBQUcsaUJBQWlCO29CQUNwQixTQUFTLEVBQUUsUUFBUTtvQkFDbkIsaUJBQWlCLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7b0JBQzNDLGtCQUFrQixFQUFFLGtCQUFrQixJQUFJLElBQUk7b0JBQzlDLHlCQUF5QixFQUFFLHlCQUF5QixJQUFJLElBQUk7aUJBQzdEO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFBO0lBRTNFLE9BQU8sSUFBSSw0QkFBWSxDQUErQjtRQUNwRCxTQUFTLEVBQUUsUUFBUTtRQUNuQixJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUk7S0FDeEIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUEifQ==