@lilaquadrat/studio 12.2.0 → 13.0.0

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 (66) hide show
  1. package/lib/src/helpers/shiftPlanAllocation.d.ts +53 -0
  2. package/lib/src/helpers/shiftPlanAllocation.js +110 -0
  3. package/lib/src/helpers/shiftPlanAllocation.js.map +1 -0
  4. package/lib/src/helpers/shiftPlanCoverage.d.ts +2 -0
  5. package/lib/src/helpers/shiftPlanCoverage.js +4 -0
  6. package/lib/src/helpers/shiftPlanCoverage.js.map +1 -0
  7. package/lib/src/helpers/shiftPlanningTime.js +26 -2
  8. package/lib/src/helpers/shiftPlanningTime.js.map +1 -1
  9. package/lib/src/helpers/shiftPlanningValidation.d.ts +8 -2
  10. package/lib/src/helpers/shiftPlanningValidation.js +16 -0
  11. package/lib/src/helpers/shiftPlanningValidation.js.map +1 -1
  12. package/lib/src/helpers/structureMatch.js +3 -1
  13. package/lib/src/helpers/structureMatch.js.map +1 -1
  14. package/lib/src/interfaces/ListPlanningParticipant.d.ts +17 -0
  15. package/lib/src/interfaces/ListPlanningParticipant.js +2 -0
  16. package/lib/src/interfaces/ListPlanningParticipant.js.map +1 -0
  17. package/lib/src/interfaces/PlanCoveragePreparation.d.ts +17 -0
  18. package/lib/src/interfaces/PlanCoveragePreparation.js +2 -0
  19. package/lib/src/interfaces/PlanCoveragePreparation.js.map +1 -0
  20. package/lib/src/interfaces/PlanningParticipantsResult.d.ts +12 -0
  21. package/lib/src/interfaces/PlanningParticipantsResult.js +2 -0
  22. package/lib/src/interfaces/PlanningParticipantsResult.js.map +1 -0
  23. package/lib/src/interfaces/ShiftAutofillResult.d.ts +6 -0
  24. package/lib/src/interfaces/ShiftAutofillResult.js +2 -0
  25. package/lib/src/interfaces/ShiftAutofillResult.js.map +1 -0
  26. package/lib/src/interfaces/ShiftReportContextOptions.d.ts +9 -0
  27. package/lib/src/interfaces/ShiftReportContextOptions.js +2 -0
  28. package/lib/src/interfaces/ShiftReportContextOptions.js.map +1 -0
  29. package/lib/src/models/lists.model.js +2 -1
  30. package/lib/src/models/lists.model.js.map +1 -1
  31. package/lib/src/services/customers.service.d.ts +2 -2
  32. package/lib/src/services/customers.service.js +2 -2
  33. package/lib/src/services/customers.service.js.map +1 -1
  34. package/lib/src/services/listParticipants.service.d.ts +45 -8
  35. package/lib/src/services/listParticipants.service.js +320 -39
  36. package/lib/src/services/listParticipants.service.js.map +1 -1
  37. package/lib/src/services/lists.service.d.ts +2 -0
  38. package/lib/src/services/lists.service.js +28 -1
  39. package/lib/src/services/lists.service.js.map +1 -1
  40. package/lib/src/services/shiftPlanDays.service.d.ts +2 -0
  41. package/lib/src/services/shiftPlanDays.service.js +12 -0
  42. package/lib/src/services/shiftPlanDays.service.js.map +1 -1
  43. package/lib/src/services/shiftPlans.service.d.ts +2 -2
  44. package/lib/src/services/shiftPlans.service.js +67 -9
  45. package/lib/src/services/shiftPlans.service.js.map +1 -1
  46. package/lib/src/services/shifts.service.d.ts +20 -1
  47. package/lib/src/services/shifts.service.js +180 -26
  48. package/lib/src/services/shifts.service.js.map +1 -1
  49. package/lib/tests/listParticipantsPlanning.spec.js +406 -10
  50. package/lib/tests/listParticipantsPlanning.spec.js.map +1 -1
  51. package/lib/tests/listsServiceCreateExternalProducts.spec.js +18 -0
  52. package/lib/tests/listsServiceCreateExternalProducts.spec.js.map +1 -1
  53. package/lib/tests/shiftPlanCoverage.spec.d.ts +1 -0
  54. package/lib/tests/shiftPlanCoverage.spec.js +189 -0
  55. package/lib/tests/shiftPlanCoverage.spec.js.map +1 -0
  56. package/lib/tests/shiftPlanning.spec.js +430 -38
  57. package/lib/tests/shiftPlanning.spec.js.map +1 -1
  58. package/lib/tests/shiftPlanningTime.spec.d.ts +1 -0
  59. package/lib/tests/shiftPlanningTime.spec.js +90 -0
  60. package/lib/tests/shiftPlanningTime.spec.js.map +1 -0
  61. package/lib/tests/shiftPlansList.spec.d.ts +1 -0
  62. package/lib/tests/shiftPlansList.spec.js +161 -0
  63. package/lib/tests/shiftPlansList.spec.js.map +1 -0
  64. package/lib/tests/structureMatch.spec.js +42 -0
  65. package/lib/tests/structureMatch.spec.js.map +1 -1
  66. package/package.json +2 -2
