@jetta/cargo-stabilizer 0.1.0-10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +144 -0
  3. package/build/core/adapters/axle_adapter.d.ts +16 -0
  4. package/build/core/adapters/axle_adapter.d.ts.map +1 -0
  5. package/build/core/adapters/axle_adapter.js +35 -0
  6. package/build/core/adapters/build_axle_request.d.ts +15 -0
  7. package/build/core/adapters/build_axle_request.d.ts.map +1 -0
  8. package/build/core/adapters/build_axle_request.js +39 -0
  9. package/build/core/adapters/coordinate_mapper.d.ts +36 -0
  10. package/build/core/adapters/coordinate_mapper.d.ts.map +1 -0
  11. package/build/core/adapters/coordinate_mapper.js +40 -0
  12. package/build/core/adapters/empty_space_adapter.d.ts +10 -0
  13. package/build/core/adapters/empty_space_adapter.d.ts.map +1 -0
  14. package/build/core/adapters/empty_space_adapter.js +24 -0
  15. package/build/core/adapters/map_item_to_positioned_cube.d.ts +9 -0
  16. package/build/core/adapters/map_item_to_positioned_cube.d.ts.map +1 -0
  17. package/build/core/adapters/map_item_to_positioned_cube.js +16 -0
  18. package/build/core/adapters/run_axle_calculator.d.ts +16 -0
  19. package/build/core/adapters/run_axle_calculator.d.ts.map +1 -0
  20. package/build/core/adapters/run_axle_calculator.js +32 -0
  21. package/build/core/adapters/stability_adapter.d.ts +36 -0
  22. package/build/core/adapters/stability_adapter.d.ts.map +1 -0
  23. package/build/core/adapters/stability_adapter.js +61 -0
  24. package/build/core/candidates/build_candidate_context.d.ts +13 -0
  25. package/build/core/candidates/build_candidate_context.d.ts.map +1 -0
  26. package/build/core/candidates/build_candidate_context.js +17 -0
  27. package/build/core/candidates/candidate_context.d.ts +13 -0
  28. package/build/core/candidates/candidate_context.d.ts.map +1 -0
  29. package/build/core/candidates/candidate_context.js +1 -0
  30. package/build/core/candidates/candidate_generator.d.ts +9 -0
  31. package/build/core/candidates/candidate_generator.d.ts.map +1 -0
  32. package/build/core/candidates/candidate_generator.js +42 -0
  33. package/build/core/candidates/candidate_validation.d.ts +14 -0
  34. package/build/core/candidates/candidate_validation.d.ts.map +1 -0
  35. package/build/core/candidates/candidate_validation.js +72 -0
  36. package/build/core/candidates/collect_container_slots.d.ts +16 -0
  37. package/build/core/candidates/collect_container_slots.d.ts.map +1 -0
  38. package/build/core/candidates/collect_container_slots.js +20 -0
  39. package/build/core/candidates/enumerate_empty_space_slots.d.ts +15 -0
  40. package/build/core/candidates/enumerate_empty_space_slots.d.ts.map +1 -0
  41. package/build/core/candidates/enumerate_empty_space_slots.js +44 -0
  42. package/build/core/candidates/enumerate_supporter_top_slots.d.ts +11 -0
  43. package/build/core/candidates/enumerate_supporter_top_slots.d.ts.map +1 -0
  44. package/build/core/candidates/enumerate_supporter_top_slots.js +36 -0
  45. package/build/core/candidates/is_elevated_on_supporter_origin.d.ts +14 -0
  46. package/build/core/candidates/is_elevated_on_supporter_origin.d.ts.map +1 -0
  47. package/build/core/candidates/is_elevated_on_supporter_origin.js +28 -0
  48. package/build/core/candidates/rank_candidates.d.ts +9 -0
  49. package/build/core/candidates/rank_candidates.d.ts.map +1 -0
  50. package/build/core/candidates/rank_candidates.js +22 -0
  51. package/build/core/constants/ReorderStrategy.d.ts +11 -0
  52. package/build/core/constants/ReorderStrategy.d.ts.map +1 -0
  53. package/build/core/constants/ReorderStrategy.js +9 -0
  54. package/build/core/constants/TieRatioOrientation.d.ts +6 -0
  55. package/build/core/constants/TieRatioOrientation.d.ts.map +1 -0
  56. package/build/core/constants/TieRatioOrientation.js +5 -0
  57. package/build/core/evaluation/compute_reorder_objective.d.ts +13 -0
  58. package/build/core/evaluation/compute_reorder_objective.d.ts.map +1 -0
  59. package/build/core/evaluation/compute_reorder_objective.js +13 -0
  60. package/build/core/evaluation/evaluation_context.d.ts +14 -0
  61. package/build/core/evaluation/evaluation_context.d.ts.map +1 -0
  62. package/build/core/evaluation/evaluation_context.js +1 -0
  63. package/build/core/evaluation/state_evaluator.d.ts +50 -0
  64. package/build/core/evaluation/state_evaluator.d.ts.map +1 -0
  65. package/build/core/evaluation/state_evaluator.js +95 -0
  66. package/build/core/exceptions/AxleCalculationError.d.ts +4 -0
  67. package/build/core/exceptions/AxleCalculationError.d.ts.map +1 -0
  68. package/build/core/exceptions/AxleCalculationError.js +6 -0
  69. package/build/core/exceptions/InvalidStabilizerInputError.d.ts +4 -0
  70. package/build/core/exceptions/InvalidStabilizerInputError.d.ts.map +1 -0
  71. package/build/core/exceptions/InvalidStabilizerInputError.js +6 -0
  72. package/build/core/exceptions/InvalidStabilizerOutputError.d.ts +4 -0
  73. package/build/core/exceptions/InvalidStabilizerOutputError.d.ts.map +1 -0
  74. package/build/core/exceptions/InvalidStabilizerOutputError.js +6 -0
  75. package/build/core/exceptions/MixedWaypointIdError.d.ts +4 -0
  76. package/build/core/exceptions/MixedWaypointIdError.d.ts.map +1 -0
  77. package/build/core/exceptions/MixedWaypointIdError.js +6 -0
  78. package/build/core/exceptions/UnknownReorderStrategyError.d.ts +4 -0
  79. package/build/core/exceptions/UnknownReorderStrategyError.d.ts.map +1 -0
  80. package/build/core/exceptions/UnknownReorderStrategyError.js +6 -0
  81. package/build/core/factory/read_stabilizer_config.d.ts +10 -0
  82. package/build/core/factory/read_stabilizer_config.d.ts.map +1 -0
  83. package/build/core/factory/read_stabilizer_config.js +26 -0
  84. package/build/core/factory/read_stabilizer_config_helpers.d.ts +29 -0
  85. package/build/core/factory/read_stabilizer_config_helpers.d.ts.map +1 -0
  86. package/build/core/factory/read_stabilizer_config_helpers.js +73 -0
  87. package/build/core/factory/strategy_factory.d.ts +9 -0
  88. package/build/core/factory/strategy_factory.d.ts.map +1 -0
  89. package/build/core/factory/strategy_factory.js +29 -0
  90. package/build/core/filters/collect_movable_items.d.ts +18 -0
  91. package/build/core/filters/collect_movable_items.d.ts.map +1 -0
  92. package/build/core/filters/collect_movable_items.js +72 -0
  93. package/build/core/filters/loose_item_filter.d.ts +20 -0
  94. package/build/core/filters/loose_item_filter.d.ts.map +1 -0
  95. package/build/core/filters/loose_item_filter.js +28 -0
  96. package/build/core/geometry/box_geometry.d.ts +48 -0
  97. package/build/core/geometry/box_geometry.d.ts.map +1 -0
  98. package/build/core/geometry/box_geometry.js +98 -0
  99. package/build/core/logging/stabilizer_logger.d.ts +3 -0
  100. package/build/core/logging/stabilizer_logger.d.ts.map +1 -0
  101. package/build/core/logging/stabilizer_logger.js +2 -0
  102. package/build/core/move/apply_move.d.ts +26 -0
  103. package/build/core/move/apply_move.d.ts.map +1 -0
  104. package/build/core/move/apply_move.js +26 -0
  105. package/build/core/orchestration/StabilizerFlow.d.ts +15 -0
  106. package/build/core/orchestration/StabilizerFlow.d.ts.map +1 -0
  107. package/build/core/orchestration/StabilizerFlow.js +29 -0
  108. package/build/core/orchestration/build_milkrun_bands_from_config.d.ts +13 -0
  109. package/build/core/orchestration/build_milkrun_bands_from_config.d.ts.map +1 -0
  110. package/build/core/orchestration/build_milkrun_bands_from_config.js +14 -0
  111. package/build/core/orchestration/build_reorder_context.d.ts +11 -0
  112. package/build/core/orchestration/build_reorder_context.d.ts.map +1 -0
  113. package/build/core/orchestration/build_reorder_context.js +27 -0
  114. package/build/core/orchestration/read_primary_env.d.ts +9 -0
  115. package/build/core/orchestration/read_primary_env.d.ts.map +1 -0
  116. package/build/core/orchestration/read_primary_env.js +13 -0
  117. package/build/core/strategies/reorder/BeamSearchReorder.d.ts +9 -0
  118. package/build/core/strategies/reorder/BeamSearchReorder.d.ts.map +1 -0
  119. package/build/core/strategies/reorder/BeamSearchReorder.js +68 -0
  120. package/build/core/strategies/reorder/GeneticReorder.d.ts +9 -0
  121. package/build/core/strategies/reorder/GeneticReorder.d.ts.map +1 -0
  122. package/build/core/strategies/reorder/GeneticReorder.js +43 -0
  123. package/build/core/strategies/reorder/GravityCompaction.d.ts +9 -0
  124. package/build/core/strategies/reorder/GravityCompaction.d.ts.map +1 -0
  125. package/build/core/strategies/reorder/GravityCompaction.js +48 -0
  126. package/build/core/strategies/reorder/GreedyReorder.d.ts +9 -0
  127. package/build/core/strategies/reorder/GreedyReorder.d.ts.map +1 -0
  128. package/build/core/strategies/reorder/GreedyReorder.js +20 -0
  129. package/build/core/strategies/reorder/ReorderStrategy.d.ts +19 -0
  130. package/build/core/strategies/reorder/ReorderStrategy.d.ts.map +1 -0
  131. package/build/core/strategies/reorder/ReorderStrategy.js +1 -0
  132. package/build/core/strategies/reorder/SimulatedAnnealingReorder.d.ts +9 -0
  133. package/build/core/strategies/reorder/SimulatedAnnealingReorder.d.ts.map +1 -0
  134. package/build/core/strategies/reorder/SimulatedAnnealingReorder.js +61 -0
  135. package/build/core/strategies/reorder/anneal_helpers.d.ts +18 -0
  136. package/build/core/strategies/reorder/anneal_helpers.d.ts.map +1 -0
  137. package/build/core/strategies/reorder/anneal_helpers.js +39 -0
  138. package/build/core/strategies/reorder/apply_if_gates_pass.d.ts +12 -0
  139. package/build/core/strategies/reorder/apply_if_gates_pass.d.ts.map +1 -0
  140. package/build/core/strategies/reorder/apply_if_gates_pass.js +19 -0
  141. package/build/core/strategies/reorder/beam_context.d.ts +16 -0
  142. package/build/core/strategies/reorder/beam_context.d.ts.map +1 -0
  143. package/build/core/strategies/reorder/beam_context.js +1 -0
  144. package/build/core/strategies/reorder/genetic/Chromosome.d.ts +39 -0
  145. package/build/core/strategies/reorder/genetic/Chromosome.d.ts.map +1 -0
  146. package/build/core/strategies/reorder/genetic/Chromosome.js +84 -0
  147. package/build/core/strategies/reorder/greedy_improvement.d.ts +12 -0
  148. package/build/core/strategies/reorder/greedy_improvement.d.ts.map +1 -0
  149. package/build/core/strategies/reorder/greedy_improvement.js +63 -0
  150. package/build/core/strategies/reorder/select_beam_expansion_candidates.d.ts +9 -0
  151. package/build/core/strategies/reorder/select_beam_expansion_candidates.d.ts.map +1 -0
  152. package/build/core/strategies/reorder/select_beam_expansion_candidates.js +28 -0
  153. package/build/core/validation/contract/cargo_movement_wire_field_map.d.ts +37 -0
  154. package/build/core/validation/contract/cargo_movement_wire_field_map.d.ts.map +1 -0
  155. package/build/core/validation/contract/cargo_movement_wire_field_map.js +43 -0
  156. package/build/core/validation/contract/cargo_movement_wire_mapper.d.ts +14 -0
  157. package/build/core/validation/contract/cargo_movement_wire_mapper.d.ts.map +1 -0
  158. package/build/core/validation/contract/cargo_movement_wire_mapper.js +34 -0
  159. package/build/core/validation/contract/format_zod_error.d.ts +8 -0
  160. package/build/core/validation/contract/format_zod_error.d.ts.map +1 -0
  161. package/build/core/validation/contract/format_zod_error.js +11 -0
  162. package/build/core/validation/contract/index.d.ts +9 -0
  163. package/build/core/validation/contract/index.d.ts.map +1 -0
  164. package/build/core/validation/contract/index.js +8 -0
  165. package/build/core/validation/contract/map_contract_to_wire_shape.d.ts +3 -0
  166. package/build/core/validation/contract/map_contract_to_wire_shape.d.ts.map +1 -0
  167. package/build/core/validation/contract/map_contract_to_wire_shape.js +42 -0
  168. package/build/core/validation/contract/map_wire_input_to_contract_shape.d.ts +2 -0
  169. package/build/core/validation/contract/map_wire_input_to_contract_shape.d.ts.map +1 -0
  170. package/build/core/validation/contract/map_wire_input_to_contract_shape.js +60 -0
  171. package/build/core/validation/contract/map_wire_item_to_contract.d.ts +12 -0
  172. package/build/core/validation/contract/map_wire_item_to_contract.d.ts.map +1 -0
  173. package/build/core/validation/contract/map_wire_item_to_contract.js +49 -0
  174. package/build/core/validation/contract/parse_stabilizer_input.d.ts +48 -0
  175. package/build/core/validation/contract/parse_stabilizer_input.d.ts.map +1 -0
  176. package/build/core/validation/contract/parse_stabilizer_input.js +26 -0
  177. package/build/core/validation/contract/parse_stabilizer_output.d.ts +50 -0
  178. package/build/core/validation/contract/parse_stabilizer_output.d.ts.map +1 -0
  179. package/build/core/validation/contract/parse_stabilizer_output.js +24 -0
  180. package/build/core/validation/contract/stabilizer_domain_schema.d.ts +101 -0
  181. package/build/core/validation/contract/stabilizer_domain_schema.d.ts.map +1 -0
  182. package/build/core/validation/contract/stabilizer_domain_schema.js +64 -0
  183. package/build/core/validation/contract/stabilizer_input_schema.d.ts +36 -0
  184. package/build/core/validation/contract/stabilizer_input_schema.d.ts.map +1 -0
  185. package/build/core/validation/contract/stabilizer_input_schema.js +11 -0
  186. package/build/core/validation/contract/stabilizer_output_schema.d.ts +76 -0
  187. package/build/core/validation/contract/stabilizer_output_schema.d.ts.map +1 -0
  188. package/build/core/validation/contract/stabilizer_output_schema.js +16 -0
  189. package/build/core/validation/contract/wire_mapper_record_utils.d.ts +34 -0
  190. package/build/core/validation/contract/wire_mapper_record_utils.d.ts.map +1 -0
  191. package/build/core/validation/contract/wire_mapper_record_utils.js +66 -0
  192. package/build/core/validation/schemas/stabilizer_config_schema.d.ts +20 -0
  193. package/build/core/validation/schemas/stabilizer_config_schema.d.ts.map +1 -0
  194. package/build/core/validation/schemas/stabilizer_config_schema.js +17 -0
  195. package/build/core/waypoint/WaypointMode.d.ts +16 -0
  196. package/build/core/waypoint/WaypointMode.d.ts.map +1 -0
  197. package/build/core/waypoint/WaypointMode.js +1 -0
  198. package/build/core/waypoint/build_waypoint_zones.d.ts +21 -0
  199. package/build/core/waypoint/build_waypoint_zones.d.ts.map +1 -0
  200. package/build/core/waypoint/build_waypoint_zones.js +48 -0
  201. package/build/core/waypoint/milkrun_wall_reservation.d.ts +24 -0
  202. package/build/core/waypoint/milkrun_wall_reservation.d.ts.map +1 -0
  203. package/build/core/waypoint/milkrun_wall_reservation.js +57 -0
  204. package/build/core/waypoint/milkrun_wall_reservation_helpers.d.ts +15 -0
  205. package/build/core/waypoint/milkrun_wall_reservation_helpers.d.ts.map +1 -0
  206. package/build/core/waypoint/milkrun_wall_reservation_helpers.js +48 -0
  207. package/build/core/waypoint/milkrun_wall_reservation_types.d.ts +16 -0
  208. package/build/core/waypoint/milkrun_wall_reservation_types.d.ts.map +1 -0
  209. package/build/core/waypoint/milkrun_wall_reservation_types.js +1 -0
  210. package/build/core/waypoint/preserves_waypoint_order.d.ts +24 -0
  211. package/build/core/waypoint/preserves_waypoint_order.d.ts.map +1 -0
  212. package/build/core/waypoint/preserves_waypoint_order.js +49 -0
  213. package/build/core/waypoint/validate_waypoint_ids.d.ts +16 -0
  214. package/build/core/waypoint/validate_waypoint_ids.d.ts.map +1 -0
  215. package/build/core/waypoint/validate_waypoint_ids.js +30 -0
  216. package/build/index.d.ts +27 -0
  217. package/build/index.d.ts.map +1 -0
  218. package/build/index.js +75 -0
  219. package/package.json +51 -0
