@modelprofile.com/flexharness-agent 9.10.0 → 10.1.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.
@@ -127,6 +127,8 @@ export interface IToolExecutionReconciliationEvent extends IAgentEventBase {
127
127
  export type TAgentConversationEvent = ISystemMessageEvent | IUserMessageEvent | IAssistantMessageEvent | IToolCallEvent | IToolResultEvent | IModelMessageEvent;
128
128
  export interface IContextCompactionEvent extends IAgentEventBase {
129
129
  type: 'context-compaction';
130
+ /** A proactive budget compaction whose settled source events may be archived automatically. */
131
+ automatic?: true;
130
132
  coveredEventIds: string[];
131
133
  replacementEvents: TAgentConversationEvent[];
132
134
  archivedTransactions?: IArchivedAgentGenerationTransaction[];
@@ -133,4 +133,4 @@ export function modelMessagesToAgentEvents(messages, options = {}) {
133
133
  }
134
134
  return events;
135
135
  }
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC5ldmVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19hZ2VudC9zbWFydGFnZW50LmV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQWtOeEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxFQUFVLEVBQUUsQ0FDN0QsR0FBRyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0FBRWhELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsS0FBK0I7SUFFL0IsT0FBTztRQUNMLEdBQUcsS0FBSztRQUNSLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDOUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtLQUNwQixDQUFDO0FBQ3pCLENBQUM7QUFFRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBOEIsRUFBVyxFQUFFO0lBQ25FLElBQUksT0FBTyxJQUFJLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0MsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGtCQUFrQjtRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3RCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLFFBQXlDLEVBQ3pDLFVBQXlDLEVBQUU7SUFFM0MsTUFBTSxNQUFNLEdBQThCLEVBQUUsQ0FBQztJQUM3QyxNQUFNLFlBQVksR0FBRztRQUNuQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtRQUNs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
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC5ldmVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19hZ2VudC9zbWFydGFnZW50LmV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQW9OeEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxFQUFVLEVBQUUsQ0FDN0QsR0FBRyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0FBRWhELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsS0FBK0I7SUFFL0IsT0FBTztRQUNMLEdBQUcsS0FBSztRQUNSLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDOUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtLQUNwQixDQUFDO0FBQ3pCLENBQUM7QUFFRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBOEIsRUFBVyxFQUFFO0lBQ25FLElBQUksT0FBTyxJQUFJLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0MsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGtCQUFrQjtRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3RCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLFFBQXlDLEVBQ3pDLFVBQXlDLEVBQUU7SUFFM0MsTUFBTSxNQUFNLEdBQThCLEVBQUUsQ0FBQztJQUM3QyxNQUFNLFlBQVksR0FBRztRQUNuQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtRQUNs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
@@ -99,7 +99,7 @@ export interface IAgentContextBuildOptions {
99
99
  export type TAgentContextBuilder = (options: IAgentContextBuildOptions) => ModelMessage[];
100
100
  export interface IAgentContextCompactionOptions {
101
101
  abortSignal?: AbortSignal;
102
- reason: 'context-overflow' | 'retention' | 'manual';
102
+ reason: 'context-overflow' | 'context-budget' | 'retention' | 'manual';
103
103
  /**
104
104
  * Reports the usage of each model call the compactor makes, into the session's `onUsage` as
105
105
  * `source: 'compaction'`. The session always supplies it. Report every call before the returned
@@ -148,6 +148,11 @@ export interface IAgentSessionOptions {
148
148
  contextBuilder?: TAgentContextBuilder;
149
149
  /** Explicit context compactor used by manual and event-retention compaction. */
150
150
  contextCompactor?: TAgentContextCompactor;
151
+ /** Compact settled history before inference when model messages exceed this UTF-8 JSON byte budget.
152
+ * Defaults to 256 KiB when a compactor is supplied; false disables proactive compaction.
153
+ * The current unsettled generation is never summarized or archived.
154
+ */
155
+ contextCompactionBytes?: number | false;
151
156
  /** Optional bounded active-event policy. Requires contextCompactor and eventStore.archive. */
152
157
  eventRetention?: IAgentEventRetentionOptions;
153
158
  /** Maximum wait for each session change listener. Default: 30 seconds. */
@@ -21,4 +21,4 @@ export class ContextOverflowError extends Error {
21
21
  this.name = 'ContextOverflowError';
22
22
  }
23
23
  }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC5pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfYWdlbnQvc21hcnRhZ2VudC5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStTQSxNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsS0FBSztJQUN6QyxLQUFLLENBQXdCO0lBQzdCLFlBQVksQ0FBVTtJQUNyQixvQkFBb0IsQ0FBc0I7SUFFM0QsWUFDRSxLQUE0QixFQUM1QixZQUFxQixFQUNyQixvQkFBeUM7UUFFekMsS0FBSyxDQUNILG9DQUFvQyxZQUFZLFlBQVksS0FBSztZQUMvRCxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU87WUFDdEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUMzQixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxrQ0FBa0MsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7SUFDbkQsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUFzSUQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLEtBQUs7SUFDN0MsWUFBWSxPQUFPLEdBQUcsdUVBQXVFO1FBQzNGLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztDQUNGIn0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC5pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfYWdlbnQvc21hcnRhZ2VudC5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9UQSxNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsS0FBSztJQUN6QyxLQUFLLENBQXdCO0lBQzdCLFlBQVksQ0FBVTtJQUNyQixvQkFBb0IsQ0FBc0I7SUFFM0QsWUFDRSxLQUE0QixFQUM1QixZQUFxQixFQUNyQixvQkFBeUM7UUFFekMsS0FBSyxDQUNILG9DQUFvQyxZQUFZLFlBQVksS0FBSztZQUMvRCxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU87WUFDdEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUMzQixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxrQ0FBa0MsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7SUFDbkQsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUFzSUQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLEtBQUs7SUFDN0MsWUFBWSxPQUFPLEdBQUcsdUVBQXVFO1FBQzNGLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztDQUNGIn0=
@@ -385,6 +385,9 @@ const validateAgentEvents = (value, path, conversationOnly = false) => {
385
385
  }
386
386
  break;
387
387
  case 'context-compaction':
388
+ if (eventValue.automatic !== undefined && eventValue.automatic !== true) {
389
+ validationError(`${eventPath}.automatic`, 'must be true when present.');
390
+ }
388
391
  assertStringArray(eventValue.coveredEventIds, `${eventPath}.coveredEventIds`);
389
392
  validateAgentEvents(eventValue.replacementEvents, `${eventPath}.replacementEvents`, true);
390
393
  if (eventValue.archivedTransactions !== undefined) {
@@ -484,4 +487,4 @@ export class InMemoryAgentEventStore {
484
487
  return archive ? clone(archive) : undefined;
485
488
  }
486
489
  }
487
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC5wZXJzaXN0ZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2FnZW50L3NtYXJ0YWdlbnQucGVyc2lzdGVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSx1QkFBdUIsR0FBRyxDQUFVLENBQUM7QUFDM0MsTUFBTSxzQkFBc0IsR0FBRyxDQUFVLENBQUM7QUFpRTFDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQ2pDLEtBQW1DLEVBQ04sRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLO09BQ3BDLG9CQUFvQixJQUFJLEtBQUs7T0FDN0IsS0FBSyxDQUFDLGtCQUFrQixLQUFLLENBQUMsQ0FBQztBQUlwQyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFTO0lBQ3hDLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxhQUFhO0lBQ2IsZUFBZTtJQUNmLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsOEJBQThCO0lBQzlCLGdDQUFnQztJQUNoQyxvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLCtCQUErQjtJQUMvQixvQkFBb0I7Q0FDVyxDQUFDLENBQUM7QUFFbkMsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLEdBQUcsQ0FBUztJQUNyRCxnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixXQUFXO0lBQ1gsYUFBYTtJQUNiLGVBQWU7Q0FDZ0IsQ0FBQyxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBcUIsRUFBRSxHQUFXLEVBQVcsRUFBRSxDQUM3RCxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRW5ELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBWSxFQUFFLE9BQWUsRUFBUyxFQUFFO0lBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLFlBQVksR0FHcUIsQ0FDckMsS0FBYyxFQUNkLElBQVksRUFDTixFQUFFO0lBQ1IsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUM5QyxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FHSyxDQUM3QixLQUFjLEVBQ2QsSUFBWSxFQUNOLEVBQUU7SUFDUixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQy9DLGVBQWUsQ0FBQyxJQUFJLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQWMsRUFBRSxJQUFZLEVBQVEsRUFBRTtJQUNsRSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckQsZUFBZSxDQUFDLElBQUksRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQWMsRUFBRSxJQUFZLEVBQVEsRUFBRTtJQUM3RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FHSSxDQUFDLEtBQWMsRUFBRSxJQUFZLEVBQVEsRUFBRTtJQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkQsZUFBZSxDQUFDLElBQUksRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO0lBQzVELENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUdVLENBQUMsS0FBYyxFQUFFLElBQVksRUFBUSxFQUFFO0lBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDakMsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzdDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLG9DQUFvQyxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQWMsRUFBRSxJQUFZLEVBQVEsRUFBRTtJQUNuRSxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBYyxFQUFFLElBQVksRUFBUSxFQUFFO0lBQ3BFLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUIsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUM7SUFDakQscUJBQXFCLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQztJQUN4RSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDekQsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUTtZQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDM0YsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO1lBQUUsZUFBZSxDQUFDLEdBQUcsSUFBSSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDOUUsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztRQUN0QyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUNyRCxPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTO1FBQUUsT0FBTyxlQUFlLENBQUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNwRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPLGVBQWUsQ0FBQyxHQUFHLElBQUksUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLFVBQVUsS0FBSyxHQUFHLENBQUM7UUFDNUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxPQUFPLENBQUMsQ0FBQztRQUMzRCxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xGLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMvQixJQUFJLE9BQU8sVUFBVSxDQUFDLElBQUksS0FBSyxRQUFRO2dCQUFFLGVBQWUsQ0FBQyxHQUFHLFNBQVMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDckcsQ0FBQzthQUFNLElBQ0wsVUFBVSxDQUFDLElBQUksS0FBSyxPQUFPO2VBQ3hCLFVBQVUsQ0FBQyxJQUFJLEtBQUssV0FBVztlQUMvQixVQUFVLENBQUMsSUFBSSxLQUFLLFlBQVksRUFDbkMsQ0FBQztZQUNELElBQUksT0FBTyxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVE7Z0JBQUUsZUFBZSxDQUFDLEdBQUcsU0FBUyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUNuRyxJQUFJLE9BQU8sVUFBVSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDN0MsZUFBZSxDQUFDLEdBQUcsU0FBUyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBQ0Qsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLFNBQVMsV0FBVyxDQUFDLENBQUM7UUFDckUsQ0FBQzthQUFNLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM3RSxJQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUcsS0FBSyxRQUFRO2dCQUFFLGVBQWUsQ0FBQyxHQUFHLFNBQVMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDbkcsQ0FBQzthQUFNLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUNoRixJQUFJLE9BQU8sVUFBVSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDMUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxTQUFTLFNBQVMsQ0FBQyxDQUFDO2dCQUN2RCxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDbkUsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDL0IsZUFBZSxDQUFDLEdBQUcsU0FBUyxXQUFXLFFBQVEsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7b0JBQzFFLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLGVBQWUsQ0FBQyxHQUFHLFNBQVMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSx3QkFBd0IsR0FBRyxDQUMvQixLQUFjLEVBQ2QsSUFBWSxFQUNaLElBQW1DLEVBQzdCLEVBQUU7SUFDUixZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFCLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELHFCQUFxQixDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUM7SUFDeEUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3hELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3ZELGVBQWUsQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLG9CQUFvQixJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRO1lBQUUsZUFBZSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN6RixPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksS0FBSyxNQUFNO1lBQUUsZUFBZSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsb0JBQW9CLElBQUksV0FBVyxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO1lBQUUsZUFBZSxDQUFDLEdBQUcsSUFBSSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDOUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUM7UUFDM0QsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDMUIsSUFBSSxJQUFJLEtBQUssTUFBTTtZQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLGdDQUFnQyxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1lBQUUsZUFBZSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDNUUsSUFBSSxPQUFPLEtBQUssQ0FBQyxTQUFTLEtBQUssUUFBUTtZQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksWUFBWSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDbkcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLENBQUM7UUFDekQsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDL0IsSUFBSSxJQUFJLEtBQUssV0FBVztZQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLG9CQUFvQixJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQy9GLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDO1FBQzdELG9CQUFvQixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztZQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzlFLElBQUksS0FBSyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4RixlQUFlLENBQUMsR0FBRyxJQUFJLG1CQUFtQixFQUFFLGtDQUFrQyxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDO1FBQ2pDLElBQUksSUFBSSxLQUFLLE1BQU07WUFBRSxlQUFlLENBQUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3ZGLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDO1FBQzdELG9CQUFvQixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztZQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2hGLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLHVCQUF1QixFQUFFLENBQUM7UUFDM0MsSUFBSSxJQUFJLEtBQUssV0FBVztZQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLG9CQUFvQixJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQy9GLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDO1FBQzdELG9CQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDO1FBQzdELE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLHdCQUF3QixFQUFFLENBQUM7UUFDNUMsSUFBSSxJQUFJLEtBQUssTUFBTTtZQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLG9CQUFvQixJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQzFGLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDO1FBQzdELElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFBRSxlQUFlLENBQUMsR0FBRyxJQUFJLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ25HLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELElBQUksS0FBSyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4RixlQUFlLENBQUMsR0FBRyxJQUFJLG1CQUFtQixFQUFFLGtDQUFrQyxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBQ0QsZUFBZSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsb0JBQW9CLElBQUksV0FBVyxDQUFDLENBQUM7QUFDdkUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUMzQixLQUFjLEVBQ2QsSUFBWSxFQUNaLElBQThDLEVBQ3hDLEVBQUU7SUFDUixJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDMUUsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTTtRQUFFLE9BQU87SUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLGVBQWUsQ0FBQyxJQUFJLEVBQUUseUNBQXlDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzVDLHdCQUF3QixDQUFDLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWMsRUFBRSxJQUFZLEVBQVEsRUFBRTtJQUNoRSxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDeEIsSUFDRSxJQUFJLEtBQUssUUFBUTtXQUNkLElBQUksS0FBSyxNQUFNO1dBQ2YsSUFBSSxLQUFLLFdBQVc7V0FDcEIsSUFBSSxLQUFLLE1BQU07UUFDbEIsT0FBTyxlQUFlLENBQUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUM7UUFBRSxlQUFlLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNsRixvQkFBb0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QscUJBQXFCLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUM7QUFFRixNQUFNLDBCQUEwQixHQUFHLENBQUMsS0FBcUIsRUFBRSxJQUFZLEVBQVEsRUFBRTtJQUMvRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQztBQUNuRSxDQUFDLENBQUM7QUFFRixNQUFNLDBCQUEwQixHQUFHLENBQUMsS0FBYyxFQUFFLElBQVksRUFBUSxFQUFFO0lBQ3hFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDeEMsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDO1FBQ3RDLFlBQVksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxHQUFHLFNBQVMsZUFBZSxDQUFDLENBQUM7UUFDM0Usb0JBQW9CLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsU0FBUyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25GLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxlQUFlLENBQUMsSUFBSSxFQUFFLGlEQUFpRCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNDLElBQ0UsVUFBVSxDQUFDLE9BQU8sS0FBSyxVQUFVO2VBQzlCLFVBQVUsQ0FBQyxPQUFPLEtBQUssVUFBVTtlQUNqQyxVQUFVLENBQUMsT0FBTyxLQUFLLGFBQWE7WUFDdkMsZUFBZSxDQUFDLEdBQUcsU0FBUyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDM0QsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sbUJBQW1CLEdBQUcsQ0FDMUIsS0FBYyxFQUNkLElBQVksRUFDWixnQkFBZ0IsR0FBRyxLQUFLLEVBQ1QsRUFBRTtJQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLGVBQWUsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ25DLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztJQUN0QixLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLENBQUM7UUFDdEMsWUFBWSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxLQUFLLENBQUMsQ0FBQztRQUN2RCxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztRQUNoRyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixlQUFlLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxHQUFHLFNBQVMsWUFBWSxDQUFDLENBQUM7UUFDaEUsSUFBSSxVQUFVLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxTQUFTLFdBQVcsQ0FBQyxDQUFDO1lBQ3BFLElBQUksVUFBVSxDQUFDLFFBQVEsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDekMsZUFBZSxDQUFDLEdBQUcsU0FBUyxXQUFXLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBQ0QsYUFBYSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEdBQUcsU0FBUyxZQUFZLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFVLEVBQUUsQ0FBQztZQUM1RSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsU0FBUyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUM7UUFDRCxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxPQUFPLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFBRSxlQUFlLENBQUMsR0FBRyxTQUFTLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRyxJQUFJLGdCQUFnQixJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdFLGVBQWUsQ0FBQyxHQUFHLFNBQVMsT0FBTyxFQUFFLCtCQUErQixDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELFFBQVEsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3hCLEtBQUssZ0JBQWdCO2dCQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7b0JBQUUsZUFBZSxDQUFDLEdBQUcsU0FBUyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQzVGLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0UscUJBQXFCLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsQ0FBQztnQkFDbEYsTUFBTTtZQUNSLEtBQUssY0FBYyxDQUFDO1lBQ3BCLEtBQUssbUJBQW1CO2dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7b0JBQUUsZUFBZSxDQUFDLEdBQUcsU0FBUyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQzVGLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxLQUFLLGNBQWM7b0JBQ2pHLENBQUMsQ0FBQyxNQUFNO29CQUNSLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDakIscUJBQXFCLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsQ0FBQztnQkFDbEYsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGNBQWMsSUFBSSxVQUFVLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUMzRSxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUyxVQUFVLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxXQUFXO2dCQUNkLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxTQUFTLGFBQWEsQ0FBQyxDQUFDO2dCQUN2RSxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsU0FBUyxXQUFXLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDO29CQUFFLGVBQWUsQ0FBQyxHQUFHLFNBQVMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN4RixJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLElBQUksT0FBTyxVQUFVLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2xHLGVBQWUsQ0FBQyxHQUFHLFNBQVMsbUJBQW1CLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztnQkFDdkYsQ0FBQztnQkFDRCxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNsRixNQUFNO1lBQ1IsS0FBSyxhQUFhO2dCQUNoQixvQkFBb0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEdBQUcsU0FBUyxhQUFhLENBQUMsQ0FBQztnQkFDdkUsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLFNBQVMsV0FBVyxDQUFDLENBQUM7Z0JBQ25FLElBQUksVUFBVSxDQUFDLGlCQUFpQixLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUMvQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxTQUFTLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3ZGLENBQUM7Z0JBQ0Qsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLFNBQVMsUUFBUSxDQUFDLENBQUM7Z0JBQzdELElBQ0UsVUFBVSxDQUFDLHdCQUF3QixLQUFLLFNBQVM7dUJBQzlDLE9BQU8sVUFBVSxDQUFDLHdCQUF3QixLQUFLLFNBQVMsRUFDM0QsQ0FBQztvQkFDRCxlQUFlLENBQUMsR0FBRyxTQUFTLDJCQUEyQixFQUFFLGtDQUFrQyxDQUFDLENBQUM7Z0JBQy9GLENBQUM7Z0JBQ0QsSUFBSSxVQUFVLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN6QyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEdBQUcsU0FBUyxjQUFjLENBQUMsQ0FBQztnQkFDN0UsQ0FBQztnQkFDRCxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNsRixxQkFBcUIsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxTQUFTLHlCQUF5QixDQUFDLENBQUM7Z0JBQ2hHLE1BQU07WUFDUixLQUFLLGVBQWU7Z0JBQ2xCLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsU0FBUyxRQUFRLENBQUMsQ0FBQztnQkFDckQsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLGFBQWEsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLE9BQU8sVUFBVSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDMUYsZUFBZSxDQUFDLEdBQUcsU0FBUyxlQUFlLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztnQkFDbkYsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxlQUFlO2dCQUNsQixrQkFBa0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUyxVQUFVLENBQUMsQ0FBQztnQkFDL0QsTUFBTTtZQUNSLEtBQUssa0JBQWtCO2dCQUNyQiwwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xELG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLFNBQVMsbUJBQW1CLENBQUMsQ0FBQztnQkFDbkYsTUFBTTtZQUNSLEtBQUssOEJBQThCLENBQUM7WUFDcEMsS0FBSyxnQ0FBZ0M7Z0JBQ25DLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbEQsTUFBTTtZQUNSLEtBQUssb0JBQW9CO2dCQUN2QiwwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xELElBQ0UsVUFBVSxDQUFDLE9BQU8sS0FBSyxVQUFVO3VCQUM5QixVQUFVLENBQUMsT0FBTyxLQUFLLFVBQVU7dUJBQ2pDLFVBQVUsQ0FBQyxPQUFPLEtBQUssYUFBYTtvQkFDdkMsZUFBZSxDQUFDLEdBQUcsU0FBUyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ3pELG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxTQUFTLFNBQVMsQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLENBQ3RDLFVBQVUsQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEtBQUssYUFBYSxDQUNwRTtvQkFBRSxlQUFlLENBQUMsR0FBRyxTQUFTLFVBQVUsRUFBRSxrREFBa0QsQ0FBQyxDQUFDO2dCQUMvRixNQUFNO1lBQ1IsS0FBSyx1QkFBdUI7Z0JBQzFCLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbEQsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsYUFBYSxDQUFDLENBQUM7Z0JBQ3ZFLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxTQUFTLFdBQVcsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUM7b0JBQUUsZUFBZSxDQUFDLEdBQUcsU0FBUyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3hGLE1BQU07WUFDUixLQUFLLCtCQUErQjtnQkFDbEMsMEJBQTBCLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNsRCxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsU0FBUyxXQUFXLENBQUMsQ0FBQztnQkFDbkUsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsYUFBYSxDQUFDLENBQUM7Z0JBQ3ZFLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxTQUFTLFdBQVcsQ0FBQyxDQUFDO2dCQUNuRSxJQUNFLFVBQVUsQ0FBQyxVQUFVLEtBQUssVUFBVTt1QkFDakMsVUFBVSxDQUFDLFVBQVUsS0FBSyxjQUFjO3VCQUN4QyxVQUFVLENBQUMsVUFBVSxLQUFLLG1CQUFtQjtvQkFDaEQsZUFBZSxDQUFDLEdBQUcsU0FBUyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQzVELG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxTQUFTLFFBQVEsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3pDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxTQUFTLGNBQWMsQ0FBQyxDQUFDO2dCQUM3RSxDQUFDO2dCQUNELE1BQU07WUFDUixLQUFLLG9CQUFvQjtnQkFDdkIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsQ0FBQztnQkFDOUUsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsU0FBUyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUYsSUFBSSxVQUFVLENBQUMsb0JBQW9CLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2xELDBCQUEwQixDQUN4QixVQUFVLENBQUMsb0JBQW9CLEVBQy9CLEdBQUcsU0FBUyx1QkFBdUIsQ0FDcEMsQ0FBQztnQkFDSixDQUFDO2dCQUNELE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBc0IsQ0FBQztBQUNoQyxDQUFDLENBQUM7QUFFRix1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FDMUMsS0FBYyxFQUNkLGlCQUEwQixFQUNILEVBQUU7SUFDekIsWUFBWSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzVDLElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3BELGVBQWUsQ0FBQyxvQ0FBb0MsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ3hFLElBQUksaUJBQWlCLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztRQUM3RSxlQUFlLENBQUMsZ0NBQWdDLEVBQUUsZUFBZSxpQkFBaUIsSUFBSSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUNELHFCQUFxQixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsK0JBQStCLENBQUMsQ0FBQztJQUN2RSxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ25FLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztJQUNqRSxPQUFPLEtBQXlDLENBQUM7QUFDbkQsQ0FBQyxDQUFDO0FBRUYsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLEtBQWMsRUFDZCxpQkFBMEIsRUFDMUIsaUJBQTBCLEVBQ0osRUFBRTtJQUN4QixZQUFZLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDM0MsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLHNCQUFzQixFQUFFLENBQUM7UUFDbkQsZUFBZSxDQUFDLG1DQUFtQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLCtCQUErQixDQUFDLENBQUM7SUFDdkUsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdFLGVBQWUsQ0FBQywrQkFBK0IsRUFBRSxlQUFlLGlCQUFpQixJQUFJLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksaUJBQWlCLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztRQUM3RSxlQUFlLENBQUMsK0JBQStCLEVBQUUsZUFBZSxpQkFBaUIsSUFBSSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUNELGVBQWUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLCtCQUErQixDQUFDLENBQUM7SUFDbEUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sS0FBd0MsQ0FBQztBQUNsRCxDQUFDLENBQUM7QUFFRixNQUFNLE9BQU8sNEJBQTZCLFNBQVEsS0FBSztJQUNyQyxTQUFTLENBQVM7SUFDbEIsZ0JBQWdCLENBQVM7SUFDekIsY0FBYyxDQUFTO0lBRXZDLFlBQVksU0FBaUIsRUFBRSxnQkFBd0IsRUFBRSxjQUFzQjtRQUM3RSxLQUFLLENBQ0gsMkNBQTJDLFNBQVMsd0JBQXdCLGdCQUFnQixXQUFXLGNBQWMsR0FBRyxDQUN6SCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyw4QkFBOEIsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQVMsS0FBYSxFQUFVLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFL0UsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQzVCLFNBQWlCLEVBQ2pCLFFBQWdCLEVBQ2hCLE1BQThCLEVBQ1AsRUFBRSxDQUFDLENBQUM7SUFDM0IsYUFBYSxFQUFFLHVCQUF1QjtJQUN0QyxTQUFTO0lBQ1QsUUFBUTtJQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ3JCLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0NBQzNCLENBQUMsQ0FBQztBQUVILE1BQU0sT0FBTyx1QkFBdUI7SUFDbEIsa0JBQWtCLEdBQUcsQ0FBVSxDQUFDO0lBQy9CLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztJQUNuRCxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7SUFFM0QsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFpQjtRQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQ2YsU0FBaUIsRUFDakIsTUFBOEIsRUFDOUIsZ0JBQXdCO1FBRXhCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUM7UUFDcEUsSUFBSSxjQUFjLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksNEJBQTRCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0UsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBNkI7UUFDaEQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZFLElBQUksV0FBVyxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksT0FBTyxDQUFDLFNBQVMseUNBQXlDLENBQUMsQ0FBQztZQUMxRixDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQ3RCLFNBQWlCLEVBQ2pCLFNBQWlCO1FBRWpCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDaEUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlDLENBQUM7Q0FDRiJ9
490
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhZ2VudC5wZXJzaXN0ZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2FnZW50L3NtYXJ0YWdlbnQucGVyc2lzdGVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSx1QkFBdUIsR0FBRyxDQUFVLENBQUM7QUFDM0MsTUFBTSxzQkFBc0IsR0FBRyxDQUFVLENBQUM7QUFpRTFDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQ2pDLEtBQW1DLEVBQ04sRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLO09BQ3BDLG9CQUFvQixJQUFJLEtBQUs7T0FDN0IsS0FBSyxDQUFDLGtCQUFrQixLQUFLLENBQUMsQ0FBQztBQUlwQyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFTO0lBQ3hDLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxhQUFhO0lBQ2IsZUFBZTtJQUNmLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsOEJBQThCO0lBQzlCLGdDQUFnQztJQUNoQyxvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLCtCQUErQjtJQUMvQixvQkFBb0I7Q0FDVyxDQUFDLENBQUM7QUFFbkMsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLEdBQUcsQ0FBUztJQUNyRCxnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixXQUFXO0lBQ1gsYUFBYTtJQUNiLGVBQWU7Q0FDZ0IsQ0FBQyxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBcUIsRUFBRSxHQUFXLEVBQVcsRUFBRSxDQUM3RCxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRW5ELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBWSxFQUFFLE9BQWUsRUFBUyxFQUFFO0lBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksT0FB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
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "Task Venture Capital GmbH",
3
3
  "license": "MIT",
4
4
  "name": "@modelprofile.com/flexharness-agent",
5
- "version": "9.10.0",
5
+ "version": "10.1.0",
6
6
  "type": "module",
7
7
  "description": "Standalone event-driven agent runtime with generation transactions, context and tool execution contracts.",
8
8
  "main": "./dist_ts_agent/index.js",
@@ -18,11 +18,11 @@
18
18
  }
19
19
  },