@@ -1,6 +1,7 @@
1
1
  import { ObjectId, WithId } from 'mongodb';
2
- import type { MemberShift, MemberShiftFilters, Shift, ShiftAssignmentsInput, ShiftCreateInput, ShiftInput, ShiftPlanDay, ShiftPlanningFilters, ShiftPlanningPage, ShiftResponse, ShiftPlanningProjectOptions } from '@lilaquadrat/interfaces';
2
+ import type { MemberShift, MemberShiftFilters, PlanningScope, Shift, ShiftAssignmentBreak, ShiftAssignmentsInput, ShiftCreateInput, ShiftInput, ShiftPlanDay, ShiftPlanningFilters, ShiftPlanningPage, ShiftResponse, ShiftPlanningProjectOptions } from '@lilaquadrat/interfaces';
3
3
  import Immutable from '../Immutable.class.js';
4
+ import type { ShiftAutofillResult } from '../interfaces/ShiftAutofillResult.js';
4
5
  /** Scheduling owns employee allocation; work areas and plans only supply reusable identity/configuration. */
5
6
  export declare class ShiftsService extends Immutable<Shift> {
6
7
  model: import("../classes/shiftPlanningModel.class.js").default<Shift>;
@@ -10,11 +11,28 @@ export declare class ShiftsService extends Immutable<Shift> {
10
11
  createShift(plan: ObjectId, input: ShiftCreateInput, options: ShiftPlanningProjectOptions): Promise<ShiftResponse>;
11
12
  singleShift(plan: ObjectId, shift: ObjectId, options: ShiftPlanningProjectOptions): Promise<ShiftResponse | null>;
12
13
  listShifts(plan: ObjectId, filters: ShiftPlanningFilters, options: ShiftPlanningProjectOptions): Promise<ShiftPlanningPage<ShiftResponse>>;
14
+ shiftsForPlan(plan: ObjectId, options: ShiftPlanningProjectOptions): Promise<ShiftResponse[]>;
13
15
  /** Absolute break times survive edits; moving a shift outside them must be resolved explicitly by the planner. */
14
16
  changeShift(plan: ObjectId, shift: ObjectId, input: ShiftInput, options: ShiftPlanningProjectOptions): Promise<ShiftResponse>;
15
17
  removeShift(plan: ObjectId, shift: ObjectId, options: ShiftPlanningProjectOptions): Promise<void>;
16
18
  replaceAssignments(plan: ObjectId, shift: ObjectId, input: ShiftAssignmentsInput, options: ShiftPlanningProjectOptions): Promise<ShiftResponse>;
19
+ /** Suggestions use the manual assignment rules without applying the proposed allocation. */
20
+ autofillShift(plan: ObjectId, shift: ObjectId, options: ShiftPlanningProjectOptions, breaks?: ShiftAssignmentBreak[]): Promise<ShiftAutofillResult>;
21
+ /**
22
+ * Same allocation and rules as autofillShift, but resolves the suggestion into assignments and
23
+ * returns the recomputed shift, so a caller can apply it without a second round trip. Nothing is
24
+ * persisted; applying the result still goes through the normal assignment validation.
25
+ */
26
+ autofillShiftReport(plan: ObjectId, shift: ObjectId, options: ShiftPlanningProjectOptions, breaks?: ShiftAssignmentBreak[]): Promise<ShiftResponse>;
27
+ /**
28
+ * Rule-checked suggestions for every under-staffed shift in a plan, day, work area or single shift.
29
+ * Shifts are filled greedily in start order against one shared allocation, so a person already
30
+ * picked for a colliding shift is not picked again; other plans act only as conflict neighbours.
31
+ * Nothing is persisted; applying a result still goes through the normal assignment validation.
32
+ */
33
+ autofill(scope: PlanningScope, options: ShiftPlanningProjectOptions, breaks?: ShiftAssignmentBreak[]): Promise<ShiftResponse[]>;
17
34
  hasWorkAreaAssignments(area: ObjectId, options: ShiftPlanningProjectOptions): Promise<boolean>;
35
+ hasPlanAssignments(plan: ObjectId, options: ShiftPlanningProjectOptions): Promise<boolean>;
18
36
  /** A plan cannot change its time zone while existing shifts would no longer match their day's local date. */
19
37
  assertPlanTimeZone(plan: ObjectId, timeZone: string, options: ShiftPlanningProjectOptions): Promise<void>;
20
38
  hasDayShifts(day: ObjectId, options: ShiftPlanningProjectOptions): Promise<boolean>;
@@ -23,6 +41,7 @@ export declare class ShiftsService extends Immutable<Shift> {
23
41
  myShifts(customer: ObjectId, filters: MemberShiftFilters, options: ShiftPlanningProjectOptions): Promise<ShiftPlanningPage<MemberShift>>;
24
42
  private reportContext;
25
43
  private reports;
44
+ private scheduleNeighbors;
26
45
  private validateSchedule;
27
46
  }
28
47
  declare const _default: ShiftsService;
@@ -10,8 +10,9 @@ import AbsencesService from './employeeAbsences.service.js';
10
10
  import ListsService from './lists.service.js';
11
11
  import ParticipantsService from './listParticipants.service.js';
12
12
  import CustomersService from './customers.service.js';
13
- import { interval, localDate, maximumShiftMilliseconds, normalizeBreaks, planningValidation } from '../helpers/shiftPlanningTime.js';
14
- import { assertUniquePlanningIds, equalAssignment, equalAssignmentSets, equalBreaks, planningIntervalFilter, planningPage, planningPagination, violationIdentity, } from '../helpers/shiftPlanningValidation.js';
13
+ import { effectivePolicy, interval, localDate, maximumShiftMilliseconds, normalizeBreaks, planningValidation } from '../helpers/shiftPlanningTime.js';
14
+ import { assertUniquePlanningIds, equalAssignmentSets, equalBreaks, newScheduleViolations, planningIntervalFilter, planningPage, planningPagination, } from '../helpers/shiftPlanningValidation.js';
15
+ import { allocateShiftFills } from '../helpers/shiftPlanAllocation.js';
15
16
  import { boundedPlanningInstant, reportShift, scheduleWindowMilliseconds, unavailableParticipantStates } from '../helpers/shiftPlanningReports.js';
16
17
  /** Scheduling owns employee allocation; work areas and plans only supply reusable identity/configuration. */
17
18
  export class ShiftsService extends Immutable {
@@ -93,6 +94,11 @@ export class ShiftsService extends Immutable {
93
94
  const documents = await this.model.db.find(query).sort({ start: 1, _id: 1 }).skip(skip).limit(limit).toArray();
94
95
  return planningPage(await this.reports(documents, options, undefined, undefined, plan), all, site, limit);
95
96
  }
97
+ async shiftsForPlan(plan, options) {
98
+ await ShiftPlansService.planForScheduling(plan, options);
99
+ const documents = await this.model.db.find({ company: options.company, project: options.project, plan }).sort({ start: 1, _id: 1 }).toArray();
100
+ return this.reports(documents, options, undefined, undefined, plan);
101
+ }
96
102
  /** Absolute break times survive edits; moving a shift outside them must be resolved explicitly by the planner. */
97
103
  async changeShift(plan, shift, input, options) {
98
104
  const previous = await this.document(plan, shift, options);
@@ -123,9 +129,155 @@ export class ShiftsService extends Immutable {
123
129
  }
124
130
  return (await this.singleShift(plan, shift, options));
125
131
  }
132
+ /** Suggestions use the manual assignment rules without applying the proposed allocation. */
133
+ async autofillShift(plan, shift, options, breaks = []) {
134
+ const configuration = await ShiftPlansService.planForScheduling(plan, options);
135
+ const previous = await this.model.db.findOne({ _id: shift, company: options.company, project: options.project, plan });
136
+ if (!previous)
137
+ throw new ImmutableError('SHIFT_NOT_FOUND');
138
+ // Existing attention items belong to the planner; autofill must not silently remove their assignments.
139
+ const result = { shift: previous._id, users: previous.assignments.map((assignment) => assignment.participant) };
140
+ // An absent staffing target is not permission to fill the shift with the entire employee pool.
141
+ const requiredPeople = previous.requiredPeople ?? 0;
142
+ if (requiredPeople <= previous.assignments.length)
143
+ return result;
144
+ // A plan may have changed lists since this shift was saved; its current configuration is authoritative.
145
+ const list = configuration.list;
146
+ if (!list)
147
+ return result;
148
+ const target = { ...previous, list };
149
+ const categories = configuration.workAreaCategories?.find((binding) => binding.area.equals(target.area))?.categoryIds;
150
+ const state = configuration.defaultParticipantState ? [configuration.defaultParticipantState] : undefined;
151
+ // The pool is ranked by qualification, then raw score; normalized stages would merge different scores.
152
+ // Inspect every candidate because scheduling conflicts can rule out an entire page of higher-ranked people.
153
+ const pool = await ParticipantsService.planningParticipants(list, { level: 'shift', shift: target._id, workArea: target.area }, state, categories, undefined, {
154
+ ...options, skip: 0, limit: Number.MAX_SAFE_INTEGER, sort: { _id: 1 },
155
+ });
156
+ // Multiple list entries can identify the same person, including someone already assigned to this shift.
157
+ const seenCustomers = new Set(previous.assignments.map((assignment) => assignment.customer.toHexString()));
158
+ const candidates = [];
159
+ for (const candidate of pool.data) {
160
+ const customer = candidate.user?._id;
161
+ if (!customer || unavailableParticipantStates.has(candidate.state) || seenCustomers.has(customer.toHexString()))
162
+ continue;
163
+ seenCustomers.add(customer.toHexString());
164
+ // Only supplied breaks are considered; inventing break times would leave callers unable to apply an ID-only result.
165
+ candidates.push(normalizeBreaks(target, { participant: candidate._id, customer, breaks }));
166
+ }
167
+ if (!candidates.length)
168
+ return result;
169
+ // The probe expands the shared read scope to all possible picks; it is never an actual allocation.
170
+ // Loading this context once avoids database queries inside the candidate loop.
171
+ const probe = { ...target, assignments: [...previous.assignments, ...candidates] };
172
+ const neighbors = await this.scheduleNeighbors(probe, options, previous);
173
+ const otherNeighbors = neighbors.filter((neighbor) => !neighbor._id.equals(target._id));
174
+ const context = await this.reportContext([...otherNeighbors, probe], options);
175
+ // Missing or incompatible settings must not silently disable scheduling checks.
176
+ if (!effectivePolicy(context.settings, configuration.settingsOverrides))
177
+ throw new ImmutableError('SHIFT_PLANNING_SETTINGS_NOT_CONFIGURED');
178
+ // Persisted violation severities are the baseline, so existing attention items need not block safe additions.
179
+ // Working-time totals are unnecessary here; only rule violations influence selection.
180
+ const baseline = new Map();
181
+ for (const neighbor of neighbors)
182
+ reportShift(neighbor, context, false, baseline);
183
+ const otherSchedules = context.schedules.filter((scheduled) => !scheduled._id.equals(target._id));
184
+ const assignments = [...previous.assignments];
185
+ for (const candidate of candidates) {
186
+ if (assignments.length >= requiredPeople)
187
+ break;
188
+ const proposed = { ...target, assignments: [...assignments, candidate] };
189
+ // Replace the shift only in memory so neighboring plans can reveal new rest or hours violations.
190
+ const proposedContext = { ...context, schedules: [...otherSchedules, proposed] };
191
+ const updatedEvidence = new Map();
192
+ const updated = [...otherNeighbors, proposed]
193
+ .map((document) => reportShift(document, proposedContext, false, updatedEvidence));
194
+ // Availability may have changed between the pool query and the later context reads.
195
+ if (updated[updated.length - 1].unavailableParticipantIds.includes(candidate.participant.toHexString()))
196
+ continue;
197
+ if (newScheduleViolations(proposed, previous, updated, baseline, updatedEvidence).length)
198
+ continue;
199
+ assignments.push(candidate);
200
+ result.users.push(candidate.participant);
201
+ }
202
+ // A partial result is intentional, not a reservation; applying it later still requires assignment validation.
203
+ return result;
204
+ }
205
+ /**
206
+ * Same allocation and rules as autofillShift, but resolves the suggestion into assignments and
207
+ * returns the recomputed shift, so a caller can apply it without a second round trip. Nothing is
208
+ * persisted; applying the result still goes through the normal assignment validation.
209
+ */
210
+ async autofillShiftReport(plan, shift, options, breaks = []) {
211
+ const result = await this.autofillShift(plan, shift, options, breaks);
212
+ const previous = await this.document(plan, shift, options);
213
+ const configuration = await ShiftPlansService.planForScheduling(plan, options);
214
+ // The plan owns the employee list; a shift persisted before the plan was linked must resolve against it.
215
+ const target = { ...previous, ...(configuration.list ? { list: configuration.list } : {}) };
216
+ const assignments = await this.resolvedAssignments(result.users.map((participant) => ({ participant, breaks })), target, options, previous);
217
+ const proposal = { ...target, assignments };
218
+ return (await this.reports([proposal], options, proposal))[0];
219
+ }
220
+ /**
221
+ * Rule-checked suggestions for every under-staffed shift in a plan, day, work area or single shift.
222
+ * Shifts are filled greedily in start order against one shared allocation, so a person already
223
+ * picked for a colliding shift is not picked again; other plans act only as conflict neighbours.
224
+ * Nothing is persisted; applying a result still goes through the normal assignment validation.
225
+ */
226
+ async autofill(scope, options, breaks = []) {
227
+ if (!scope.plan)
228
+ return [];
229
+ const configuration = await ShiftPlansService.planForScheduling(scope.plan, options);
230
+ const list = configuration.list;
231
+ if (!list)
232
+ return [];
233
+ const preparation = await ParticipantsService.prepareShiftPlanning(list, scope, options);
234
+ if (!preparation || !preparation.targets.length)
235
+ return [];
236
+ // The pool arrives ranked; carrying breaks and keeping one entry per person matches a manual pick.
237
+ const targets = preparation.targets.map((target) => {
238
+ const shift = { ...target.shift, list };
239
+ const seen = new Set(shift.assignments.map((assignment) => assignment.customer.toHexString()));
240
+ const candidates = [];
241
+ for (const candidate of target.candidates) {
242
+ const customer = candidate.customer.toHexString();
243
+ if (seen.has(customer))
244
+ continue;
245
+ seen.add(customer);
246
+ candidates.push({ ...candidate, breaks: normalizeBreaks(shift, { participant: candidate.participant, customer: candidate.customer, breaks }).breaks });
247
+ }
248
+ return { ...target, shift, candidates };
249
+ });
250
+ // The probe widens the shared context read to every possible pick; it is never an allocation.
251
+ const probes = targets.map((target) => ({
252
+ ...target.shift,
253
+ assignments: [...target.shift.assignments, ...target.candidates.map((candidate) => ({ participant: candidate.participant, customer: candidate.customer, breaks: [] }))],
254
+ }));
255
+ const customerIds = [...new Map(probes.flatMap((probe) => probe.assignments.map((assignment) => [assignment.customer.toHexString(), assignment.customer]))).values()];
256
+ const starts = probes.map((probe) => Date.parse(probe.start));
257
+ const ends = probes.map((probe) => Date.parse(probe.end));
258
+ // Only this scope's shifts may be filled, but conflicts in every plan are compared, as manual edits do.
259
+ const neighbours = await this.model.db.find({ company: options.company, 'assignments.customer': { $in: customerIds },
260
+ end: { $gt: boundedPlanningInstant(Math.min(...starts) - scheduleWindowMilliseconds) },
261
+ start: { $lt: boundedPlanningInstant(Math.max(...ends) + scheduleWindowMilliseconds) },
262
+ }).toArray();
263
+ // The neighbours already cover the complete rule window; expanding around them would grow it again.
264
+ const context = await this.reportContext([...neighbours, ...probes], options, { schedules: neighbours, preparation });
265
+ // Missing or incompatible settings must not silently disable scheduling checks.
266
+ if (!effectivePolicy(context.settings, configuration.settingsOverrides))
267
+ throw new ImmutableError('SHIFT_PLANNING_SETTINGS_NOT_CONFIGURED');
268
+ const schedules = [...new Map([...context.schedules, ...targets.map((target) => target.shift)].map((shift) => [shift._id.toHexString(), shift])).values()];
269
+ const allocation = allocateShiftFills(schedules, targets, context, { matchingGate: false, breaksBlocking: true, stopOnUnfillable: false });
270
+ // Report against the finished allocation so overlaps between the suggested shifts are visible.
271
+ const filled = [...new Map([...context.schedules, ...allocation.shifts].map((shift) => [shift._id.toHexString(), shift])).values()];
272
+ return allocation.shifts.map((shift) => reportShift(shift, { ...context, schedules: filled }));
273
+ }
126
274
  async hasWorkAreaAssignments(area, options) {
127
275
  return await this.model.db.countDocuments({ company: options.company, project: options.project, area }) > 0;
128
276
  }
277
+ async hasPlanAssignments(plan, options) {
278
+ const shift = await this.model.db.findOne({ company: options.company, project: options.project, plan, 'assignments.0': { $exists: true } }, { projection: { _id: 1 } });
279
+ return shift !== null;
280
+ }
129
281
  /** A plan cannot change its time zone while existing shifts would no longer match their day's local date. */
130
282
  async assertPlanTimeZone(plan, timeZone, options) {
131
283
  const shifts = await this.model.db.find({ company: options.company, project: options.project, plan }).toArray();
@@ -194,12 +346,13 @@ export class ShiftsService extends Immutable {
194
346
  }
195
347
  return planningPage(data, all, site, limit);
196
348
  }
197
- async reportContext(documents, options, replacement, plan) {
198
- const customerIds = documents.flatMap((shift) => shift.assignments.map((entry) => entry.customer));
349
+ async reportContext(documents, options, contextOptions = {}) {
350
+ const { replacement, plan, preparation } = contextOptions;
351
+ const customerIds = [...new Map(documents.flatMap((shift) => shift.assignments.map((entry) => [entry.customer.toHexString(), entry.customer]))).values()];
199
352
  const earliest = Math.min(...documents.map((shift) => Date.parse(shift.start)));
200
353
  const latest = Math.max(...documents.map((shift) => Date.parse(shift.end)));
201
354
  // Plan reads stay inside their plan; scheduling writes omit the scope to keep their company-wide conflict checks.
202
- const schedules = await this.model.db.find({ company: options.company, ...(plan ? { plan } : {}), 'assignments.customer': { $in: customerIds },
355
+ const schedules = contextOptions.schedules ?? await this.model.db.find({ company: options.company, ...(plan ? { plan } : {}), 'assignments.customer': { $in: customerIds },
203
356
  end: { $gt: boundedPlanningInstant(earliest - scheduleWindowMilliseconds) }, start: { $lt: boundedPlanningInstant(latest + scheduleWindowMilliseconds) },
204
357
  }).toArray();
205
358
  if (replacement) {
@@ -209,42 +362,43 @@ export class ShiftsService extends Immutable {
209
362
  else
210
363
  schedules.push(replacement);
211
364
  }
212
- const plans = await ShiftPlansService.plansForCompany([...schedules.map((shift) => shift.plan), ...documents.map((shift) => shift.plan)], options);
213
- const settings = (await SettingsService.singleSettings(options))?.settings;
214
- const absences = await AbsencesService.absencesForPlanning(customerIds, boundedPlanningInstant(earliest), boundedPlanningInstant(latest), options);
215
365
  const participantIds = documents.flatMap((shift) => shift.assignments.map((entry) => entry.participant));
216
- const participants = await ParticipantsService.participantsForPlanning(participantIds, options.company);
217
- const participantDetails = await ParticipantsService.participantsForPlanningWithDetails(participantIds, options.company);
218
- const customers = await CustomersService.peopleForPlanning(customerIds, options.company);
219
- return { schedules, plans, settings, absences, participants, participantDetails, customers };
366
+ const planIds = [...new Map([...schedules, ...documents].map((shift) => [shift.plan.toHexString(), shift.plan])).values()]
367
+ .filter((planId) => !preparation?.plan._id.equals(planId));
368
+ const [plans, settings, absences, people] = await Promise.all([
369
+ planIds.length ? ShiftPlansService.plansForCompany(planIds, options) : [],
370
+ preparation ? preparation.settings : SettingsService.singleSettings(options),
371
+ AbsencesService.absencesForPlanning(customerIds, boundedPlanningInstant(earliest), boundedPlanningInstant(latest), options),
372
+ ParticipantsService.planningParticipantContext(participantIds, customerIds, options.company, preparation),
373
+ ]);
374
+ return { schedules, plans: preparation ? [preparation.plan, ...plans] : plans, settings: settings?.settings, absences, ...people };
220
375
  }
221
376
  async reports(documents, options, replacement, evidence, plan) {
222
377
  if (!documents.length)
223
378
  return [];
224
- const context = await this.reportContext(documents, options, replacement, plan);
379
+ const context = await this.reportContext(documents, options, { replacement, plan });
225
380
  return documents.map((shift) => reportShift(shift, context, evidence === undefined, evidence));
226
381
  }
227
- async validateSchedule(candidate, options, previous) {
228
- const customers = [...candidate.assignments, ...(previous?.assignments ?? [])].map((entry) => entry.customer);
229
- if (!customers.length)
230
- return;
382
+ scheduleNeighbors(candidate, options, previous) {
383
+ const customers = [...new Map([...candidate.assignments, ...(previous?.assignments ?? [])].map((entry) => [entry.customer.toHexString(), entry.customer])).values()];
384
+ // Both intervals matter when moving a shift, since its old and new positions can affect different neighbors.
231
385
  const earliest = Math.min(Date.parse(candidate.start), previous ? Date.parse(previous.start) : Infinity);
232
386
  const latest = Math.max(Date.parse(candidate.end), previous ? Date.parse(previous.end) : -Infinity);
233
- const neighbors = await this.model.db.find({ company: options.company, 'assignments.customer': { $in: customers },
387
+ // Future shifts in other plans may impose stricter incoming-rest rules than the proposed shift's own plan.
388
+ return this.model.db.find({ company: options.company, 'assignments.customer': { $in: customers },
234
389
  end: { $gte: new Date(earliest).toISOString() }, start: { $lte: boundedPlanningInstant(latest + scheduleWindowMilliseconds) },
235
390
  }).toArray();
391
+ }
392
+ async validateSchedule(candidate, options, previous) {
393
+ if (!candidate.assignments.length && !previous?.assignments.length)
394
+ return;
395
+ const neighbors = await this.scheduleNeighbors(candidate, options, previous);
396
+ // Capture persisted evidence before evaluating the in-memory replacement, just as autofill does for its trials.
236
397
  const baseline = new Map();
237
398
  await this.reports(neighbors, options, undefined, baseline);
238
399
  const updatedEvidence = new Map();
239
400
  const updated = await this.reports([...neighbors.filter((shift) => !shift._id.equals(candidate._id)), candidate], options, candidate, updatedEvidence);
240
- const changedCustomers = new Set(candidate.assignments.filter((assignment) => !previous || previous.start !== candidate.start || previous.end !== candidate.end
241
- || !previous.assignments.some((existing) => equalAssignment(existing, assignment))).map((assignment) => assignment.customer.toHexString()));
242
- // Sickness/settings can invalidate retained work. Permit unrelated edits and improvements, while rejecting new or worsened harm.
243
- const violations = updated.flatMap((report) => report.violations.filter((violation) => {
244
- const identity = violationIdentity(violation);
245
- return (report._id.equals(candidate._id) && changedCustomers.has(violation.customer))
246
- || (updatedEvidence.get(identity) ?? 0) > (baseline.get(identity) ?? 0);
247
- }));
401
+ const violations = newScheduleViolations(candidate, previous, updated, baseline, updatedEvidence);
248
402
  if (violations.some((violation) => violation.rule === 'settingsMissing' && violation.shift === candidate._id.toHexString())) {
249
403
  throw new ImmutableError('SHIFT_PLANNING_SETTINGS_NOT_CONFIGURED');
250
404
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shifts.service.js","sourceRoot":"","sources":["../../../src/services/shifts.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shifts.service.js","sourceRoot":"","sources":["../../../src/services/shifts.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,EAAU,MAAM,SAAS,CAAC;AAMnD,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,cAAc,MAAM,sCAAsC,CAAC;AAClE,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAC9D,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AACtD,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,mBAAmB,MAAM,+BAA+B,CAAC;AAChE,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,wBAAwB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACtJ,OAAO,EACL,uBAAuB,EAAE,mBAAmB,EAAE,WAAW,EACzD,qBAAqB,EAAE,sBAAsB,EAAE,YAAY,EAAE,kBAAkB,GAChF,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAInJ,6GAA6G;AAC7G,MAAM,OAAO,aAAc,SAAQ,SAAgB;IAAnD;;QAEE,UAAK,GAAG,UAAU,CAAC;IAidrB,CAAC;IA/cS,cAAc,CAAC,KAAiB,EAAE,IAAiC,EAAE,GAAyC;QAEpH,MAAM,UAAU,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,wBAAwB;YAAE,kBAAkB,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;QAC3J,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;YAE5D,kBAAkB,CAAC,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAE3E,CAAC;QACD,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAEpE,kBAAkB,CAAC,OAAO,EAAE,wCAAwC,CAAC,CAAC;QAExE,CAAC;QACD,OAAO,UAAU,CAAC;IAEpB,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,IAAc,EAAE,KAAe,EAAE,OAAoC;QAE1F,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACvH,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC;IAElB,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,MAA8B,EAAE,KAAY,EAAE,OAAoC,EAAE,QAAgB;QAEpI,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;QAChG,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QACvB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI;YAAE,kBAAkB,CAAC,cAAc,EAAE,4CAA4C,CAAC,CAAC;QAC7G,MAAM,WAAW,GAAsB,EAAE,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAE3B,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACrF,MAAM,QAAQ,GAAG,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;YACpG,8FAA8F;YAC9F,IAAI,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;gBAErD,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACnD,SAAS;YAEX,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,iBAAiB,CAAC,IAAK,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACnG,IAAI,CAAC,WAAW,IAAI,4BAA4B,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;gBAAE,kBAAkB,CAAC,0BAA0B,EAAE,2CAA2C,CAAC,CAAC;YACrK,MAAM,QAAQ,GAAG,CAAC,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpG,IAAI,CAAC,QAAQ;gBAAE,kBAAkB,CAAC,0BAA0B,EAAE,oDAAoD,CAAC,CAAC;YACpH,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAE/G,CAAC;QACD,8GAA8G;QAC9G,uBAAuB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;QAClG,OAAO,WAAW,CAAC;IAErB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAc,EAAE,KAAuB,EAAE,OAAoC;QAE7F,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/E,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;QAChC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;QACvC,MAAM,SAAS,GAAkB,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE;YACtG,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE;SACrG,CAAC;QACF,SAAS,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9F,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACnE,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAE,CAAC;IAE/D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAc,EAAE,KAAe,EAAE,OAAoC;QAErF,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACvH,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpG,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAc,EAAE,OAA6B,EAAE,OAAoC;QAElG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,KAAK,GAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,sBAAsB,CAAQ,OAAO,CAAC,EAAE,CAAC;QACrI,IAAI,OAAO,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC5C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/G,OAAO,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAE5G,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAc,EAAE,OAAoC;QAEtE,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9I,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAEtE,CAAC;IAED,kHAAkH;IAClH,KAAK,CAAC,WAAW,CAAC,IAAc,EAAE,KAAe,EAAE,KAAiB,EAAE,OAAoC;QAExG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/E,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;QAC3C,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QAC1G,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;QAChC,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5K,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAE,CAAC;IAEzD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAc,EAAE,KAAe,EAAE,OAAoC;QAErF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAc,EAAE,KAAe,EAAE,KAA4B,EAAE,OAAoC;QAE1H,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;QAChC,yGAAyG;QACzG,MAAM,MAAM,GAAkB,EAAE,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAE5D,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC3E,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAEvN,CAAC;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAE,CAAC;IAEzD,CAAC;IAED,4FAA4F;IAC5F,KAAK,CAAC,aAAa,CAAC,IAAc,EAAE,KAAe,EAAE,OAAoC,EAAE,SAAiC,EAAE;QAE5H,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACvH,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAC3D,uGAAuG;QACvG,MAAM,MAAM,GAAwB,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACrI,+FAA+F;QAC/F,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;QACpD,IAAI,cAAc,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC;QACjE,wGAAwG;QACxG,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC;QAEzB,MAAM,MAAM,GAAkB,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC;QACtH,MAAM,KAAK,GAAG,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,uGAAuG;QACvG,4GAA4G;QAC5G,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE;YAC5J,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;SACtE,CAAC,CAAC;QACH,wGAAwG;QACxG,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3G,MAAM,UAAU,GAAsB,EAAE,CAAC;QACzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAElC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC;YACrC,IAAI,CAAC,QAAQ,IAAI,4BAA4B,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YAC1H,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1C,oHAAoH;YACpH,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAE7F,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC;QAEtC,mGAAmG;QACnG,+EAA+E;QAC/E,MAAM,KAAK,GAAkB,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;QAClG,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,cAAc,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9E,gFAAgF;QAChF,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,wCAAwC,CAAC,CAAC;QAC5I,8GAA8G;QAC9G,sFAAsF;QACtF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,SAAS;YAAE,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClF,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAClG,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC9C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YAEnC,IAAI,WAAW,CAAC,MAAM,IAAI,cAAc;gBAAE,MAAM;YAChD,MAAM,QAAQ,GAAkB,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;YACxF,iGAAiG;YACjG,MAAM,eAAe,GAAuB,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,GAAG,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC;YACrG,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;YAClD,MAAM,OAAO,GAAG,CAAC,GAAG,cAAc,EAAE,QAAQ,CAAC;iBAC1C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;YACrF,oFAAoF;YACpF,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YAClH,IAAI,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,MAAM;gBAAE,SAAS;YACnG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAE3C,CAAC;QACD,8GAA8G;QAC9G,OAAO,MAAM,CAAC;IAEhB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB,CAAC,IAAc,EAAE,KAAe,EAAE,OAAoC,EAAE,SAAiC,EAAE;QAElI,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/E,yGAAyG;QACzG,MAAM,MAAM,GAAkB,EAAE,GAAG,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3G,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAChD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,EAC5D,MAAM,EAAE,OAAO,EAAE,QAAQ,CAC1B,CAAC;QACF,MAAM,QAAQ,GAAkB,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC;QAC3D,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,KAAoB,EAAE,OAAoC,EAAE,SAAiC,EAAE;QAE5G,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrF,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACzF,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAE3D,mGAAmG;QACnG,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAEjD,MAAM,KAAK,GAAkB,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC/F,MAAM,UAAU,GAAyB,EAAE,CAAC;YAC5C,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAE1C,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAClD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBACjC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnB,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAEzJ,CAAC;YACD,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAE1C,CAAC,CAAC,CAAC;QACH,8FAA8F;QAC9F,MAAM,MAAM,GAAoB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvD,GAAG,MAAM,CAAC,KAAK;YACf,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;SACxK,CAAC,CAAC,CAAC;QACJ,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACtK,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,wGAAwG;QACxG,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE;YAClH,GAAG,EAAE,EAAE,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,0BAA0B,CAAC,EAAE;YACtF,KAAK,EAAE,EAAE,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,0BAA0B,CAAC,EAAE;SACvF,CAAC,CAAC,OAAO,EAAE,CAAC;QACb,oGAAoG;QACpG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QACtH,gFAAgF;QAChF,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,wCAAwC,CAAC,CAAC;QAE5I,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3J,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3I,+FAA+F;QAC/F,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACpI,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAEjG,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAc,EAAE,OAAoC;QAE/E,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IAE9G,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAc,EAAE,OAAoC;QAE3E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxK,OAAO,KAAK,KAAK,IAAI,CAAC;IAExB,CAAC;IAED,6GAA6G;IAC7G,KAAK,CAAC,kBAAkB,CAAC,IAAc,EAAE,QAAgB,EAAE,OAAoC;QAE7F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAChH,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO;QAC3B,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAExB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC;QAE/D,CAAC,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,8BAA8B,CAAC,CAAC;IAE/D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAa,EAAE,OAAoC;QAEpE,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAE7G,CAAC;IAED,oFAAoF;IACpF,KAAK,CAAC,mBAAmB,CAAC,QAA8B,EAAE,aAAmD,EAAE,OAAoC;QAEjJ,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7H,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC,IAAI;eAClF,CAAC,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAEhF,MAAM,IAAI,cAAc,CAAC,8BAA8B,CAAC,CAAC;QAE3D,CAAC;IAEH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAkB,EAAE,OAA2B,EAAE,OAAoC;QAElG,IAAI,CAAC,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,oBAAoB,CAAC,CAAC;QACjH,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAoB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAClJ,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7F,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAClI,MAAM,SAAS,GAAG,CAAC,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzH,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;eACpG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE,OAAO,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAClE,mGAAmG;QACnG,MAAM,KAAK,GAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,GAAG,sBAAsB,CAAQ,OAAO,CAAC;YAC5J,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;gBAChE,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACvH,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE;aAC1C,CAAC,CAAC,GACJ,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5G,MAAM,IAAI,GAAkB,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAE3B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACxE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;gBAAE,SAAS;YAC7D,wGAAwG;YACxG,MAAM,UAAU,GAAwB,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3E,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC9E,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;gBAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACrE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG;gBAC/F,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM;aACzJ,CAAC,CAAC;QAEL,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAE9C,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAA0B,EAAE,OAAoC,EAAE,iBAA4C,EAAE;QAE1I,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC;QAC1D,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACnK,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5E,kHAAkH;QAClH,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE;YACxK,GAAG,EAAE,EAAE,GAAG,EAAE,sBAAsB,CAAC,QAAQ,GAAG,0BAA0B,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,sBAAsB,CAAC,MAAM,GAAG,0BAA0B,CAAC,EAAE;SACzJ,CAAC,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,WAAW,EAAE,CAAC;YAEhB,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAChF,IAAI,KAAK,IAAI,CAAC;gBAAE,SAAS,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;;gBAC1C,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEnC,CAAC;QACD,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACzG,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACvH,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5D,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;YACzE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC;YAC5E,eAAe,CAAC,mBAAmB,CAAC,WAAW,EAAE,sBAAsB,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;YAC3H,mBAAmB,CAAC,0BAA0B,CAAC,cAAc,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;SAC1G,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAErI,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,SAA0B,EAAE,OAAoC,EAAE,WAA2B,EAAE,QAA8B,EAAE,IAAe;QAElK,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,KAAK,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEjG,CAAC;IAEO,iBAAiB,CAAC,SAAwB,EAAE,OAAoC,EAAE,QAAwB;QAEhH,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACrK,6GAA6G;QAC7G,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACzG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpG,2GAA2G;QAC3G,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE;YAC9F,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,CAAC,MAAM,GAAG,0BAA0B,CAAC,EAAE;SAC9H,CAAC,CAAC,OAAO,EAAE,CAAC;IAEf,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,SAAwB,EAAE,OAAoC,EAAE,QAAwB;QAErH,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM;YAAE,OAAO;QAC3E,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7E,gHAAgH;QAChH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACvJ,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QAClG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,iBAAiB,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAE5H,MAAM,IAAI,cAAc,CAAC,wCAAwC,CAAC,CAAC;QAErE,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YAEtB,MAAM,IAAI,cAAc,CAAC,+BAA+B,EAAE,CAAC;oBACzD,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE;oBAC7G,OAAO,EAAE,uDAAuD;iBACjE,CAAC,CAAC,CAAC;QAEN,CAAC;IAEH,CAAC;CAEF;AAED,eAAe,IAAI,aAAa,EAAE,CAAC"}