@@ -0,0 +1,95 @@
1
+ import { try_evaluate_transport_stability } from '../adapters/stability_adapter.js';
2
+ import { compute_reorder_objective } from './compute_reorder_objective.js';
3
+ import { is_axle_load_valid } from '../adapters/axle_adapter.js';
4
+ import { preserves_waypoint_order } from '../waypoint/preserves_waypoint_order.js';
5
+ import { is_layout_milkrun_valid } from '../waypoint/milkrun_wall_reservation.js';
6
+ import { clone_containers } from '../move/apply_move.js';
7
+ /**
8
+ * Evaluates a container layout against all stabilizer gates.
9
+ * @param containers - Container layout to evaluate.
10
+ * @param context - Evaluation context.
11
+ * @returns Evaluation result with gate flags.
12
+ */
13
+ export function evaluate_state(containers, context) {
14
+ const stability = try_evaluate_transport_stability(containers);
15
+ if (!stability) {
16
+ return invalid_evaluation_result();
17
+ }
18
+ const gates = evaluate_gates(containers, context, stability);
19
+ return { stability, objective: gates.objective, ...gates.flags, all_gates_pass: gates.pass };
20
+ }
21
+ /**
22
+ * Evaluates a trial layout cloned from baseline with a move applied elsewhere.
23
+ * @param trial - Trial containers after move.
24
+ * @param context - Evaluation context.
25
+ * @returns Evaluation result.
26
+ */
27
+ export function evaluate_trial_layout(trial, context) {
28
+ return evaluate_state(trial, context);
29
+ }
30
+ /**
31
+ * Builds evaluation context from reorder context.
32
+ * @param context - Reorder context.
33
+ * @returns State evaluation context.
34
+ */
35
+ export function evaluation_context_from_reorder(context) {
36
+ return {
37
+ env: context.env,
38
+ loose_items: context.loose_items,
39
+ config: context.config,
40
+ waypoint_mode: context.waypoint_mode,
41
+ baseline_containers: context.baseline_containers,
42
+ milkrun_reserved_z_bands: context.milkrun_reserved_z_bands
43
+ };
44
+ }
45
+ /**
46
+ * Clones baseline containers for safe trial mutation.
47
+ * @param containers - Source containers.
48
+ * @returns Deep clone.
49
+ */
50
+ export function clone_baseline(containers) {
51
+ return clone_containers(containers);
52
+ }
53
+ function evaluate_gates(containers, context, stability) {
54
+ const objective = compute_reorder_objective(stability, containers, context.loose_items);
55
+ const transport_floor_valid = stability.transport_score >= context.config.transport_stability_floor;
56
+ const axle_valid = is_axle_load_valid({ ...context.env, containers }, context.config.axle_load_margin_percent);
57
+ const waypoint_valid = is_waypoint_order_valid(containers, context);
58
+ const milkrun_valid = is_layout_milkrun_valid(containers, context.milkrun_reserved_z_bands);
59
+ const flags = { transport_floor_valid, axle_valid, waypoint_valid, milkrun_valid };
60
+ return {
61
+ objective,
62
+ pass: transport_floor_valid && axle_valid && waypoint_valid && milkrun_valid,
63
+ flags
64
+ };
65
+ }
66
+ /**
67
+ * Evaluates organization constraint gates without stability or axle checks.
68
+ * @param containers - Container layout to evaluate.
69
+ * @param context - Evaluation context.
70
+ * @returns Waypoint and milkrun gate flags.
71
+ */
72
+ export function evaluate_organization_gates(containers, context) {
73
+ return {
74
+ waypoint_valid: is_waypoint_order_valid(containers, context),
75
+ milkrun_valid: is_layout_milkrun_valid(containers, context.milkrun_reserved_z_bands)
76
+ };
77
+ }
78
+ function is_waypoint_order_valid(containers, context) {
79
+ if (context.waypoint_mode.kind === 'SINGLE_WAYPOINT' ||
80
+ !context.config.preserve_tie_block_organization) {
81
+ return true;
82
+ }
83
+ return preserves_waypoint_order(context.baseline_containers, containers, context.waypoint_mode);
84
+ }
85
+ function invalid_evaluation_result() {
86
+ return {
87
+ stability: { item_scores: [], container_scores: [], transport_score: 0 },
88
+ objective: Number.NEGATIVE_INFINITY,
89
+ transport_floor_valid: false,
90
+ axle_valid: false,
91
+ waypoint_valid: false,
92
+ milkrun_valid: false,
93
+ all_gates_pass: false
94
+ };
95
+ }
@@ -0,0 +1,4 @@
1
+ export declare class AxleCalculationError extends Error {
2
+ constructor(reason: string);
3
+ }
4
+ //# sourceMappingURL=AxleCalculationError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxleCalculationError.d.ts","sourceRoot":"","sources":["../../../src/core/exceptions/AxleCalculationError.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;gBAE/B,MAAM,EAAE,MAAM;CAK7B"}
@@ -0,0 +1,6 @@
1
+ export class AxleCalculationError extends Error {
2
+ constructor(reason) {
3
+ super('Axle load calculation failed: ' + reason);
4
+ this.name = 'AxleCalculationError';
5
+ }
6
+ }
@@ -0,0 +1,4 @@
1
+ export declare class InvalidStabilizerInputError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ //# sourceMappingURL=InvalidStabilizerInputError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvalidStabilizerInputError.d.ts","sourceRoot":"","sources":["../../../src/core/exceptions/InvalidStabilizerInputError.ts"],"names":[],"mappings":"AAAA,qBAAa,2BAA4B,SAAQ,KAAK;gBAEtC,OAAO,EAAE,MAAM;CAK9B"}
@@ -0,0 +1,6 @@
1
+ export class InvalidStabilizerInputError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = 'InvalidStabilizerInputError';
5
+ }
6
+ }
@@ -0,0 +1,4 @@
1
+ export declare class InvalidStabilizerOutputError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ //# sourceMappingURL=InvalidStabilizerOutputError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvalidStabilizerOutputError.d.ts","sourceRoot":"","sources":["../../../src/core/exceptions/InvalidStabilizerOutputError.ts"],"names":[],"mappings":"AAAA,qBAAa,4BAA6B,SAAQ,KAAK;gBAEvC,OAAO,EAAE,MAAM;CAK9B"}
@@ -0,0 +1,6 @@
1
+ export class InvalidStabilizerOutputError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = 'InvalidStabilizerOutputError';
5
+ }
6
+ }
@@ -0,0 +1,4 @@
1
+ export declare class MixedWaypointIdError extends Error {
2
+ constructor(message?: string);
3
+ }
4
+ //# sourceMappingURL=MixedWaypointIdError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MixedWaypointIdError.d.ts","sourceRoot":"","sources":["../../../src/core/exceptions/MixedWaypointIdError.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;gBAE/B,OAAO,SAA+D;CAKrF"}
@@ -0,0 +1,6 @@
1
+ export class MixedWaypointIdError extends Error {
2
+ constructor(message = 'All items must either have waypoint_id or all must omit it') {
3
+ super(message);
4
+ this.name = 'MixedWaypointIdError';
5
+ }
6
+ }
@@ -0,0 +1,4 @@
1
+ export declare class UnknownReorderStrategyError extends Error {
2
+ constructor(strategy: string);
3
+ }
4
+ //# sourceMappingURL=UnknownReorderStrategyError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnknownReorderStrategyError.d.ts","sourceRoot":"","sources":["../../../src/core/exceptions/UnknownReorderStrategyError.ts"],"names":[],"mappings":"AAAA,qBAAa,2BAA4B,SAAQ,KAAK;gBAEtC,QAAQ,EAAE,MAAM;CAK/B"}
@@ -0,0 +1,6 @@
1
+ export class UnknownReorderStrategyError extends Error {
2
+ constructor(strategy) {
3
+ super('Unknown reorder strategy: ' + strategy);
4
+ this.name = 'UnknownReorderStrategyError';
5
+ }
6
+ }
@@ -0,0 +1,10 @@
1
+ import { type StabilizerConfig } from '../validation/schemas/stabilizer_config_schema.js';
2
+ import type { StabilizerCargoState } from '../validation/contract/stabilizer_domain_schema.js';
3
+ /**
4
+ * Reads stabilizer config from cargo-movement config and cargo profile algoritmo maps.
5
+ * @param config - Top-level stabilizer input config object.
6
+ * @param cargo_state - Cargo profile (optional) for merged algoritmo keys.
7
+ * @returns Parsed stabilizer configuration.
8
+ */
9
+ export declare function read_stabilizer_config(config: Record<string, unknown> | undefined, cargo_state?: StabilizerCargoState): StabilizerConfig;
10
+ //# sourceMappingURL=read_stabilizer_config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read_stabilizer_config.d.ts","sourceRoot":"","sources":["../../../src/core/factory/read_stabilizer_config.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,gBAAgB,EACxB,MAAM,mDAAmD,CAAA;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAA;AAG9F;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,WAAW,CAAC,EAAE,oBAAoB,GACnC,gBAAgB,CAYlB"}
@@ -0,0 +1,26 @@
1
+ import { REORDER_STRATEGY } from '../constants/ReorderStrategy.js';
2
+ import { UnknownReorderStrategyError } from '../exceptions/UnknownReorderStrategyError.js';
3
+ import { stabilizer_config_schema } from '../validation/schemas/stabilizer_config_schema.js';
4
+ import { merge_algoritmo_maps, read_raw_stabilizer_config } from './read_stabilizer_config_helpers.js';
5
+ /**
6
+ * Reads stabilizer config from cargo-movement config and cargo profile algoritmo maps.
7
+ * @param config - Top-level stabilizer input config object.
8
+ * @param cargo_state - Cargo profile (optional) for merged algoritmo keys.
9
+ * @returns Parsed stabilizer configuration.
10
+ */
11
+ export function read_stabilizer_config(config, cargo_state) {
12
+ const algoritmo = merge_algoritmo_maps(config, cargo_state);
13
+ const raw = read_raw_stabilizer_config(algoritmo);
14
+ const parsed = stabilizer_config_schema.safeParse(raw);
15
+ if (!parsed.success) {
16
+ throw new UnknownReorderStrategyError(String(raw.reorder_strategy));
17
+ }
18
+ assert_known_strategy(parsed.data.reorder_strategy);
19
+ return parsed.data;
20
+ }
21
+ function assert_known_strategy(strategy) {
22
+ const values = Object.values(REORDER_STRATEGY);
23
+ if (!values.includes(strategy)) {
24
+ throw new UnknownReorderStrategyError(strategy);
25
+ }
26
+ }
@@ -0,0 +1,29 @@
1
+ import type { StabilizerCargoState } from '../validation/contract/stabilizer_domain_schema.js';
2
+ /**
3
+ * Merges root and cargo profile algoritmo maps (profile overrides root).
4
+ * @param config - Root stabilizer input config.
5
+ * @param cargo_state - Cargo profile state.
6
+ * @returns Merged algoritmo map.
7
+ */
8
+ export declare function merge_algoritmo_maps(config: Record<string, unknown> | undefined, cargo_state?: StabilizerCargoState): Record<string, unknown>;
9
+ /**
10
+ * Reads raw stabilizer config fields from merged algoritmo map.
11
+ * @param algoritmo - Merged algoritmo configuration map.
12
+ * @returns Raw config object for schema parsing.
13
+ */
14
+ export declare function read_raw_stabilizer_config(algoritmo: Record<string, unknown>): {
15
+ preserve_tie_block_organization: boolean;
16
+ pin_tie_ratio_blocks: boolean;
17
+ enforce_milkrun_wall_reservation: boolean;
18
+ number_of_wall_to_allocate_from_last_waypoints: number;
19
+ reorder_strategy: string;
20
+ transport_stability_floor: number;
21
+ max_iteration: number;
22
+ genetic_population: number;
23
+ genetic_generations: number;
24
+ genetic_mutation_rate: number;
25
+ beam_width: number;
26
+ beam_top_k: number;
27
+ axle_load_margin_percent: number;
28
+ };
29
+ //# sourceMappingURL=read_stabilizer_config_helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read_stabilizer_config_helpers.d.ts","sourceRoot":"","sources":["../../../src/core/factory/read_stabilizer_config_helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAA;AAK9F;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,WAAW,CAAC,EAAE,oBAAoB,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;EAM5E"}
@@ -0,0 +1,73 @@
1
+ import { REORDER_STRATEGY } from '../constants/ReorderStrategy.js';
2
+ const CONFIG_PREFIX = 'cargo_stabilizer.';
3
+ const MILKRUN_WALL_COUNT_KEY = 'number_of_wall_to_allocate_from_last_waypoints';
4
+ /**
5
+ * Merges root and cargo profile algoritmo maps (profile overrides root).
6
+ * @param config - Root stabilizer input config.
7
+ * @param cargo_state - Cargo profile state.
8
+ * @returns Merged algoritmo map.
9
+ */
10
+ export function merge_algoritmo_maps(config, cargo_state) {
11
+ const root_algoritmo = (config?.algoritmo ?? config ?? {});
12
+ const profile_config = cargo_state?.config;
13
+ const profile_algoritmo = (profile_config?.algoritmo ?? {});
14
+ return { ...root_algoritmo, ...profile_algoritmo };
15
+ }
16
+ /**
17
+ * Reads raw stabilizer config fields from merged algoritmo map.
18
+ * @param algoritmo - Merged algoritmo configuration map.
19
+ * @returns Raw config object for schema parsing.
20
+ */
21
+ export function read_raw_stabilizer_config(algoritmo) {
22
+ return {
23
+ ...read_search_raw(algoritmo),
24
+ ...read_organization_raw(algoritmo)
25
+ };
26
+ }
27
+ function read_search_raw(algoritmo) {
28
+ return {
29
+ reorder_strategy: read_config_string(algoritmo, 'reorder_strategy', REORDER_STRATEGY.GRAVITY),
30
+ transport_stability_floor: read_config_number(algoritmo, 'transport_stability_floor', 0),
31
+ max_iteration: read_config_number(algoritmo, 'max_iteration', 10),
32
+ genetic_population: read_config_number(algoritmo, 'genetic_population', 30),
33
+ genetic_generations: read_config_number(algoritmo, 'genetic_generations', 50),
34
+ genetic_mutation_rate: read_config_number(algoritmo, 'genetic_mutation_rate', 0.15),
35
+ beam_width: read_config_number(algoritmo, 'beam_width', 5),
36
+ beam_top_k: read_config_number(algoritmo, 'beam_top_k', 3),
37
+ axle_load_margin_percent: read_config_number(algoritmo, 'folga_de_peso_nos_eixos', 0)
38
+ };
39
+ }
40
+ function read_organization_raw(algoritmo) {
41
+ return {
42
+ preserve_tie_block_organization: read_config_boolean(algoritmo, 'preserve_tie_block_organization', true),
43
+ pin_tie_ratio_blocks: read_config_boolean(algoritmo, 'pin_tie_ratio_blocks', false),
44
+ enforce_milkrun_wall_reservation: read_config_boolean(algoritmo, 'enforce_milkrun_wall_reservation', false),
45
+ number_of_wall_to_allocate_from_last_waypoints: read_milkrun_wall_count(algoritmo)
46
+ };
47
+ }
48
+ function read_config_string(algoritmo, key, default_value) {
49
+ const full_key = CONFIG_PREFIX + key;
50
+ const value = algoritmo[full_key] ?? algoritmo[key];
51
+ return typeof value === 'string' ? value : default_value;
52
+ }
53
+ function read_config_number(algoritmo, key, default_value) {
54
+ const full_key = CONFIG_PREFIX + key;
55
+ const value = algoritmo[full_key] ?? algoritmo[key];
56
+ return typeof value === 'number' ? value : default_value;
57
+ }
58
+ function read_config_boolean(algoritmo, key, default_value) {
59
+ const full_key = CONFIG_PREFIX + key;
60
+ const value = algoritmo[full_key] ?? algoritmo[key];
61
+ return typeof value === 'boolean' ? value : default_value;
62
+ }
63
+ function read_milkrun_wall_count(algoritmo) {
64
+ const value = algoritmo[MILKRUN_WALL_COUNT_KEY];
65
+ if (typeof value === 'number' && Number.isFinite(value)) {
66
+ return Math.max(0, Math.trunc(value));
67
+ }
68
+ if (typeof value === 'string') {
69
+ const parsed = Number.parseInt(value, 10);
70
+ return Number.isFinite(parsed) ? Math.max(0, parsed) : 0;
71
+ }
72
+ return 0;
73
+ }
@@ -0,0 +1,9 @@
1
+ import type { StabilizerConfig } from '../validation/schemas/stabilizer_config_schema.js';
2
+ import type { ReorderStrategy } from '../strategies/reorder/ReorderStrategy.js';
3
+ /**
4
+ * Creates a reorder strategy implementation from config.
5
+ * @param config - Parsed stabilizer config.
6
+ * @returns Strategy instance.
7
+ */
8
+ export declare function create_reorder_strategy(config: StabilizerConfig): ReorderStrategy;
9
+ //# sourceMappingURL=strategy_factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy_factory.d.ts","sourceRoot":"","sources":["../../../src/core/factory/strategy_factory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAA;AAQ/E;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,eAAe,CAmBjF"}
@@ -0,0 +1,29 @@
1
+ import { REORDER_STRATEGY } from '../constants/ReorderStrategy.js';
2
+ import { GravityCompaction } from '../strategies/reorder/GravityCompaction.js';
3
+ import { GreedyReorder } from '../strategies/reorder/GreedyReorder.js';
4
+ import { BeamSearchReorder } from '../strategies/reorder/BeamSearchReorder.js';
5
+ import { SimulatedAnnealingReorder } from '../strategies/reorder/SimulatedAnnealingReorder.js';
6
+ import { GeneticReorder } from '../strategies/reorder/GeneticReorder.js';
7
+ import { UnknownReorderStrategyError } from '../exceptions/UnknownReorderStrategyError.js';
8
+ /**
9
+ * Creates a reorder strategy implementation from config.
10
+ * @param config - Parsed stabilizer config.
11
+ * @returns Strategy instance.
12
+ */
13
+ export function create_reorder_strategy(config) {
14
+ const strategy = config.reorder_strategy;
15
+ switch (strategy) {
16
+ case REORDER_STRATEGY.GRAVITY:
17
+ return new GravityCompaction();
18
+ case REORDER_STRATEGY.GREEDY:
19
+ return new GreedyReorder();
20
+ case REORDER_STRATEGY.BEAM_SEARCH:
21
+ return new BeamSearchReorder();
22
+ case REORDER_STRATEGY.SIMULATED_ANNEALING:
23
+ return new SimulatedAnnealingReorder();
24
+ case REORDER_STRATEGY.GENETIC:
25
+ return new GeneticReorder();
26
+ default:
27
+ throw new UnknownReorderStrategyError(String(strategy));
28
+ }
29
+ }
@@ -0,0 +1,18 @@
1
+ import type { StabilizerItem } from '../validation/contract/stabilizer_domain_schema.js';
2
+ import type { LooseItemRef } from './loose_item_filter.js';
3
+ /**
4
+ * Collects items the stabilizer may move.
5
+ * @param containers - Container list from env.
6
+ * @param pin_tie_ratio_blocks - When true, skip 3_2/2_3 groups.
7
+ * @returns Movable item references with container index.
8
+ */
9
+ export declare function collect_movable_items(containers: {
10
+ items: StabilizerItem[];
11
+ }[], pin_tie_ratio_blocks: boolean): LooseItemRef[];
12
+ /**
13
+ * @param item - Item record.
14
+ * @param tie_ratio_group_ids - Group ids that contain a 3_2/2_3 member.
15
+ * @returns True when the item belongs to a pinned tie-ratio group.
16
+ */
17
+ export declare function is_tie_ratio_block_item(item: StabilizerItem, tie_ratio_group_ids: Set<string>): boolean;
18
+ //# sourceMappingURL=collect_movable_items.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect_movable_items.d.ts","sourceRoot":"","sources":["../../../src/core/filters/collect_movable_items.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAA;AAExF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACjC,UAAU,EAAE;IAAE,KAAK,EAAE,cAAc,EAAE,CAAA;CAAE,EAAE,EACzC,oBAAoB,EAAE,OAAO,GAC9B,YAAY,EAAE,CAMhB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACnC,IAAI,EAAE,cAAc,EACpB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,GACjC,OAAO,CAOT"}
@@ -0,0 +1,72 @@
1
+ import { TIE_RATIO_ORIENTATION } from '../constants/TieRatioOrientation.js';
2
+ /**
3
+ * Collects items the stabilizer may move.
4
+ * @param containers - Container list from env.
5
+ * @param pin_tie_ratio_blocks - When true, skip 3_2/2_3 groups.
6
+ * @returns Movable item references with container index.
7
+ */
8
+ export function collect_movable_items(containers, pin_tie_ratio_blocks) {
9
+ const pinned_groups = pin_tie_ratio_blocks
10
+ ? collect_tie_ratio_group_ids(flatten_container_items(containers))
11
+ : new Set();
12
+ return collect_items_except_pinned(containers, pinned_groups);
13
+ }
14
+ /**
15
+ * @param item - Item record.
16
+ * @param tie_ratio_group_ids - Group ids that contain a 3_2/2_3 member.
17
+ * @returns True when the item belongs to a pinned tie-ratio group.
18
+ */
19
+ export function is_tie_ratio_block_item(item, tie_ratio_group_ids) {
20
+ if (item.group_id == null) {
21
+ return false;
22
+ }
23
+ return tie_ratio_group_ids.has(item.group_id);
24
+ }
25
+ function collect_tie_ratio_group_ids(items) {
26
+ const group_ids = new Set();
27
+ for (const item of items) {
28
+ if (item.group_id == null) {
29
+ continue;
30
+ }
31
+ if (is_tie_ratio_orientation(read_tie_ratio_orientation(item))) {
32
+ group_ids.add(item.group_id);
33
+ }
34
+ }
35
+ return group_ids;
36
+ }
37
+ function collect_items_except_pinned(containers, pinned_groups) {
38
+ const movable = [];
39
+ for (let container_index = 0; container_index < containers.length; container_index++) {
40
+ movable.push(...collect_container_movable_items(containers[container_index].items, container_index, pinned_groups));
41
+ }
42
+ return movable;
43
+ }
44
+ function collect_container_movable_items(items, container_index, pinned_groups) {
45
+ const movable = [];
46
+ for (const item of items) {
47
+ if (is_tie_ratio_block_item(item, pinned_groups)) {
48
+ continue;
49
+ }
50
+ movable.push({
51
+ item_id: item.item_id,
52
+ container_index,
53
+ item
54
+ });
55
+ }
56
+ return movable;
57
+ }
58
+ function flatten_container_items(containers) {
59
+ const items = [];
60
+ for (const container of containers) {
61
+ items.push(...container.items);
62
+ }
63
+ return items;
64
+ }
65
+ function read_tie_ratio_orientation(item) {
66
+ const orientation = item.attributes?.tie_ratio_orientation;
67
+ return typeof orientation === 'string' ? orientation : undefined;
68
+ }
69
+ function is_tie_ratio_orientation(orientation) {
70
+ return orientation === TIE_RATIO_ORIENTATION.THREE_TWO
71
+ || orientation === TIE_RATIO_ORIENTATION.TWO_THREE;
72
+ }
@@ -0,0 +1,20 @@
1
+ import type { StabilizerItem } from '../validation/contract/stabilizer_domain_schema.js';
2
+ export interface LooseItemRef {
3
+ item_id: string;
4
+ container_index: number;
5
+ item: StabilizerItem;
6
+ }
7
+ /**
8
+ * @param item - Item record from cargo_state.
9
+ * @returns True when item is loose (no group_id).
10
+ */
11
+ export declare function is_loose_item(item: StabilizerItem): boolean;
12
+ /**
13
+ * Collects loose items across all containers in one env.
14
+ * @param containers - Container list from env.
15
+ * @returns Loose item references with container index.
16
+ */
17
+ export declare function collect_loose_items(containers: {
18
+ items: StabilizerItem[];
19
+ }[]): LooseItemRef[];
20
+ //# sourceMappingURL=loose_item_filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loose_item_filter.d.ts","sourceRoot":"","sources":["../../../src/core/filters/loose_item_filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAA;AAExF,MAAM,WAAW,YAAY;IAEzB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,cAAc,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAG3D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,UAAU,EAAE;IAAE,KAAK,EAAE,cAAc,EAAE,CAAA;CAAE,EAAE,GAC1C,YAAY,EAAE,CAqBhB"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @param item - Item record from cargo_state.
3
+ * @returns True when item is loose (no group_id).
4
+ */
5
+ export function is_loose_item(item) {
6
+ return item.group_id === null || item.group_id === undefined;
7
+ }
8
+ /**
9
+ * Collects loose items across all containers in one env.
10
+ * @param containers - Container list from env.
11
+ * @returns Loose item references with container index.
12
+ */
13
+ export function collect_loose_items(containers) {
14
+ const loose_items = [];
15
+ containers.forEach((container, container_index) => {
16
+ for (const item of container.items) {
17
+ if (!is_loose_item(item)) {
18
+ continue;
19
+ }
20
+ loose_items.push({
21
+ item_id: item.item_id,
22
+ container_index,
23
+ item
24
+ });
25
+ }
26
+ });
27
+ return loose_items;
28
+ }
@@ -0,0 +1,48 @@
1
+ import type { StabilizerItem } from '../validation/contract/stabilizer_domain_schema.js';
2
+ export interface AxisAlignedBox {
3
+ x: number;
4
+ y: number;
5
+ z: number;
6
+ w: number;
7
+ h: number;
8
+ d: number;
9
+ }
10
+ /**
11
+ * @param item - Cargo item with position and dimensions.
12
+ * @returns Axis-aligned bounding box.
13
+ */
14
+ export declare function item_to_box(item: StabilizerItem): AxisAlignedBox;
15
+ /**
16
+ * @param left - First box.
17
+ * @param right - Second box.
18
+ * @returns True when boxes overlap in 3D.
19
+ */
20
+ export declare function boxes_overlap(left: AxisAlignedBox, right: AxisAlignedBox): boolean;
21
+ /**
22
+ * @param candidate - Candidate placement box.
23
+ * @param others - Existing item boxes to avoid.
24
+ * @returns True when candidate overlaps any other box.
25
+ */
26
+ export declare function has_overlap(candidate: AxisAlignedBox, others: AxisAlignedBox[]): boolean;
27
+ /**
28
+ * @param candidate - Candidate box.
29
+ * @returns True when candidate rests on container floor.
30
+ */
31
+ export declare function is_on_floor(candidate: AxisAlignedBox): boolean;
32
+ /**
33
+ * @param candidate - Candidate placement box.
34
+ * @param container - Container dimensions.
35
+ * @returns True when candidate fits inside container bounds.
36
+ */
37
+ export declare function is_inside_container(candidate: AxisAlignedBox, container: {
38
+ width: number;
39
+ height: number;
40
+ length: number;
41
+ }): boolean;
42
+ /**
43
+ * @param candidate - Candidate placement box.
44
+ * @param supporters - Existing item boxes (excluding candidate).
45
+ * @returns True when bottom face is on floor or supporter tops.
46
+ */
47
+ export declare function is_fully_supported(candidate: AxisAlignedBox, supporters: AxisAlignedBox[]): boolean;
48
+ //# sourceMappingURL=box_geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box_geometry.d.ts","sourceRoot":"","sources":["../../../src/core/geometry/box_geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAA;AAExF,MAAM,WAAW,cAAc;IAE3B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACZ;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAUhE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAMlF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAGxF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAG9D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAeT;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAUnG"}