20
20
  "dependencies": {
21
- "@modelprofile.com/flexharness-models": "9.10.0",
22
- "ai": "^7.0.107",
23
- "zod": "^4.4.1",
21
+ "@modelprofile.com/flexharness-models": "10.1.0",
22
+ "ai": "^7.0.111",
23
+ "zod": "^4.6.5",
24
24
  "@noble/hashes": "^2.4.0",
25
- "fast-equals": "^6.0.2"
25
+ "fast-equals": "^6.0.4"
26
26
  },
27
27
  "engines": {
28
28
  "node": ">=24"
package/readme.md CHANGED
@@ -321,12 +321,15 @@ export function openStoredSession(eventStore: IAgentEventStoreV2, sessionId: str
321
321
 
322
322
  Use an application-owned durable adapter for persistent sessions. Its `save(sessionId, events, expectedRevision)` must atomically compare the revision and return the new revision, or reject a conflict. Preserve the schema and supported values in canonical events; the package exports schema validators and `AgentEventStoreConflictError` for adapter implementations. Keep one active owner per session; compare-and-swap detects conflicting writes rather than merging competing sessions.
323
323
 
324
+ Commits queued before a save starts share one durable snapshot containing them all. An in-flight snapshot is immutable, and every caller and change notification still waits for the save containing its event. The adapter's revision advances per durable snapshot, not necessarily per event.
325
+
324
326
  `InMemoryAgentEventStore` is useful for tests and sessions that only need process-local storage. The Node root also exports the explicit `FileAgentEventStore` adapter. Neither storage selection nor a durable backend is implicit.
325
327
 
326
328
  ### Bound model context and active events
327
329
 
328
330
  - `contextBuilder({ events })` controls the model-message projection.
329
331
  - `contextCompactor(messages, events, { reason, abortSignal, reportUsage })` returns replacement model messages. Provide it to use `session.compact()` or automatic event retention. Report the usage of its model calls through `reportUsage`; see [What is counted](#what-is-counted).
332
+ - A compactor also enables proactive compaction with reason `context-budget` before inference. `contextCompactionBytes` defaults to 256 KiB of UTF-8 JSON model messages, accepts 1 through 32 MiB, and may be `false` to disable it. Only settled history is covered, never the current unsettled generation. Budget compactions carry `automatic: true`; after transactional finalization their covered events are archived when the store supports it and no open transaction or uncertain tool intent remains. Manual compaction is not automatically archived.
330
333
  - `eventRetention: { maxEvents }` triggers compaction and archival when the active event count exceeds the threshold. It also requires an event store with `archive()` support.
331
334
  - Context overflow invokes the configured compactor, or the `onContextOverflow(messages, { abortSignal, reportUsage })` handler. Without either, generation throws `ContextOverflowError`. `maxContextOverflowRetries` defaults to `3`.
332
335
  - Open transactions and uncertain tool intents constrain when compaction and archival can proceed. Resolve them before manual compaction.
@@ -325,6 +325,7 @@ export class AgentSessionEngine implements IAgentSession {
325
325
  private sequence = 0;
326
326
  private persistenceRevision = 0;
327
327
  private persistenceQueue: Promise<void> = Promise.resolve();
328
+ private pendingPersistence?: { snapshot: TAgentEvent[]; task: Promise<void> };
328
329
  private persistenceError: unknown;
329
330
  private readonly notificationDispatches = new Set<Promise<void>>();
330
331
  private readonly listeners = new Map<TAgentSessionChangeListener, IAgentSessionListenerState>();
@@ -410,6 +411,14 @@ export class AgentSessionEngine implements IAgentSession {
410
411
  if (!Number.isSafeInteger(maxContextOverflowRetries) || maxContextOverflowRetries < 0) {
411
412
  throw new Error('maxContextOverflowRetries must be a non-negative integer.');
412
413
  }
414
+ if (options.contextCompactionBytes !== undefined && options.contextCompactionBytes !== false
415
+ && (!Number.isSafeInteger(options.contextCompactionBytes)
416
+ || options.contextCompactionBytes < 1 || options.contextCompactionBytes > 32 * 1024 * 1024)) {
417
+ throw new Error('contextCompactionBytes must be false or an integer from 1 through 33554432.');
418
+ }
419
+ if (typeof options.contextCompactionBytes === 'number' && !options.contextCompactor) {
420
+ throw new Error('contextCompactionBytes requires a contextCompactor.');
421
+ }
413
422
  const changeListenerTimeoutMs = options.changeListenerTimeoutMs ?? 30_000;
414
423
  if (!Number.isSafeInteger(changeListenerTimeoutMs) || changeListenerTimeoutMs <= 0) {
415
424
  throw new Error('changeListenerTimeoutMs must be a positive integer.');
@@ -509,14 +518,24 @@ export class AgentSessionEngine implements IAgentSession {
509
518
  private queuePersistence(): Promise<void> {
510
519
  if (!this.options.eventStore) return Promise.resolve();
511
520
  const snapshot = structuredClone(this.events);
521
+ if (this.pendingPersistence) {
522
+ this.pendingPersistence.snapshot = snapshot;
523
+ return this.pendingPersistence.task;
524
+ }
525
+ let pending: NonNullable<AgentSessionEngine['pendingPersistence']>;
512
526
  const operation = this.persistenceQueue.then(async () => {
527
+ if (this.pendingPersistence === pending) this.pendingPersistence = undefined;
513
528
  if (this.persistenceError !== undefined) throw this.persistenceError;
514
529
  this.persistenceRevision = await this.options.eventStore!.save(
515
530
  this.options.sessionId!,
516
- snapshot,
531
+ pending.snapshot,
517
532
  this.persistenceRevision,
518
533
  );
519
534
  });
535
+ // One durable snapshot covers every commit queued before this write begins. In-flight snapshots
536
+ // stay immutable, and callers still wait for the write that contains their event.
537
+ pending = { snapshot, task: operation };
538
+ this.pendingPersistence = pending;
520
539
  this.persistenceQueue = operation.catch((error) => {
521
540
  this.persistenceError ??= error;
522
541
  });
@@ -909,6 +928,18 @@ export class AgentSessionEngine implements IAgentSession {
909
928
  undefined,
910
929
  options.stopped === true,
911
930
  );
931
+ if (this.options.contextCompactor && this.options.contextCompactionBytes !== false
932
+ && this.options.eventStore?.archive
933
+ && getOpenAgentGenerationTransactions(this.events).length === 0
934
+ && getUncertainToolExecutionIntents(this.events).length === 0) {
935
+ const activeIds = new Set(this.events.map((event) => event.id));
936
+ for (const event of [...this.events]) {
937
+ if (event.type === 'context-compaction' && event.automatic
938
+ && event.coveredEventIds.some((id) => activeIds.has(id))) {
939
+ await this.archiveCompactedEventsLocked(event.id);
940
+ }
941
+ }
942
+ }
912
943
  });
913
944
  }
914
945
 
@@ -1219,7 +1250,7 @@ export class AgentSessionEngine implements IAgentSession {
1219
1250
  }
1220
1251
 
1221
1252
  private async performCompaction(
1222
- reason: 'context-overflow' | 'retention' | 'manual',
1253
+ reason: 'context-overflow' | 'context-budget' | 'retention' | 'manual',
1223
1254
  reportUsage: TAgentModelCallUsageReporter,
1224
1255
  abortSignal?: AbortSignal,
1225
1256
  ): Promise<IContextCompactionEvent | undefined> {
@@ -1228,7 +1259,7 @@ export class AgentSessionEngine implements IAgentSession {
1228
1259
  abortSignal?.throwIfAborted();
1229
1260
  const unresolvedIntents = getUncertainToolExecutionIntents(this.events);
1230
1261
  if (unresolvedIntents.length > 0) {
1231
- if (reason === 'context-overflow' || reason === 'retention') return undefined;
1262
+ if (reason === 'context-overflow' || reason === 'context-budget' || reason === 'retention') return undefined;
1232
1263
  throw new Error('Context compaction is blocked by unresolved tool execution intents.');
1233
1264
  }
1234
1265
  const openTransactions = getOpenAgentGenerationTransactions(this.events);
@@ -1238,7 +1269,7 @@ export class AgentSessionEngine implements IAgentSession {
1238
1269
  let coveredEvents: TAgentEvent[];
1239
1270
  if (openTransactions.length > 0) {
1240
1271
  if (reason === 'retention') return undefined;
1241
- if (reason !== 'context-overflow') {
1272
+ if (reason !== 'context-overflow' && reason !== 'context-budget') {
1242
1273
  throw new Error('Context compaction is blocked while a transactional generation is open.');
1243
1274
  }
1244
1275
  const openGenerationIds = new Set(
@@ -1296,6 +1327,7 @@ export class AgentSessionEngine implements IAgentSession {
1296
1327
  .slice(-(this.options.maxArchivedTransactionTombstones ?? 1000));
1297
1328
  const compaction = this.commitEvent(createAgentEvent<IContextCompactionEvent>({
1298
1329
  type: 'context-compaction',
1330
+ ...(reason === 'context-budget' ? { automatic: true as const } : {}),
1299
1331
  coveredEventIds: coveredEvents.map((event) => event.id),
1300
1332
  replacementEvents: modelMessagesToAgentEvents(replacementMessages),
1301
1333
  archivedTransactions: archivedTransactions.length > 0
@@ -1531,6 +1563,7 @@ export class AgentSessionEngine implements IAgentSession {
1531
1563
  preparationErrors: ReadonlyMap<string, unknown>,
1532
1564
  ledger: Map<string, IToolExecutionLedgerEntry>,
1533
1565
  getMessages: () => plugins.ModelMessage[],
1566
+ onPreview: (event: IAgentToolCallUpdateEvent) => void,
1534
1567
  ): plugins.ToolSet {
1535
1568
  const wrappedTools: plugins.ToolSet = {};
1536
1569
  for (const [toolName, toolDefinition] of Object.entries(tools)) {
@@ -1590,6 +1623,7 @@ export class AgentSessionEngine implements IAgentSession {
1590
1623
  result,
1591
1624
  resolveCompletion,
1592
1625
  rejectCompletion,
1626
+ (output) => onPreview({ toolCallId, toolName, input, output }),
1593
1627
  );
1594
1628
  }
1595
1629
  if (isPromiseLike(result)) {
@@ -1605,6 +1639,7 @@ export class AgentSessionEngine implements IAgentSession {
1605
1639
  deferredIterable,
1606
1640
  resolveCompletion,
1607
1641
  rejectCompletion,
1642
+ (output) => onPreview({ toolCallId, toolName, input, output }),
1608
1643
  );
1609
1644
  }
1610
1645
  resolveCompletion(result);
@@ -1629,6 +1664,7 @@ export class AgentSessionEngine implements IAgentSession {
1629
1664
  iterable: AsyncIterable<unknown>,
1630
1665
  resolveCompletion: (output: unknown) => void,
1631
1666
  rejectCompletion: (error: unknown) => void,
1667
+ onOutput: (output: unknown) => void,
1632
1668
  ): AsyncIterable<unknown> {
1633
1669
  const iterator = iterable[Symbol.asyncIterator]();
1634
1670
  let settled = false;
@@ -1660,7 +1696,11 @@ export class AgentSessionEngine implements IAgentSession {
1660
1696
  }
1661
1697
  return operationResult.then(
1662
1698
  (result) => {
1663
- if (!result.done && cacheOutput) lastOutput = result.value;
1699
+ if (!result.done && cacheOutput) {
1700
+ lastOutput = result.value;
1701
+ try { onOutput(result.value); }
1702
+ catch (error) { settleError(error); throw error; }
1703
+ }
1664
1704
  if (result.done) {
1665
1705
  if (rejectWhenDone) settleError(incompleteError());
1666
1706
  else settleSuccess();
@@ -1888,6 +1928,7 @@ export class AgentSessionEngine implements IAgentSession {
1888
1928
  let attempt = 0;
1889
1929
  let retriedMs = 0;
1890
1930
  let contextOverflowRetries = 0;
1931
+ let automaticCompactionChecked = false;
1891
1932
  let totalInput = 0;
1892
1933
  let totalOutput = 0;
1893
1934
  let totalCacheRead = 0;
@@ -1921,6 +1962,7 @@ export class AgentSessionEngine implements IAgentSession {
1921
1962
  const ledger = new Map<string, IToolExecutionLedgerEntry>();
1922
1963
  const executionIntentIds = new Map<string, string>();
1923
1964
  const preliminaryToolOutputs = new Map<string, IAgentToolCallUpdateEvent>();
1965
+ const finishedToolCallIds = new Set<string>();
1924
1966
 
1925
1967
  const beginInference = async (): Promise<string> => {
1926
1968
  const marker = this.commitEvent(createAgentEvent<IRuntimeEvent>({
@@ -2029,6 +2071,13 @@ export class AgentSessionEngine implements IAgentSession {
2029
2071
  preparationErrors,
2030
2072
  ledger,
2031
2073
  () => this.buildContext(this.eventsByIds(latestInferenceVisibleIds)),
2074
+ (event) => {
2075
+ const previous = preliminaryToolOutputs.get(event.toolCallId);
2076
+ if (!previous || !this.platform.isDeepEqual(previous.output, event.output)) {
2077
+ preliminaryToolOutputs.set(event.toolCallId, event);
2078
+ this.options.onToolCallUpdate?.(event);
2079
+ }
2080
+ },
2032
2081
  );
2033
2082
 
2034
2083
  const flushReasoning = (): void => {
@@ -2059,6 +2108,14 @@ export class AgentSessionEngine implements IAgentSession {
2059
2108
  abortSignal: combinedAbort.signal,
2060
2109
  prepareStep: async () => {
2061
2110
  await applyPendingInput();
2111
+ if (!automaticCompactionChecked && this.options.contextCompactor
2112
+ && this.options.contextCompactionBytes !== false) {
2113
+ automaticCompactionChecked = true;
2114
+ const bytes = new TextEncoder().encode(JSON.stringify(this.getModelMessages())).byteLength;
2115
+ if (bytes > (this.options.contextCompactionBytes ?? 256 * 1024)) {
2116
+ await this.performCompaction('context-budget', reportCompactionUsage, combinedAbort.signal);
2117
+ }
2118
+ }
2062
2119
  await beginInference();
2063
2120
  return { messages: this.buildContext(this.eventsByIds(latestInferenceVisibleIds)) };
2064
2121
  },
@@ -2103,6 +2160,10 @@ export class AgentSessionEngine implements IAgentSession {
2103
2160
  output: unknown;
2104
2161
  };
2105
2162
  if (toolResultChunk.preliminary === true) {
2163
+ // Locally executed previews are delivered at the iterator boundary, not from
2164
+ // this independently backpressured SDK stream, which may arrive after finish.
2165
+ if (ledger.has(toolResultChunk.toolCallId)) return;
2166
+ if (finishedToolCallIds.has(toolResultChunk.toolCallId)) return;
2106
2167
  const previous = preliminaryToolOutputs.get(toolResultChunk.toolCallId);
2107
2168
  if (!previous || !this.platform.isDeepEqual(previous.output, toolResultChunk.output)) {
2108
2169
  const event: IAgentToolCallUpdateEvent = {
@@ -2234,6 +2295,7 @@ export class AgentSessionEngine implements IAgentSession {
2234
2295
  return promise;
2235
2296
  },
2236
2297
  onToolExecutionEnd: async (finish) => {
2298
+ finishedToolCallIds.add(finish.toolCall.toolCallId);
2237
2299
  preliminaryToolOutputs.delete(finish.toolCall.toolCallId);
2238
2300
  const inferenceId = currentInferenceId ?? await beginInference();
2239
2301
  const previousResult = this.currentGenerationEvent(
@@ -321,12 +321,15 @@ export function openStoredSession(eventStore: IAgentEventStoreV2, sessionId: str
321
321
 
322
322
  Use an application-owned durable adapter for persistent sessions. Its `save(sessionId, events, expectedRevision)` must atomically compare the revision and return the new revision, or reject a conflict. Preserve the schema and supported values in canonical events; the package exports schema validators and `AgentEventStoreConflictError` for adapter implementations. Keep one active owner per session; compare-and-swap detects conflicting writes rather than merging competing sessions.
323
323
 
324
+ Commits queued before a save starts share one durable snapshot containing them all. An in-flight snapshot is immutable, and every caller and change notification still waits for the save containing its event. The adapter's revision advances per durable snapshot, not necessarily per event.
325
+
324
326
  `InMemoryAgentEventStore` is useful for tests and sessions that only need process-local storage. The Node root also exports the explicit `FileAgentEventStore` adapter. Neither storage selection nor a durable backend is implicit.
325
327
 
326
328
  ### Bound model context and active events
327
329
 
328
330
  - `contextBuilder({ events })` controls the model-message projection.
329
331
  - `contextCompactor(messages, events, { reason, abortSignal, reportUsage })` returns replacement model messages. Provide it to use `session.compact()` or automatic event retention. Report the usage of its model calls through `reportUsage`; see [What is counted](#what-is-counted).
332
+ - A compactor also enables proactive compaction with reason `context-budget` before inference. `contextCompactionBytes` defaults to 256 KiB of UTF-8 JSON model messages, accepts 1 through 32 MiB, and may be `false` to disable it. Only settled history is covered, never the current unsettled generation. Budget compactions carry `automatic: true`; after transactional finalization their covered events are archived when the store supports it and no open transaction or uncertain tool intent remains. Manual compaction is not automatically archived.
330
333
  - `eventRetention: { maxEvents }` triggers compaction and archival when the active event count exceeds the threshold. It also requires an event store with `archive()` support.
331
334
  - Context overflow invokes the configured compactor, or the `onContextOverflow(messages, { abortSignal, reportUsage })` handler. Without either, generation throws `ContextOverflowError`. `maxContextOverflowRetries` defaults to `3`.
332
335
  - Open transactions and uncertain tool intents constrain when compaction and archival can proceed. Resolve them before manual compaction.
@@ -150,6 +150,8 @@ export type TAgentConversationEvent =
150
150
 
151
151
  export interface IContextCompactionEvent extends IAgentEventBase {
152
152
  type: 'context-compaction';
153
+ /** A proactive budget compaction whose settled source events may be archived automatically. */
154
+ automatic?: true;
153
155
  coveredEventIds: string[];
154
156
  replacementEvents: TAgentConversationEvent[];
155
157
  archivedTransactions?: IArchivedAgentGenerationTransaction[];
@@ -130,7 +130,7 @@ export type TAgentContextBuilder = (
130
130
 
131
131
  export interface IAgentContextCompactionOptions {
132
132
  abortSignal?: AbortSignal;
133
- reason: 'context-overflow' | 'retention' | 'manual';
133
+ reason: 'context-overflow' | 'context-budget' | 'retention' | 'manual';
134
134
  /**
135
135
  * Reports the usage of each model call the compactor makes, into the session's `onUsage` as
136
136
  * `source: 'compaction'`. The session always supplies it. Report every call before the returned
@@ -190,6 +190,11 @@ export interface IAgentSessionOptions {
190
190
  contextBuilder?: TAgentContextBuilder;
191
191
  /** Explicit context compactor used by manual and event-retention compaction. */
192
192
  contextCompactor?: TAgentContextCompactor;
193
+ /** Compact settled history before inference when model messages exceed this UTF-8 JSON byte budget.
194
+ * Defaults to 256 KiB when a compactor is supplied; false disables proactive compaction.
195
+ * The current unsettled generation is never summarized or archived.
196
+ */
197
+ contextCompactionBytes?: number | false;
193
198
  /** Optional bounded active-event policy. Requires contextCompactor and eventStore.archive. */
194
199
  eventRetention?: IAgentEventRetentionOptions;
195
200
  /** Maximum wait for each session change listener. Default: 30 seconds. */
@@ -476,6 +476,9 @@ const validateAgentEvents = (
476
476
  }
477
477
  break;
478
478
  case 'context-compaction':
479
+ if (eventValue.automatic !== undefined && eventValue.automatic !== true) {
480
+ validationError(`${eventPath}.automatic`, 'must be true when present.');
481
+ }
479
482
  assertStringArray(eventValue.coveredEventIds, `${eventPath}.coveredEventIds`);
480
483
  validateAgentEvents(eventValue.replacementEvents, `${eventPath}.replacementEvents`, true);
481
484
  if (eventValue.archivedTransactions !== undefined) {