@modelprofile.com/flexharness 10.13.0 → 10.14.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.
@@ -23,6 +23,8 @@ export type TFlexRetryReason = plugins.TAgentRetryReason;
23
23
  * Every call carries `provider` and `requestedModelId`; key usage caps on those two.
24
24
  */
25
25
  export type TFlexModelCallUsage = plugins.TAgentModelCallUsage;
26
+ /** A model call's usage as harness events carry it: a reported call also states its cache hit ratio. */
27
+ export type TFlexObservedModelCallUsage = plugins.TAgentObservedModelCallUsage;
26
28
  export interface IFlexTextPromptPart {
27
29
  type: 'text';
28
30
  text: string;
@@ -109,6 +111,8 @@ export interface IFlexToolMessagePart {
109
111
  output?: TJsonValue;
110
112
  error?: string;
111
113
  childSessionId?: string;
114
+ /** For a catalog call a `run_code` program made: the `run_code` call's ID. */
115
+ parentToolCallId?: string;
112
116
  model?: IFlexModelIdentity;
113
117
  /** ISO time the tool call began. Absent on parts recorded before part times existed. */
114
118
  startedAt?: string;
@@ -614,6 +618,10 @@ export type TFlexCatalogCallError = {
614
618
  more?: number;
615
619
  /** The lookup that returns the method's declaration. */
616
620
  see: string;
621
+ } | {
622
+ error: 'denied';
623
+ method: string;
624
+ reason: string;
617
625
  };
618
626
  export interface IFlexCatalogToolDefinition {
619
627
  description: string;
@@ -631,7 +639,10 @@ export type TFlexCatalogSchema = {
631
639
  export interface IFlexCatalogRunContext<TScope = unknown> {
632
640
  /** The dotted path the model called. */
633
641
  readonly method: string;
634
- /** The `execute` call's ID; pass it with permission requests. */
642
+ /**
643
+ * The call's ID, which its tool part and permission requests carry: the `execute` call's, or for
644
+ * a call inside `run_code` the inner call's, `<run_code call ID>.<n>`.
645
+ */
635
646
  readonly toolCallId: string;
636
647
  readonly abortSignal: AbortSignal;
637
648
  /** The run's tool-provider context: scope, session, run and `requestPermission`. */
@@ -663,6 +674,27 @@ export interface IFlexCatalogMethod<TScope = unknown, TParams = any, TResult = u
663
674
  declaration?: string;
664
675
  /** Runs the method with validated parameters. */
665
676
  run(params: TParams, context: IFlexCatalogRunContext<TScope>): TResult | PromiseLike<TResult> | AsyncIterable<TResult>;
677
+ /**
678
+ * Decides each validated call before it runs: `run` (the default without this hook), `propose`
679
+ * to hand it to the catalog's `onProposals` instead of running it, or `{ deny }` to refuse it.
680
+ */
681
+ onCall?(params: TParams, context: IFlexCatalogRunContext<TScope>): TFlexCatalogCallDecision | PromiseLike<TFlexCatalogCallDecision>;
682
+ }
683
+ export type TFlexCatalogCallDecision = 'run' | 'propose' | {
684
+ deny: string;
685
+ };
686
+ /** A call a method's `onCall` decided to propose instead of running. */
687
+ export interface IFlexCatalogProposal {
688
+ /** The call's ID: the `execute` call's, or the inner call's inside `run_code`. */
689
+ id: string;
690
+ method: string;
691
+ params: unknown;
692
+ }
693
+ export interface IFlexCatalogProposalContext<TScope = unknown> {
694
+ /** The `execute` or `run_code` call that made the proposals. */
695
+ readonly toolCallId: string;
696
+ readonly abortSignal: AbortSignal;
697
+ readonly provider: Readonly<IFlexToolProviderContext<TScope>>;
666
698
  }
667
699
  /** A named type that method declarations refer to; it needs a `declaration`, a `schema`, or both. */
668
700
  export interface IFlexCatalogType {
@@ -677,6 +709,12 @@ export interface IFlexCatalogType {
677
709
  export interface IFlexToolCatalog<TScope = unknown> {
678
710
  methods: readonly IFlexCatalogMethod<TScope>[];
679
711
  types?: readonly IFlexCatalogType[];
712
+ /**
713
+ * Receives the calls `onCall` proposed, as one batch: the proposed call of an `execute`, or every
714
+ * call a `run_code` program proposed, once the program finished. A failed program proposes
715
+ * nothing. What it returns is what the model sees for them.
716
+ */
717
+ onProposals?(proposals: readonly IFlexCatalogProposal[], context: IFlexCatalogProposalContext<TScope>): unknown;
680
718
  }
681
719
  export interface IFlexToolCatalogOptions {
682
720
  /**
@@ -684,6 +722,54 @@ export interface IFlexToolCatalogOptions {
684
722
  * across the session, or `json-schema` with each method's self-contained JSON Schema.
685
723
  */
686
724
  declarations?: 'typescript' | 'json-schema';
725
+ /**
726
+ * Adds `run_code`, which runs a short TypeScript or JavaScript program against the catalog in a
727
+ * QuickJS sandbox. Needs the optional peers `quickjs-emscripten-core`,
728
+ * `@jitl/quickjs-ng-wasmfile-release-sync` and `amaro`.
729
+ */
730
+ codeMode?: boolean | IFlexCodeModeOptions;
731
+ }
732
+ export interface IFlexCodeModeOptions {
733
+ limits?: Partial<IFlexCodeModeLimits>;
734
+ }
735
+ /** The bounds of one `run_code` program. */
736
+ export interface IFlexCodeModeLimits {
737
+ /** UTF-8 bytes of the program. */
738
+ maxSourceBytes: number;
739
+ /** Milliseconds the program may compute; time waiting for calls does not count. */
740
+ cpuMs: number;
741
+ /** Milliseconds the program may take in all, not counting waits for a permission decision. */
742
+ wallMs: number;
743
+ /** Bytes of the sandbox's heap. */
744
+ memoryBytes: number;
745
+ /**
746
+ * Bytes of the sandbox's stack. QuickJS runs on the host's stack as well, so a larger value lets
747
+ * deep recursion reach the host's limit first; the program then fails at its `stack` limit all
748
+ * the same.
749
+ */
750
+ stackBytes: number;
751
+ /** Catalog calls per program. */
752
+ maxCalls: number;
753
+ /** Catalog calls running at once; further calls wait for a slot. */
754
+ maxConcurrentCalls: number;
755
+ /** UTF-8 bytes of console output kept; more is cut off. */
756
+ maxLogBytes: number;
757
+ }
758
+ export declare const FLEX_CODE_MODE_TOOL_NAME = "run_code";
759
+ export declare const FLEX_CODE_MODE_DEFAULT_LIMITS: Readonly<IFlexCodeModeLimits>;
760
+ export declare const FLEX_CODE_MODE_MAXIMUM_LIMITS: Readonly<IFlexCodeModeLimits>;
761
+ /** What `run_code` reports to the model, as JSON, when a program does not finish. */
762
+ export interface IFlexCodeRunFailure {
763
+ error: 'syntax_error' | 'program_error' | 'limit_exceeded' | 'aborted';
764
+ /** The limit that stopped the program, for `limit_exceeded`. */
765
+ limit?: 'source' | 'cpu' | 'wall' | 'memory' | 'stack' | 'calls';
766
+ name?: string;
767
+ message: string;
768
+ /** The program's line, when known. */
769
+ line?: number;
770
+ /** Catalog calls the program made. */
771
+ calls: number;
772
+ logs?: string;
687
773
  }
688
774
  export interface IFlexResourceToolProviderResolverContext<TScope> extends IFlexSessionGeneration {
689
775
  scopeId: string;
@@ -1399,7 +1485,7 @@ export type TFlexModelUsageEvent = IFlexEventBase & {
1399
1485
  readonly type: 'model.usage';
1400
1486
  readonly runId?: string;
1401
1487
  readonly source: 'generation' | 'compaction';
1402
- } & Readonly<TFlexModelCallUsage>;
1488
+ } & Readonly<TFlexObservedModelCallUsage>;
1403
1489
  export interface IFlexPromptQueueEvent extends IFlexEventBase {
1404
1490
  readonly type: 'prompt.queued' | 'prompt.started' | 'prompt.running' | 'prompt.finished';
1405
1491
  readonly queueId: string;
@@ -44,6 +44,27 @@ export const FLEX_TOOL_CATALOG_LIMITS = Object.freeze({
44
44
  maxDescribeBytes: 64 * 1024,
45
45
  maxParamIssues: 10,
46
46
  });
47
+ export const FLEX_CODE_MODE_TOOL_NAME = 'run_code';
48
+ export const FLEX_CODE_MODE_DEFAULT_LIMITS = Object.freeze({
49
+ maxSourceBytes: 32 * 1024,
50
+ cpuMs: 5_000,
51
+ wallMs: 60_000,
52
+ memoryBytes: 64 * 1024 * 1024,
53
+ stackBytes: 64 * 1024,
54
+ maxCalls: 200,
55
+ maxConcurrentCalls: 8,
56
+ maxLogBytes: 16 * 1024,
57
+ });
58
+ export const FLEX_CODE_MODE_MAXIMUM_LIMITS = Object.freeze({
59
+ maxSourceBytes: 256 * 1024,
60
+ cpuMs: 60_000,
61
+ wallMs: 30 * 60_000,
62
+ memoryBytes: 512 * 1024 * 1024,
63
+ stackBytes: 256 * 1024,
64
+ maxCalls: 10_000,
65
+ maxConcurrentCalls: 64,
66
+ maxLogBytes: 256 * 1024,
67
+ });
47
68
  export const FLEX_PROJECT_MANAGEMENT_SCHEMA_VERSION = 1;
48
69
  export const FLEX_SESSION_GENERATION_ID_MAX_BYTES = 128;
49
70
  export const FLEX_SESSION_GENERATION_COHORT_MAX_ENTRIES = 2048;
@@ -74,4 +95,4 @@ export const FLEX_REVERSION_MAX_AFFECTED_WORKSPACES = 64;
74
95
  export const FLEX_REVERSION_WORKSPACE_ID_MAX_BYTES = 512;
75
96
  export const FLEX_REVERSION_WORKSPACE_LABEL_MAX_BYTES = 2048;
76
97
  export const FLEX_REVERSION_REASON_CODE_MAX_BYTES = 128;
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeVRBLHlGQUF5RjtBQUN6RixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUQsY0FBYyxFQUFFLENBQUM7SUFDakIscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixlQUFlLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ2pDLFlBQVksRUFBRSxJQUFJLEdBQUcsSUFBSTtJQUN6Qix5QkFBeUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7Q0FDekMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5RCxjQUFjLEVBQUUsRUFBRTtJQUNsQixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLGVBQWUsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFDbEMsWUFBWSxFQUFFLElBQUksR0FBRyxJQUFJO0lBQ3pCLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtDQUMxQyxDQUFDLENBQUM7QUErVUgsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDeEQsTUFBTSxFQUFFLGNBQWM7SUFDdEIsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixPQUFPLEVBQUUsU0FBUztDQUNWLENBQUMsQ0FBQztBQUVaLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixH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
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNlRBLHlGQUF5RjtBQUN6RixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUQsY0FBYyxFQUFFLENBQUM7SUFDakIscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixlQUFlLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ2pDLFlBQVksRUFBRSxJQUFJLEdBQUcsSUFBSTtJQUN6Qix5QkFBeUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7Q0FDekMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5RCxjQUFjLEVBQUUsRUFBRTtJQUNsQixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLGVBQWUsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFDbEMsWUFBWSxFQUFFLElBQUksR0FBRyxJQUFJO0lBQ3pCLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtDQUMxQyxDQUFDLENBQUM7QUErVUgsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDeEQsTUFBTSxFQUFFLGNBQWM7SUFDdEIsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixPQUFPLEVBQUUsU0FBUztDQUNWLENBQUMsQ0FBQztBQUVaLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixH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
@@ -7,9 +7,70 @@ import { asSchema, jsonSchema } from 'ai';
7
7
  import { Validator as JsonSchemaValidator } from '@cfworker/json-schema';
8
8
  export { asSchema, jsonSchema, JsonSchemaValidator };
9
9
  export type { FlexibleSchema, JSONSchema7, ModelMessage, Schema } from 'ai';
10
+ /** A value inside a QuickJS context; the host disposes every handle it owns. */
11
+ export interface IQuickJsHandle {
12
+ readonly alive: boolean;
13
+ dispose(): void;
14
+ }
15
+ export type TQuickJsResult = {
16
+ value: IQuickJsHandle;
17
+ error?: undefined;
18
+ } | {
19
+ error: IQuickJsHandle;
20
+ value?: undefined;
21
+ };
22
+ export interface IQuickJsDeferredPromise {
23
+ readonly handle: IQuickJsHandle;
24
+ readonly alive: boolean;
25
+ resolve(value?: IQuickJsHandle): void;
26
+ reject(value?: IQuickJsHandle): void;
27
+ dispose(): void;
28
+ }
29
+ export interface IQuickJsContext {
30
+ readonly global: IQuickJsHandle;
31
+ newString(value: string): IQuickJsHandle;
32
+ getString(handle: IQuickJsHandle): string;
33
+ newFunction(name: string, implementation: (...args: IQuickJsHandle[]) => IQuickJsHandle | void): IQuickJsHandle;
34
+ setProp(target: IQuickJsHandle, key: string, value: IQuickJsHandle): void;
35
+ newPromise(): IQuickJsDeferredPromise;
36
+ newError(message: string): IQuickJsHandle;
37
+ evalCode(code: string, filename?: string): TQuickJsResult;
38
+ resolvePromise(handle: IQuickJsHandle): Promise<TQuickJsResult>;
39
+ dump(handle: IQuickJsHandle): unknown;
40
+ dispose(): void;
41
+ }
42
+ export interface IQuickJsRuntime {
43
+ readonly alive: boolean;
44
+ setMemoryLimit(bytes: number): void;
45
+ setMaxStackSize(bytes: number): void;
46
+ setInterruptHandler(handler: () => boolean): void;
47
+ newContext(): IQuickJsContext;
48
+ /** Runs the queued promise jobs; `error` is an exception none of them caught. */
49
+ executePendingJobs(): {
50
+ error?: IQuickJsHandle;
51
+ };
52
+ dispose(): void;
53
+ }
54
+ export interface IQuickJsModule {
55
+ newRuntime(): IQuickJsRuntime;
56
+ }
57
+ /** A failed strip, as amaro reports it. */
58
+ export interface IAmaroError {
59
+ code?: string;
60
+ message?: string;
61
+ startLine?: number;
62
+ }
63
+ export interface ICodeSandboxEngine {
64
+ /** A new WebAssembly instance of QuickJS-ng, with a memory of its own. */
65
+ newModule(): Promise<IQuickJsModule>;
66
+ /** Removes TypeScript type syntax, keeping every line where it was. */
67
+ stripTypes(source: string): string;
68
+ }
69
+ /** Loads QuickJS and amaro, the optional peers code mode needs. */
70
+ export declare const importCodeSandboxEngine: () => Promise<ICodeSandboxEngine>;
10
71
  import { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z } from '@modelprofile.com/flexharness-agent';
11
72
  export { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, };
12
- export type { IAgentAppliedInput, ISmartAiCacheDispatch, IAgentEventArchiveV2, IAgentContextCompactionOptions, IAgentEventSnapshotV2, IAgentEventStoreV2, IAgentGenerateResult, IAgentGenerationHandle, IAgentGenerationLease, IAgentRetryEvent, IAgentRunResult, IAgentSession, IAgentSessionOptions, IAgentToolCallUpdateEvent, IAgentRuntimeEventPayload, IGenerationBegunEvent, IGenerationExecutionCompletedEvent, IGenerationExecutionStartedEvent, IGenerationOutcomeEvent, IToolExecutionContext, IToolExecutionIntentEvent, IToolJobSnapshot, IToolJobState, IToolJobStore, TAgentContextBuilder, TAgentContextCompactor, TAgentEvent, TAgentGenerationOutcome, TAgentModelCallUsage, TAgentModelCallUsageEvent, TAgentRetryReason, TAgentToolCallFinishEvent, TAgentToolExecutionReconciliationOptions, } from '@modelprofile.com/flexharness-agent';
73
+ export type { IAgentAppliedInput, ISmartAiCacheDispatch, IAgentEventArchiveV2, IAgentContextCompactionOptions, IAgentEventSnapshotV2, IAgentEventStoreV2, IAgentGenerateResult, IAgentGenerationHandle, IAgentGenerationLease, IAgentRetryEvent, IAgentRunResult, IAgentSession, IAgentSessionOptions, IAgentToolCallUpdateEvent, IAgentRuntimeEventPayload, IGenerationBegunEvent, IGenerationExecutionCompletedEvent, IGenerationExecutionStartedEvent, IGenerationOutcomeEvent, IToolExecutionContext, IToolExecutionIntentEvent, IToolJobSnapshot, IToolJobState, IToolJobStore, TAgentContextBuilder, TAgentContextCompactor, TAgentEvent, TAgentGenerationOutcome, TAgentModelCallUsage, TAgentModelCallUsageEvent, TAgentObservedModelCallUsage, TAgentRetryReason, TAgentToolCallFinishEvent, TAgentToolExecutionReconciliationOptions, } from '@modelprofile.com/flexharness-agent';
13
74
  import { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo } from '@modelprofile.com/flexharness-models';
14
75
  export { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo };
15
76
  export type { IModelLimitInfo } from '@modelprofile.com/flexharness-models';
@@ -8,9 +8,23 @@ export { AsyncLocalStorage, crypto, fs, path };
8
8
  import { asSchema, jsonSchema } from 'ai';
9
9
  import { Validator as JsonSchemaValidator } from '@cfworker/json-schema';
10
10
  export { asSchema, jsonSchema, JsonSchemaValidator };
11
+ /** Loads QuickJS and amaro, the optional peers code mode needs. */
12
+ export const importCodeSandboxEngine = async () => {
13
+ const [core, variant, amaro] = await Promise.all([
14
+ import('quickjs-emscripten-core'),
15
+ import('@jitl/quickjs-ng-wasmfile-release-sync'),
16
+ import('amaro'),
17
+ ]);
18
+ // The variant's typings resolve as CommonJS; at run time the default export is the variant.
19
+ const quickjsVariant = variant.default;
20
+ return {
21
+ newModule: async () => await core.newQuickJSWASMModuleFromVariant(quickjsVariant),
22
+ stripTypes: (source) => amaro.transformSync(source, { mode: 'strip-only' }).code,
23
+ };
24
+ };
11
25
  // @push.rocks scope
12
26
  import { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, } from '@modelprofile.com/flexharness-agent';
13
27
  export { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, };
14
28
  import { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo } from '@modelprofile.com/flexharness-models';
15
29
  export { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo };
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFFL0Msb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLElBQUksbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0FBR3JELG9CQUFvQjtBQUNwQixPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixFQUN0Qiw4QkFBOEIsRUFDOUIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLDZCQUE2QixFQUM3Qiw4QkFBOEIsRUFDOUIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQixJQUFJLEVBQ0osMkJBQTJCLEVBQzNCLDRCQUE0QixFQUM1QixDQUFDLEdBQ0YsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixFQUN0Qiw4QkFBOEIsRUFDOUIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLDZCQUE2QixFQUM3Qiw4QkFBOEIsRUFDOUIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQixJQUFJLEVBQ0osMkJBQTJCLEVBQzNCLDRCQUE0QixFQUM1QixDQUFDLEdBQ0YsQ0FBQztBQXFDRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVsSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyJ9
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFFL0Msb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLElBQUksbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0FBa0VyRCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxJQUFpQyxFQUFFO0lBQzdFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUMvQyxNQUFNLENBQUMseUJBQXlCLENBQUM7UUFDakMsTUFBTSxDQUFDLHdDQUF3QyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsNEZBQTRGO0lBQzVGLE1BQU0sY0FBYyxHQUFJLE9BQWdDLENBQUMsT0FBcUUsQ0FBQztJQUMvSCxPQUFPO1FBQ0wsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUMsY0FBYyxDQUE4QjtRQUM5RyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSTtLQUNqRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsb0JBQW9CO0FBQ3BCLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsc0JBQXNCLEVBQ3RCLDhCQUE4QixFQUM5QixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsNkJBQTZCLEVBQzdCLDhCQUE4QixFQUM5QiwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLElBQUksRUFDSiwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLENBQUMsR0FDRixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsc0JBQXNCLEVBQ3RCLDhCQUE4QixFQUM5QixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsNkJBQTZCLEVBQzdCLDhCQUE4QixFQUM5QiwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLElBQUksRUFDSiwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLENBQUMsR0FDRixDQUFDO0FBc0NGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRWxILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDIn0=
@@ -1,4 +1,4 @@
1
- import type { IFlexAgentSessionPolicy, IFlexCallbackLimits, IFlexHarnessOptions, IFlexHarnessStores, IFlexPromptQueueLimits, IFlexReversionLimits, IFlexSlashCommandHandlerRegistration, IFlexSlashCommandTemplateRegistration, IFlexSubagentDefinition, IFlexToolCatalogOptions, TFlexSlashCommandRegistration } from './interfaces.js';
1
+ import type { IFlexAgentSessionPolicy, IFlexCallbackLimits, IFlexHarnessOptions, IFlexHarnessStores, IFlexPromptQueueLimits, IFlexReversionLimits, IFlexSlashCommandHandlerRegistration, IFlexSlashCommandTemplateRegistration, IFlexCodeModeLimits, IFlexSubagentDefinition, IFlexToolCatalogOptions, TFlexSlashCommandRegistration } from './interfaces.js';
2
2
  export type TRegisteredSlashCommand<TScope> = Readonly<IFlexSlashCommandTemplateRegistration> | Readonly<IFlexSlashCommandHandlerRegistration<TScope>>;
3
3
  export interface INormalizedProjectManagementTools {
4
4
  readonly task: boolean;
@@ -12,7 +12,12 @@ export interface INormalizedBuiltInTools {
12
12
  export declare const maxSubagentNameBytes = 128;
13
13
  export declare function normalizeAllowedTools(names: readonly string[] | undefined, label?: string): readonly string[] | undefined;
14
14
  export declare function normalizeSubagents(definitions: readonly IFlexSubagentDefinition[] | undefined): ReadonlyMap<string, Readonly<IFlexSubagentDefinition>>;
15
- export declare function normalizeToolCatalogOptions(options: IFlexHarnessOptions<unknown>['toolCatalog']): Readonly<Required<IFlexToolCatalogOptions>>;
15
+ export interface INormalizedToolCatalogOptions {
16
+ readonly declarations: 'typescript' | 'json-schema';
17
+ /** The limits of `run_code`; absent while code mode is off. */
18
+ readonly codeMode?: Readonly<IFlexCodeModeLimits>;
19
+ }
20
+ export declare function normalizeToolCatalogOptions(options: IFlexToolCatalogOptions | undefined): INormalizedToolCatalogOptions;
16
21
  export declare function normalizeBuiltInTools(options: IFlexHarnessOptions<unknown>['builtInTools']): INormalizedBuiltInTools;
17
22
  export declare function normalizeSlashCommands<TScope>(registrations: readonly TFlexSlashCommandRegistration<TScope>[] | undefined): ReadonlyMap<string, TRegisteredSlashCommand<TScope>>;
18
23
  export declare function resolveBoundedPositiveInteger(value: number | undefined, name: string, defaultValue: number, maximum: number): number;
@@ -1,5 +1,5 @@
1
1
  import { FlexHarnessValidationError } from './errors.js';
2
- import { FLEX_REVERSION_DEFAULT_LIMITS, FLEX_REVERSION_MAXIMUM_LIMITS, } from './interfaces.js';
2
+ import { FLEX_CODE_MODE_DEFAULT_LIMITS, FLEX_CODE_MODE_MAXIMUM_LIMITS, FLEX_REVERSION_DEFAULT_LIMITS, FLEX_REVERSION_MAXIMUM_LIMITS, } from './interfaces.js';
3
3
  import { FLEX_SLASH_COMMAND_MAX_INPUT_BYTES, isReservedSlashCommandName, isValidSlashCommandName, } from './utils.slashcommands.js';
4
4
  import { validateUtf8String } from './utils.validation.js';
5
5
  const DEFAULT_CALLBACK_LIMITS = {
@@ -96,23 +96,51 @@ export function normalizeSubagents(definitions) {
96
96
  }
97
97
  return Object.freeze(normalized);
98
98
  }
99
+ const isPlainOptions = (value) => !!value
100
+ && typeof value === 'object'
101
+ && !Array.isArray(value)
102
+ && [Object.prototype, null].includes(Object.getPrototypeOf(value));
99
103
  export function normalizeToolCatalogOptions(options) {
100
104
  if (options === undefined)
101
105
  return Object.freeze({ declarations: 'typescript' });
102
- if (!options
103
- || typeof options !== 'object'
104
- || Array.isArray(options)
105
- || ![Object.prototype, null].includes(Object.getPrototypeOf(options))) {
106
+ if (!isPlainOptions(options))
106
107
  throw new FlexHarnessValidationError('toolCatalog must be a plain object.');
107
- }
108
- const unsupported = Object.keys(options).find((key) => key !== 'declarations');
108
+ const unsupported = Object.keys(options).find((key) => key !== 'declarations' && key !== 'codeMode');
109
109
  if (unsupported)
110
110
  throw new FlexHarnessValidationError(`toolCatalog does not support "${unsupported}".`);
111
111
  const declarations = options.declarations ?? 'typescript';
112
112
  if (declarations !== 'typescript' && declarations !== 'json-schema') {
113
113
  throw new FlexHarnessValidationError('toolCatalog.declarations must be "typescript" or "json-schema".');
114
114
  }
115
- return Object.freeze({ declarations });
115
+ const codeMode = normalizeCodeModeLimits(options.codeMode);
116
+ return Object.freeze({ declarations, ...(codeMode ? { codeMode } : {}) });
117
+ }
118
+ function normalizeCodeModeLimits(codeMode) {
119
+ if (codeMode === undefined || codeMode === false)
120
+ return undefined;
121
+ if (codeMode === true)
122
+ return FLEX_CODE_MODE_DEFAULT_LIMITS;
123
+ if (!isPlainOptions(codeMode)) {
124
+ throw new FlexHarnessValidationError('toolCatalog.codeMode must be a boolean or a plain object.');
125
+ }
126
+ const unsupported = Object.keys(codeMode).find((key) => key !== 'limits');
127
+ if (unsupported)
128
+ throw new FlexHarnessValidationError(`toolCatalog.codeMode does not support "${unsupported}".`);
129
+ const limits = codeMode.limits ?? {};
130
+ if (!isPlainOptions(limits))
131
+ throw new FlexHarnessValidationError('toolCatalog.codeMode.limits must be a plain object.');
132
+ const resolved = { ...FLEX_CODE_MODE_DEFAULT_LIMITS };
133
+ for (const [key, value] of Object.entries(limits)) {
134
+ if (!Object.prototype.hasOwnProperty.call(FLEX_CODE_MODE_MAXIMUM_LIMITS, key)) {
135
+ throw new FlexHarnessValidationError(`toolCatalog.codeMode.limits does not support "${key}".`);
136
+ }
137
+ const maximum = FLEX_CODE_MODE_MAXIMUM_LIMITS[key];
138
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1 || value > maximum) {
139
+ throw new FlexHarnessValidationError(`toolCatalog.codeMode.limits.${key} must be an integer from 1 through ${maximum}.`);
140
+ }
141
+ resolved[key] = value;
142
+ }
143
+ return Object.freeze(resolved);
116
144
  }
117
145
  export function normalizeBuiltInTools(options) {
118
146
  if (options === undefined)
@@ -317,4 +345,4 @@ export function requireHarnessStores(stores) {
317
345
  }
318
346
  return stores;
319
347
  }
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuaGFybmVzc29wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91dGlscy5oYXJuZXNzb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsR0FDOUIsTUFBTSxpQkFBaUIsQ0FBQztBQWN6QixPQUFPLEVBQ0wsa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQix1QkFBdUIsR0FDeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWlCM0QsTUFBTSx1QkFBdUIsR0FBa0M7SUFDN0QsU0FBUyxFQUFFLE1BQU07SUFDakIsY0FBYyxFQUFFLElBQUksR0FBRyxJQUFJO0lBQzNCLFFBQVEsRUFBRSxLQUFLO0NBQ2hCLENBQUM7QUFDRixNQUFNLDJCQUEyQixHQUFxQztJQUNwRSwrQkFBK0IsRUFBRSxFQUFFO0lBQ25DLDZCQUE2QixFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSTtJQUMvQyxvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLHdCQUF3QixFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSTtJQUMzQyw0QkFBNEIsRUFBRSxFQUFFO0NBQ2pDLENBQUM7QUFDRixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDeEMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFDdEMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sc0JBQXNCLEdBQUcsK0JBQStCLENBQUM7QUFDL0QsTUFBTSxnQ0FBZ0MsR0FBRyx5RUFBeUUsQ0FBQztBQUNuSCxNQUFNLDRCQUE0QixHQUFHLEdBQUcsQ0FBQztBQUN6QyxNQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUM3QyxNQUFNLDRCQUE0QixHQUFHLGtDQUFrQyxDQUFDO0FBQ3hFLE1BQU0sb0NBQW9DLEdBQUcsTUFBTSxDQUFDO0FBQ3BELE1BQU0sb0NBQW9DLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFNUQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxLQUFvQyxFQUNwQyxLQUFLLEdBQUcsY0FBYztJQUV0QixJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sSUFBSSwwQkFBMEIsQ0FBQyxHQUFHLEtBQUssa0NBQWtDLG1CQUFtQixTQUFTLENBQUMsQ0FBQztJQUMvRyxDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMvQixNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7SUFDaEMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlFLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE1BQU0sSUFBSSwwQkFBMEIsQ0FBQyxHQUFHLEtBQUssSUFBSSxLQUFLLDBEQUEwRCxDQUFDLENBQUM7UUFDcEgsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFBRSxNQUFNLElBQUksMEJBQTBCLENBQUMsR0FBRyxLQUFLLDZCQUE2QixJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsV0FBMkQ7SUFFM0QsSUFBSSxXQUFXLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFDL0UsTUFBTSxJQUFJLDBCQUEwQixDQUNsQywyQ0FBMkMsc0JBQXNCLGVBQWUsQ0FDakYsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBNkMsQ0FBQztJQUN4RSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3hELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxJQUNFLENBQUMsVUFBVTtlQUNSLE9BQU8sVUFBVSxLQUFLLFFBQVE7ZUFDOUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7ZUFDekIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDeEUsQ0FBQztZQUNELE1BQU0sSUFBSSwwQkFBMEIsQ0FBQyxhQUFhLEtBQUssMkJBQTJCLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQ25HLENBQUM7UUFDRixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSwwQkFBMEIsQ0FBQyxhQUFhLEtBQUssdUJBQXVCLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDakcsQ0FBQztRQUNELGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxLQUFLLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RixrQkFBa0IsQ0FDaEIsVUFBVSxDQUFDLFdBQVcsRUFDdEIsYUFBYSxLQUFLLGVBQWUsRUFDakMsMkJBQTJCLENBQzVCLENBQUM7UUFDRixJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkMsa0JBQWtCLENBQ2hCLFVBQVUsQ0FBQyxTQUFTLEVBQ3BCLGFBQWEsS0FBSyxhQUFhLEVBQy9CLHlCQUF5QixDQUMxQixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxrQkFBa0IsQ0FDaEIsVUFBVSxDQUFDLE1BQU0sRUFDakIsYUFBYSxLQUFLLFVBQVUsRUFDNUIsc0JBQXNCLENBQ3ZCLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFDRSxVQUFVLENBQUMsUUFBUSxLQUFLLFNBQVM7ZUFDOUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQzFFLENBQUM7WUFDRCxNQUFNLElBQUksMEJBQTBCLENBQUMsYUFBYSxLQUFLLHdDQUF3QyxDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksMEJBQTBCLENBQUMsa0NBQWtDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFDRCxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM1QyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDckIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEYsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6RSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9FLEdBQUcsQ0FBQyxVQUFVLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0MsWUFBWSxFQUFFLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxLQUFLLGdCQUFnQixDQUFDO2FBQ2pHLENBQUM7U0FDSCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsT0FBb0Q7SUFFcEQsSUFBSSxPQUFPLEtBQUssU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLElBQ0UsQ0FBQyxPQUFPO1dBQ0wsT0FBTyxPQUFPLEtBQUssUUFBUTtXQUMzQixLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztXQUN0QixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNyRSxDQUFDO1FBQ0QsTUFBTSxJQUFJLDBCQUEwQixDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssY0FBYyxDQUFDLENBQUM7SUFDL0UsSUFBSSxXQUFXO1FBQUUsTUFBTSxJQUFJLDBCQUEwQixDQUFDLGlDQUFpQyxXQUFXLElBQUksQ0FBQyxDQUFDO0lBQ3hHLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDO0lBQzFELElBQUksWUFBWSxLQUFLLFlBQVksSUFBSSxZQUFZLEtBQUssYUFBYSxFQUFFLENBQUM7UUFDcEUsTUFBTSxJQUFJLDBCQUEwQixDQUFDLGlFQUFpRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsT0FBcUQ7SUFFckQsSUFBSSxPQUFPLEtBQUssU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLElBQ0UsQ0FBQyxPQUFPO1dBQ0wsT0FBTyxPQUFPLEtBQUssUUFBUTtXQUMzQixLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztXQUN0QixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNyRSxDQUFDO1FBQ0QsTUFBTSxJQUFJLDBCQUEwQixDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3JDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLElBQUksV0FBVztRQUFFLE1BQU0sSUFBSSwwQkFBMEIsQ0FBQyxrQ0FBa0MsV0FBVyxJQUFJLENBQUMsQ0FBQztJQUN6RyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLE9BQU8sT0FBTyxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0RixNQUFNLElBQUksMEJBQTBCLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7SUFDcEQsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxJQUNFLENBQUMsaUJBQWlCO1dBQ2YsT0FBTyxpQkFBaUIsS0FBSyxRQUFRO1dBQ3JDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7V0FDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUMvRSxDQUFDO1FBQ0QsTUFBTSxJQUFJLDBCQUEwQixDQUFDLHdEQUF3RCxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUNELE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztTQUM1RCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksMEJBQTBCLENBQ2xDLG9EQUFvRCx3QkFBd0IsSUFBSSxDQUNqRixDQUFDO0lBQ0osQ0FBQztJQUNELEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBVSxFQUFFLENBQUM7UUFDMUQsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLElBQUksT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4RixNQUFNLElBQUksMEJBQTBCLENBQUMsa0NBQWtDLEdBQUcscUJBQXFCLENBQUMsQ0FBQztRQUNuRyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNuQixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxLQUFLO1FBQzdDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDL0IsSUFBSSxFQUFFLGlCQUFpQixDQUFDLElBQUksSUFBSSxJQUFJO1lBQ3BDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLElBQUksSUFBSTtZQUNwQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsVUFBVSxJQUFJLElBQUk7U0FDakQsQ0FBQztLQUNILENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLGFBQTJFO0lBRTNFLElBQUksYUFBYSxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3pGLE1BQU0sSUFBSSwwQkFBMEIsQ0FDbEMsK0NBQStDLDRCQUE0QixpQkFBaUIsQ0FDN0YsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBMkMsQ0FBQztJQUN0RSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzFELE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUNFLENBQUMsWUFBWTtlQUNWLE9BQU8sWUFBWSxLQUFLLFFBQVE7ZUFDaEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7ZUFDM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsRUFDMUUsQ0FBQztZQUNELE1BQU0sSUFBSSwwQkFBMEIsQ0FBQyxpQkFBaUIsS0FBSywyQkFBMkIsQ0FBQyxDQUFDO1FBQzFGLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkYsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRixNQUFNLFNBQVMsR0FBRyxXQUFXO1lBQzNCLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakUsSUFBSSxXQUFXLElBQUksV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzlDLE1BQU0sSUFBSSwwQkFBMEIsQ0FDbEMsaUJBQWlCLEtBQUssbURBQW1ELENBQzFFLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxPQUFPLFlBQVksQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekYsTUFBTSxJQUFJLDBCQUEwQixDQUFDLGlCQUFpQixLQUFLLG9CQUFvQixDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUNELElBQUksMEJBQTBCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLDBCQUEwQixDQUNsQyxrQkFBa0IsWUFBWSxDQUFDLElBQUksZ0JBQWdCLENBQ3BELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSwwQkFBMEIsQ0FBQyw0QkFBNEIsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDMUYsQ0FBQztRQUNELElBQUksWUFBWSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzQyxrQkFBa0IsQ0FDaEIsWUFBWSxDQUFDLFdBQVcsRUFDeEIsaUJBQWlCLEtBQUssZUFBZSxFQUNyQywrQkFBK0IsRUFDL0IsSUFBSSxDQUNMLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLGtCQUFrQixDQUNoQixRQUFRLEVBQ1IsaUJBQWlCLEtBQUssWUFBWSxFQUNsQyw0QkFBNEIsRUFDNUIsSUFBSSxDQUNMLENBQUM7WUFDRixVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDOUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJO2dCQUN2QixHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsS0FBSyxTQUFTO29CQUN4QyxDQUFDLENBQUMsRUFBRTtvQkFDSixDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM5QyxRQUFRO2FBQ1QsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDckMsSUFBSSxPQUFPLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLDBCQUEwQixDQUFDLGlCQUFpQixLQUFLLCtCQUErQixDQUFDLENBQUM7WUFDOUYsQ0FBQztZQUNELFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUM5QyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7Z0JBQ3ZCLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxLQUFLLFNBQVM7b0JBQ3hDLENBQUMsQ0FBQyxFQUFFO29CQUNKLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzlDLE9BQU87YUFDUixDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxNQUFNLFVBQVUsNkJBQTZCLENBQzNDLEtBQXlCLEVBQ3pCLElBQVksRUFDWixZQUFvQixFQUNwQixPQUFlO0lBRWYsTUFBTSxRQUFRLEdBQUcsS0FBSyxJQUFJLFlBQVksQ0FBQztJQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUMxRSxNQUFNLElBQUksMEJBQTBCLENBQUMsR0FBRyxJQUFJLHNDQUFzQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLG9DQUFvQyxDQUNsRCxPQUFvQztJQUVwQyxPQUFPLDZCQUE2QixDQUNsQyxPQUFPLENBQUMsNkJBQTZCO1dBQ2hDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSwrQkFBK0IsRUFDaEUsK0JBQStCLEVBQy9CLG9DQUFvQyxFQUNwQyxvQ0FBb0MsQ0FDckMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsU0FBOEIsRUFBRTtJQUNwRSxNQUFNLFFBQVEsR0FBRztRQUNmLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxJQUFJLHVCQUF1QixDQUFDLFNBQVM7UUFDaEUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLElBQUksdUJBQXVCLENBQUMsY0FBYztRQUMvRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSx1QkFBdUIsQ0FBQyxRQUFRO0tBQzlELENBQUM7SUFDRixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLElBQUksMEJBQTBCLENBQUMsa0JBQWtCLElBQUksOEJBQThCLENBQUMsQ0FBQztRQUM3RixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLFNBQWlDLEVBQUU7SUFFbkMsTUFBTSxRQUFRLEdBQUc7UUFDZiwrQkFBK0IsRUFBRSxNQUFNLENBQUMsK0JBQStCO2VBQ2xFLDJCQUEyQixDQUFDLCtCQUErQjtRQUNoRSw2QkFBNkIsRUFBRSxNQUFNLENBQUMsNkJBQTZCO2VBQzlELDJCQUEyQixDQUFDLDZCQUE2QjtRQUM5RCxvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO2VBQzVDLDJCQUEyQixDQUFDLG9CQUFvQjtRQUNyRCx3QkFBd0IsRUFBRSxNQUFNLENBQUMsd0JBQXdCO2VBQ3BELDJCQUEyQixDQUFDLHdCQUF3QjtRQUN6RCw0QkFBNEIsRUFBRSxNQUFNLENBQUMsNEJBQTRCO2VBQzVELDJCQUEyQixDQUFDLDRCQUE0QjtLQUM5RCxDQUFDO0lBQ0YsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUMsTUFBTSxJQUFJLDBCQUEwQixDQUFDLHFCQUFxQixJQUFJLDhCQUE4QixDQUFDLENBQUM7UUFDaEcsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxTQUErQixFQUFFO0lBRWpDLE1BQU0sUUFBUSxHQUFHO1FBQ2YsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixJQUFJLDZCQUE2QixDQUFDLGlCQUFpQjtRQUM5RixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSw2QkFBNkIsQ0FBQyxXQUFXO1FBQzVFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSw2QkFBNkIsQ0FBQyxpQkFBaUI7UUFDOUYsMkJBQTJCLEVBQUUsTUFBTSxDQUFDLDJCQUEyQjtlQUMxRCw2QkFBNkIsQ0FBQywyQkFBMkI7S0FDL0QsQ0FBQztJQUNGLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsNkJBQTZCLENBQUMsSUFBa0MsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDO1lBQ2pFLE1BQU0sSUFBSSwwQkFBMEIsQ0FDbEMsbUJBQW1CLElBQUksc0NBQXNDLE9BQU8sR0FBRyxDQUN4RSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxTQUEwQyxFQUFFO0lBRTVDLE9BQU87UUFDTCxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pGLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDL0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNqSCxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pGLEdBQUcsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEtBQUssU0FBUztZQUM5QyxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2hFLEdBQUcsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEtBQUssU0FBUztZQUMvQyxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2xFLEdBQUcsQ0FBQyxNQUFNLENBQUMsK0JBQStCLEtBQUssU0FBUztZQUN0RCxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxFQUFFLCtCQUErQixFQUFFLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1FBQ2hGLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLEtBQUssU0FBUztZQUN2RCxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO1FBQ2xGLEdBQUcsQ0FBQyxNQUFNLENBQUMseUJBQXlCLEtBQUssU0FBUztZQUNoRCxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0tBQ3JFLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQTBCO0lBQzdELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxFQUFFLGlCQUFpQixDQUFDO0lBQ3BELElBQ0UsQ0FBQyxpQkFBaUI7V0FDZixPQUFPLGlCQUFpQixDQUFDLElBQUksS0FBSyxVQUFVO1dBQzVDLE9BQU8saUJBQWlCLENBQUMsSUFBSSxLQUFLLFVBQVU7V0FDNUMsT0FBTyxpQkFBaUIsQ0FBQyxnQkFBZ0IsS0FBSyxVQUFVO1dBQ3hELE9BQU8saUJBQWlCLENBQUMsY0FBYyxLQUFLLFVBQVUsRUFDekQsQ0FBQztRQUNELE1BQU0sSUFBSSwwQkFBMEIsQ0FDbEMsc0ZBQXNGLENBQ3ZGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyJ9
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuaGFybmVzc29wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91dGlscy5oYXJuZXNzb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0IsNkJBQTZCLEVBQzdCLDZCQUE2QixHQUM5QixNQUFNLGlCQUFpQixDQUFDO0FBZXpCLE9BQU8sRUFDTCxrQ0FBa0MsRUFDbEMsMEJBQTBCLEVBQzFCLHVCQUF1QixHQUN4QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBaUIzRCxNQUFNLHVCQUF1QixHQUFrQztJQUM3RCxTQUFTLEVBQUUsTUFBTTtJQUNqQixjQUFjLEVBQUUsSUFBSSxHQUFHLElBQUk7SUFDM0IsUUFBUSxFQUFFLEtBQUs7Q0FDaEIsQ0FBQztBQUNGLE1BQU0sMkJBQTJCLEdBQXFDO0lBQ3BFLCtCQUErQixFQUFFLEVBQUU7SUFDbkMsNkJBQTZCLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJO0lBQy9DLG9CQUFvQixFQUFFLEVBQUU7SUFDeEIsd0JBQXdCLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJO0lBQzNDLDRCQUE0QixFQUFFLEVBQUU7Q0FDakMsQ0FBQztBQUNGLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUN4QyxNQUFNLDJCQUEyQixHQUFHLElBQUksQ0FBQztBQUN6QyxNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztBQUN0QyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDaEMsTUFBTSx1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