@dbx-tools/shared-model-gateway 0.9.36

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.
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Browser-safe model-gateway routing contracts.
3
+ *
4
+ * @module
5
+ */
6
+ import { z } from "zod";
7
+ /** Client protocol accepted by the gateway. */
8
+ export declare const ClientProtocolSchema: z.ZodEnum<{
9
+ "openai-responses": "openai-responses";
10
+ "openai-chat": "openai-chat";
11
+ "anthropic-messages": "anthropic-messages";
12
+ "openai-embeddings": "openai-embeddings";
13
+ }>;
14
+ /** Client protocol accepted by the gateway. */
15
+ export type ClientProtocol = z.infer<typeof ClientProtocolSchema>;
16
+ /** Upstream protocol selected by capability routing. */
17
+ export declare const UpstreamProtocolSchema: z.ZodEnum<{
18
+ "databricks-ai-gateway-codex": "databricks-ai-gateway-codex";
19
+ "databricks-responses": "databricks-responses";
20
+ "databricks-open-responses": "databricks-open-responses";
21
+ "databricks-chat": "databricks-chat";
22
+ "databricks-anthropic": "databricks-anthropic";
23
+ "databricks-embeddings": "databricks-embeddings";
24
+ "ai-sdk": "ai-sdk";
25
+ }>;
26
+ /** Upstream protocol selected by capability routing. */
27
+ export type UpstreamProtocol = z.infer<typeof UpstreamProtocolSchema>;
28
+ /** Capabilities used to determine whether a request can remain on a direct path. */
29
+ export declare const ModelCapabilitiesSchema: z.ZodObject<{
30
+ responses: z.ZodBoolean;
31
+ openResponses: z.ZodBoolean;
32
+ chat: z.ZodBoolean;
33
+ anthropic: z.ZodBoolean;
34
+ embeddings: z.ZodBoolean;
35
+ aiGatewayCodex: z.ZodBoolean;
36
+ tools: z.ZodBoolean;
37
+ reasoning: z.ZodBoolean;
38
+ streaming: z.ZodBoolean;
39
+ parallelTools: z.ZodBoolean;
40
+ customTools: z.ZodBoolean;
41
+ structuredOutput: z.ZodBoolean;
42
+ webSearch: z.ZodBoolean;
43
+ }, z.core.$strip>;
44
+ /** Capabilities used to determine whether a request can remain on a direct path. */
45
+ export type ModelCapabilities = z.infer<typeof ModelCapabilitiesSchema>;
46
+ /** One discovered model plus every alias accepted by the gateway. */
47
+ export declare const ModelTargetSchema: z.ZodObject<{
48
+ id: z.ZodString;
49
+ aliases: z.ZodArray<z.ZodString>;
50
+ displayName: z.ZodString;
51
+ family: z.ZodOptional<z.ZodString>;
52
+ modelServiceName: z.ZodOptional<z.ZodString>;
53
+ endpoint: z.ZodOptional<z.ZodObject<{
54
+ name: z.ZodString;
55
+ displayName: z.ZodOptional<z.ZodString>;
56
+ family: z.ZodOptional<z.ZodString>;
57
+ task: z.ZodOptional<z.ZodString>;
58
+ state: z.ZodOptional<z.ZodString>;
59
+ description: z.ZodOptional<z.ZodString>;
60
+ supportsTools: z.ZodOptional<z.ZodBoolean>;
61
+ profile: z.ZodOptional<z.ZodObject<{
62
+ quality: z.ZodOptional<z.ZodNumber>;
63
+ speed: z.ZodOptional<z.ZodNumber>;
64
+ cost: z.ZodOptional<z.ZodNumber>;
65
+ }, z.core.$strip>>;
66
+ class: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>>;
67
+ serviceNames: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
68
+ modelServiceName: z.ZodOptional<z.ZodString>;
69
+ reasoningEfforts: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>>;
70
+ status: z.ZodOptional<z.ZodObject<{
71
+ deprecated: z.ZodDefault<z.ZodBoolean>;
72
+ }, z.core.$strip>>;
73
+ dimension: z.ZodOptional<z.ZodNumber>;
74
+ }, z.core.$strip>>;
75
+ capabilities: z.ZodObject<{
76
+ responses: z.ZodBoolean;
77
+ openResponses: z.ZodBoolean;
78
+ chat: z.ZodBoolean;
79
+ anthropic: z.ZodBoolean;
80
+ embeddings: z.ZodBoolean;
81
+ aiGatewayCodex: z.ZodBoolean;
82
+ tools: z.ZodBoolean;
83
+ reasoning: z.ZodBoolean;
84
+ streaming: z.ZodBoolean;
85
+ parallelTools: z.ZodBoolean;
86
+ customTools: z.ZodBoolean;
87
+ structuredOutput: z.ZodBoolean;
88
+ webSearch: z.ZodBoolean;
89
+ }, z.core.$strip>;
90
+ reasoningEfforts: z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>;
91
+ }, z.core.$strip>;
92
+ /** One discovered model plus every alias accepted by the gateway. */
93
+ export type ModelTarget = z.infer<typeof ModelTargetSchema>;
94
+ /** Request features that constrain direct protocol routes. */
95
+ export declare const RequestedFeaturesSchema: z.ZodObject<{
96
+ background: z.ZodBoolean;
97
+ customTools: z.ZodBoolean;
98
+ parallelTools: z.ZodBoolean;
99
+ previousResponse: z.ZodBoolean;
100
+ reasoning: z.ZodBoolean;
101
+ storage: z.ZodBoolean;
102
+ structuredOutput: z.ZodBoolean;
103
+ tools: z.ZodBoolean;
104
+ unsupportedOpenResponsesTools: z.ZodBoolean;
105
+ webSearch: z.ZodBoolean;
106
+ }, z.core.$strip>;
107
+ /** Request features that constrain direct protocol routes. */
108
+ export type RequestedFeatures = z.infer<typeof RequestedFeaturesSchema>;
109
+ /** Deterministic route selected for one gateway request. */
110
+ export declare const GatewayRouteSchema: z.ZodObject<{
111
+ clientProtocol: z.ZodEnum<{
112
+ "openai-responses": "openai-responses";
113
+ "openai-chat": "openai-chat";
114
+ "anthropic-messages": "anthropic-messages";
115
+ "openai-embeddings": "openai-embeddings";
116
+ }>;
117
+ upstreamProtocol: z.ZodEnum<{
118
+ "databricks-ai-gateway-codex": "databricks-ai-gateway-codex";
119
+ "databricks-responses": "databricks-responses";
120
+ "databricks-open-responses": "databricks-open-responses";
121
+ "databricks-chat": "databricks-chat";
122
+ "databricks-anthropic": "databricks-anthropic";
123
+ "databricks-embeddings": "databricks-embeddings";
124
+ "ai-sdk": "ai-sdk";
125
+ }>;
126
+ target: z.ZodObject<{
127
+ id: z.ZodString;
128
+ aliases: z.ZodArray<z.ZodString>;
129
+ displayName: z.ZodString;
130
+ family: z.ZodOptional<z.ZodString>;
131
+ modelServiceName: z.ZodOptional<z.ZodString>;
132
+ endpoint: z.ZodOptional<z.ZodObject<{
133
+ name: z.ZodString;
134
+ displayName: z.ZodOptional<z.ZodString>;
135
+ family: z.ZodOptional<z.ZodString>;
136
+ task: z.ZodOptional<z.ZodString>;
137
+ state: z.ZodOptional<z.ZodString>;
138
+ description: z.ZodOptional<z.ZodString>;
139
+ supportsTools: z.ZodOptional<z.ZodBoolean>;
140
+ profile: z.ZodOptional<z.ZodObject<{
141
+ quality: z.ZodOptional<z.ZodNumber>;
142
+ speed: z.ZodOptional<z.ZodNumber>;
143
+ cost: z.ZodOptional<z.ZodNumber>;
144
+ }, z.core.$strip>>;
145
+ class: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>>;
146
+ serviceNames: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
147
+ modelServiceName: z.ZodOptional<z.ZodString>;
148
+ reasoningEfforts: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>>;
149
+ status: z.ZodOptional<z.ZodObject<{
150
+ deprecated: z.ZodDefault<z.ZodBoolean>;
151
+ }, z.core.$strip>>;
152
+ dimension: z.ZodOptional<z.ZodNumber>;
153
+ }, z.core.$strip>>;
154
+ capabilities: z.ZodObject<{
155
+ responses: z.ZodBoolean;
156
+ openResponses: z.ZodBoolean;
157
+ chat: z.ZodBoolean;
158
+ anthropic: z.ZodBoolean;
159
+ embeddings: z.ZodBoolean;
160
+ aiGatewayCodex: z.ZodBoolean;
161
+ tools: z.ZodBoolean;
162
+ reasoning: z.ZodBoolean;
163
+ streaming: z.ZodBoolean;
164
+ parallelTools: z.ZodBoolean;
165
+ customTools: z.ZodBoolean;
166
+ structuredOutput: z.ZodBoolean;
167
+ webSearch: z.ZodBoolean;
168
+ }, z.core.$strip>;
169
+ reasoningEfforts: z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>;
170
+ }, z.core.$strip>;
171
+ upstreamModel: z.ZodString;
172
+ translateRequest: z.ZodBoolean;
173
+ translateResponse: z.ZodBoolean;
174
+ }, z.core.$strip>;
175
+ /** Deterministic route selected for one gateway request. */
176
+ export type GatewayRoute = z.infer<typeof GatewayRouteSchema>;
177
+ /** Typed capability changes for one dynamically discovered model. */
178
+ export declare const ModelCapabilityOverrideSchema: z.ZodObject<{
179
+ model: z.ZodString;
180
+ capabilities: z.ZodObject<{
181
+ responses: z.ZodOptional<z.ZodBoolean>;
182
+ openResponses: z.ZodOptional<z.ZodBoolean>;
183
+ chat: z.ZodOptional<z.ZodBoolean>;
184
+ anthropic: z.ZodOptional<z.ZodBoolean>;
185
+ embeddings: z.ZodOptional<z.ZodBoolean>;
186
+ aiGatewayCodex: z.ZodOptional<z.ZodBoolean>;
187
+ tools: z.ZodOptional<z.ZodBoolean>;
188
+ reasoning: z.ZodOptional<z.ZodBoolean>;
189
+ streaming: z.ZodOptional<z.ZodBoolean>;
190
+ parallelTools: z.ZodOptional<z.ZodBoolean>;
191
+ customTools: z.ZodOptional<z.ZodBoolean>;
192
+ structuredOutput: z.ZodOptional<z.ZodBoolean>;
193
+ webSearch: z.ZodOptional<z.ZodBoolean>;
194
+ }, z.core.$strip>;
195
+ }, z.core.$strip>;
196
+ /** Typed capability changes for one dynamically discovered model. */
197
+ export type ModelCapabilityOverride = z.infer<typeof ModelCapabilityOverrideSchema>;
198
+ /** Inputs required to select one deterministic gateway route. */
199
+ export declare const ResolveRouteInputSchema: z.ZodObject<{
200
+ clientProtocol: z.ZodEnum<{
201
+ "openai-responses": "openai-responses";
202
+ "openai-chat": "openai-chat";
203
+ "anthropic-messages": "anthropic-messages";
204
+ "openai-embeddings": "openai-embeddings";
205
+ }>;
206
+ requestedModel: z.ZodString;
207
+ originator: z.ZodOptional<z.ZodString>;
208
+ features: z.ZodObject<{
209
+ background: z.ZodBoolean;
210
+ customTools: z.ZodBoolean;
211
+ parallelTools: z.ZodBoolean;
212
+ previousResponse: z.ZodBoolean;
213
+ reasoning: z.ZodBoolean;
214
+ storage: z.ZodBoolean;
215
+ structuredOutput: z.ZodBoolean;
216
+ tools: z.ZodBoolean;
217
+ unsupportedOpenResponsesTools: z.ZodBoolean;
218
+ webSearch: z.ZodBoolean;
219
+ }, z.core.$strip>;
220
+ target: z.ZodObject<{
221
+ id: z.ZodString;
222
+ aliases: z.ZodArray<z.ZodString>;
223
+ displayName: z.ZodString;
224
+ family: z.ZodOptional<z.ZodString>;
225
+ modelServiceName: z.ZodOptional<z.ZodString>;
226
+ endpoint: z.ZodOptional<z.ZodObject<{
227
+ name: z.ZodString;
228
+ displayName: z.ZodOptional<z.ZodString>;
229
+ family: z.ZodOptional<z.ZodString>;
230
+ task: z.ZodOptional<z.ZodString>;
231
+ state: z.ZodOptional<z.ZodString>;
232
+ description: z.ZodOptional<z.ZodString>;
233
+ supportsTools: z.ZodOptional<z.ZodBoolean>;
234
+ profile: z.ZodOptional<z.ZodObject<{
235
+ quality: z.ZodOptional<z.ZodNumber>;
236
+ speed: z.ZodOptional<z.ZodNumber>;
237
+ cost: z.ZodOptional<z.ZodNumber>;
238
+ }, z.core.$strip>>;
239
+ class: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>>;
240
+ serviceNames: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
241
+ modelServiceName: z.ZodOptional<z.ZodString>;
242
+ reasoningEfforts: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>>;
243
+ status: z.ZodOptional<z.ZodObject<{
244
+ deprecated: z.ZodDefault<z.ZodBoolean>;
245
+ }, z.core.$strip>>;
246
+ dimension: z.ZodOptional<z.ZodNumber>;
247
+ }, z.core.$strip>>;
248
+ capabilities: z.ZodObject<{
249
+ responses: z.ZodBoolean;
250
+ openResponses: z.ZodBoolean;
251
+ chat: z.ZodBoolean;
252
+ anthropic: z.ZodBoolean;
253
+ embeddings: z.ZodBoolean;
254
+ aiGatewayCodex: z.ZodBoolean;
255
+ tools: z.ZodBoolean;
256
+ reasoning: z.ZodBoolean;
257
+ streaming: z.ZodBoolean;
258
+ parallelTools: z.ZodBoolean;
259
+ customTools: z.ZodBoolean;
260
+ structuredOutput: z.ZodBoolean;
261
+ webSearch: z.ZodBoolean;
262
+ }, z.core.$strip>;
263
+ reasoningEfforts: z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>;
264
+ }, z.core.$strip>;
265
+ }, z.core.$strip>;
266
+ /** Inputs required to select one deterministic gateway route. */
267
+ export type ResolveRouteInput = z.infer<typeof ResolveRouteInputSchema>;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Browser-safe model-gateway routing contracts.
3
+ *
4
+ * @module
5
+ */
6
+ import { model } from "@dbx-tools/shared-model";
7
+ import { z } from "zod";
8
+ /** Client protocol accepted by the gateway. */
9
+ export const ClientProtocolSchema = z.enum([
10
+ "openai-responses",
11
+ "openai-chat",
12
+ "anthropic-messages",
13
+ "openai-embeddings",
14
+ ]);
15
+ /** Upstream protocol selected by capability routing. */
16
+ export const UpstreamProtocolSchema = z.enum([
17
+ "databricks-ai-gateway-codex",
18
+ "databricks-responses",
19
+ "databricks-open-responses",
20
+ "databricks-chat",
21
+ "databricks-anthropic",
22
+ "databricks-embeddings",
23
+ "ai-sdk",
24
+ ]);
25
+ /** Capabilities used to determine whether a request can remain on a direct path. */
26
+ export const ModelCapabilitiesSchema = z.object({
27
+ responses: z.boolean(),
28
+ openResponses: z.boolean(),
29
+ chat: z.boolean(),
30
+ anthropic: z.boolean(),
31
+ embeddings: z.boolean(),
32
+ aiGatewayCodex: z.boolean(),
33
+ tools: z.boolean(),
34
+ reasoning: z.boolean(),
35
+ streaming: z.boolean(),
36
+ parallelTools: z.boolean(),
37
+ customTools: z.boolean(),
38
+ structuredOutput: z.boolean(),
39
+ webSearch: z.boolean(),
40
+ });
41
+ /** One discovered model plus every alias accepted by the gateway. */
42
+ export const ModelTargetSchema = z.object({
43
+ id: z.string().min(1),
44
+ aliases: z.array(z.string().min(1)),
45
+ displayName: z.string().min(1),
46
+ family: z.string().optional(),
47
+ modelServiceName: z.string().optional(),
48
+ endpoint: model.ServingEndpointSummarySchema.optional(),
49
+ capabilities: ModelCapabilitiesSchema,
50
+ reasoningEfforts: z.array(model.ReasoningEffortSchema),
51
+ });
52
+ /** Request features that constrain direct protocol routes. */
53
+ export const RequestedFeaturesSchema = z.object({
54
+ background: z.boolean(),
55
+ customTools: z.boolean(),
56
+ parallelTools: z.boolean(),
57
+ previousResponse: z.boolean(),
58
+ reasoning: z.boolean(),
59
+ storage: z.boolean(),
60
+ structuredOutput: z.boolean(),
61
+ tools: z.boolean(),
62
+ unsupportedOpenResponsesTools: z.boolean(),
63
+ webSearch: z.boolean(),
64
+ });
65
+ /** Deterministic route selected for one gateway request. */
66
+ export const GatewayRouteSchema = z.object({
67
+ clientProtocol: ClientProtocolSchema,
68
+ upstreamProtocol: UpstreamProtocolSchema,
69
+ target: ModelTargetSchema,
70
+ upstreamModel: z.string().min(1),
71
+ translateRequest: z.boolean(),
72
+ translateResponse: z.boolean(),
73
+ });
74
+ /** Typed capability changes for one dynamically discovered model. */
75
+ export const ModelCapabilityOverrideSchema = z.object({
76
+ model: z.string().min(1),
77
+ capabilities: ModelCapabilitiesSchema.partial(),
78
+ });
79
+ /** Inputs required to select one deterministic gateway route. */
80
+ export const ResolveRouteInputSchema = z.object({
81
+ clientProtocol: ClientProtocolSchema,
82
+ requestedModel: z.string().min(1),
83
+ originator: z.string().optional(),
84
+ features: RequestedFeaturesSchema,
85
+ target: ModelTargetSchema,
86
+ });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekMsa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixvQkFBb0I7SUFDcEIsbUJBQW1CO0NBQ3BCLENBQUMsQ0FBQztBQUlILHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNDLDZCQUE2QjtJQUM3QixzQkFBc0I7SUFDdEIsMkJBQTJCO0lBQzNCLGlCQUFpQjtJQUNqQixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLFFBQVE7Q0FDVCxDQUFDLENBQUM7QUFJSCxvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN0QixhQUFhLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUMxQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUNqQixTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN0QixVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN2QixjQUFjLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUMzQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUNsQixTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN0QixTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN0QixhQUFhLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUMxQixXQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN4QixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQzdCLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3ZCLENBQUMsQ0FBQztBQUlILHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3ZDLFFBQVEsRUFBRSxLQUFLLENBQUMsNEJBQTRCLENBQUMsUUFBUSxFQUFFO0lBQ3ZELFlBQVksRUFBRSx1QkFBdUI7SUFDckMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUM7Q0FDdkQsQ0FBQyxDQUFDO0FBSUgsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDOUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDdkIsV0FBVyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDeEIsYUFBYSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDMUIsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUM3QixTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN0QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUNwQixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQzdCLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQ2xCLDZCQUE2QixFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDMUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7Q0FDdkIsQ0FBQyxDQUFDO0FBSUgsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDekMsY0FBYyxFQUFFLG9CQUFvQjtJQUNwQyxnQkFBZ0IsRUFBRSxzQkFBc0I7SUFDeEMsTUFBTSxFQUFFLGlCQUFpQjtJQUN6QixhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUM3QixpQkFBaUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0NBQy9CLENBQUMsQ0FBQztBQUlILHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3BELEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4QixZQUFZLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxFQUFFO0NBQ2hELENBQUMsQ0FBQztBQUlILGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzlDLGNBQWMsRUFBRSxvQkFBb0I7SUFDcEMsY0FBYyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLFFBQVEsRUFBRSx1QkFBdUI7SUFDakMsTUFBTSxFQUFFLGlCQUFpQjtDQUMxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBtb2RlbC1nYXRld2F5IHJvdXRpbmcgY29udHJhY3RzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBtb2RlbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLyoqIENsaWVudCBwcm90b2NvbCBhY2NlcHRlZCBieSB0aGUgZ2F0ZXdheS4gKi9cbmV4cG9ydCBjb25zdCBDbGllbnRQcm90b2NvbFNjaGVtYSA9IHouZW51bShbXG4gIFwib3BlbmFpLXJlc3BvbnNlc1wiLFxuICBcIm9wZW5haS1jaGF0XCIsXG4gIFwiYW50aHJvcGljLW1lc3NhZ2VzXCIsXG4gIFwib3BlbmFpLWVtYmVkZGluZ3NcIixcbl0pO1xuLyoqIENsaWVudCBwcm90b2NvbCBhY2NlcHRlZCBieSB0aGUgZ2F0ZXdheS4gKi9cbmV4cG9ydCB0eXBlIENsaWVudFByb3RvY29sID0gei5pbmZlcjx0eXBlb2YgQ2xpZW50UHJvdG9jb2xTY2hlbWE+O1xuXG4vKiogVXBzdHJlYW0gcHJvdG9jb2wgc2VsZWN0ZWQgYnkgY2FwYWJpbGl0eSByb3V0aW5nLiAqL1xuZXhwb3J0IGNvbnN0IFVwc3RyZWFtUHJvdG9jb2xTY2hlbWEgPSB6LmVudW0oW1xuICBcImRhdGFicmlja3MtYWktZ2F0ZXdheS1jb2RleFwiLFxuICBcImRhdGFicmlja3MtcmVzcG9uc2VzXCIsXG4gIFwiZGF0YWJyaWNrcy1vcGVuLXJlc3BvbnNlc1wiLFxuICBcImRhdGFicmlja3MtY2hhdFwiLFxuICBcImRhdGFicmlja3MtYW50aHJvcGljXCIsXG4gIFwiZGF0YWJyaWNrcy1lbWJlZGRpbmdzXCIsXG4gIFwiYWktc2RrXCIsXG5dKTtcbi8qKiBVcHN0cmVhbSBwcm90b2NvbCBzZWxlY3RlZCBieSBjYXBhYmlsaXR5IHJvdXRpbmcuICovXG5leHBvcnQgdHlwZSBVcHN0cmVhbVByb3RvY29sID0gei5pbmZlcjx0eXBlb2YgVXBzdHJlYW1Qcm90b2NvbFNjaGVtYT47XG5cbi8qKiBDYXBhYmlsaXRpZXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHJlcXVlc3QgY2FuIHJlbWFpbiBvbiBhIGRpcmVjdCBwYXRoLiAqL1xuZXhwb3J0IGNvbnN0IE1vZGVsQ2FwYWJpbGl0aWVzU2NoZW1hID0gei5vYmplY3Qoe1xuICByZXNwb25zZXM6IHouYm9vbGVhbigpLFxuICBvcGVuUmVzcG9uc2VzOiB6LmJvb2xlYW4oKSxcbiAgY2hhdDogei5ib29sZWFuKCksXG4gIGFudGhyb3BpYzogei5ib29sZWFuKCksXG4gIGVtYmVkZGluZ3M6IHouYm9vbGVhbigpLFxuICBhaUdhdGV3YXlDb2RleDogei5ib29sZWFuKCksXG4gIHRvb2xzOiB6LmJvb2xlYW4oKSxcbiAgcmVhc29uaW5nOiB6LmJvb2xlYW4oKSxcbiAgc3RyZWFtaW5nOiB6LmJvb2xlYW4oKSxcbiAgcGFyYWxsZWxUb29sczogei5ib29sZWFuKCksXG4gIGN1c3RvbVRvb2xzOiB6LmJvb2xlYW4oKSxcbiAgc3RydWN0dXJlZE91dHB1dDogei5ib29sZWFuKCksXG4gIHdlYlNlYXJjaDogei5ib29sZWFuKCksXG59KTtcbi8qKiBDYXBhYmlsaXRpZXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHJlcXVlc3QgY2FuIHJlbWFpbiBvbiBhIGRpcmVjdCBwYXRoLiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxDYXBhYmlsaXRpZXMgPSB6LmluZmVyPHR5cGVvZiBNb2RlbENhcGFiaWxpdGllc1NjaGVtYT47XG5cbi8qKiBPbmUgZGlzY292ZXJlZCBtb2RlbCBwbHVzIGV2ZXJ5IGFsaWFzIGFjY2VwdGVkIGJ5IHRoZSBnYXRld2F5LiAqL1xuZXhwb3J0IGNvbnN0IE1vZGVsVGFyZ2V0U2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKS5taW4oMSksXG4gIGFsaWFzZXM6IHouYXJyYXkoei5zdHJpbmcoKS5taW4oMSkpLFxuICBkaXNwbGF5TmFtZTogei5zdHJpbmcoKS5taW4oMSksXG4gIGZhbWlseTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbFNlcnZpY2VOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVuZHBvaW50OiBtb2RlbC5TZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5U2NoZW1hLm9wdGlvbmFsKCksXG4gIGNhcGFiaWxpdGllczogTW9kZWxDYXBhYmlsaXRpZXNTY2hlbWEsXG4gIHJlYXNvbmluZ0VmZm9ydHM6IHouYXJyYXkobW9kZWwuUmVhc29uaW5nRWZmb3J0U2NoZW1hKSxcbn0pO1xuLyoqIE9uZSBkaXNjb3ZlcmVkIG1vZGVsIHBsdXMgZXZlcnkgYWxpYXMgYWNjZXB0ZWQgYnkgdGhlIGdhdGV3YXkuICovXG5leHBvcnQgdHlwZSBNb2RlbFRhcmdldCA9IHouaW5mZXI8dHlwZW9mIE1vZGVsVGFyZ2V0U2NoZW1hPjtcblxuLyoqIFJlcXVlc3QgZmVhdHVyZXMgdGhhdCBjb25zdHJhaW4gZGlyZWN0IHByb3RvY29sIHJvdXRlcy4gKi9cbmV4cG9ydCBjb25zdCBSZXF1ZXN0ZWRGZWF0dXJlc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgYmFja2dyb3VuZDogei5ib29sZWFuKCksXG4gIGN1c3RvbVRvb2xzOiB6LmJvb2xlYW4oKSxcbiAgcGFyYWxsZWxUb29sczogei5ib29sZWFuKCksXG4gIHByZXZpb3VzUmVzcG9uc2U6IHouYm9vbGVhbigpLFxuICByZWFzb25pbmc6IHouYm9vbGVhbigpLFxuICBzdG9yYWdlOiB6LmJvb2xlYW4oKSxcbiAgc3RydWN0dXJlZE91dHB1dDogei5ib29sZWFuKCksXG4gIHRvb2xzOiB6LmJvb2xlYW4oKSxcbiAgdW5zdXBwb3J0ZWRPcGVuUmVzcG9uc2VzVG9vbHM6IHouYm9vbGVhbigpLFxuICB3ZWJTZWFyY2g6IHouYm9vbGVhbigpLFxufSk7XG4vKiogUmVxdWVzdCBmZWF0dXJlcyB0aGF0IGNvbnN0cmFpbiBkaXJlY3QgcHJvdG9jb2wgcm91dGVzLiAqL1xuZXhwb3J0IHR5cGUgUmVxdWVzdGVkRmVhdHVyZXMgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0ZWRGZWF0dXJlc1NjaGVtYT47XG5cbi8qKiBEZXRlcm1pbmlzdGljIHJvdXRlIHNlbGVjdGVkIGZvciBvbmUgZ2F0ZXdheSByZXF1ZXN0LiAqL1xuZXhwb3J0IGNvbnN0IEdhdGV3YXlSb3V0ZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2xpZW50UHJvdG9jb2w6IENsaWVudFByb3RvY29sU2NoZW1hLFxuICB1cHN0cmVhbVByb3RvY29sOiBVcHN0cmVhbVByb3RvY29sU2NoZW1hLFxuICB0YXJnZXQ6IE1vZGVsVGFyZ2V0U2NoZW1hLFxuICB1cHN0cmVhbU1vZGVsOiB6LnN0cmluZygpLm1pbigxKSxcbiAgdHJhbnNsYXRlUmVxdWVzdDogei5ib29sZWFuKCksXG4gIHRyYW5zbGF0ZVJlc3BvbnNlOiB6LmJvb2xlYW4oKSxcbn0pO1xuLyoqIERldGVybWluaXN0aWMgcm91dGUgc2VsZWN0ZWQgZm9yIG9uZSBnYXRld2F5IHJlcXVlc3QuICovXG5leHBvcnQgdHlwZSBHYXRld2F5Um91dGUgPSB6LmluZmVyPHR5cGVvZiBHYXRld2F5Um91dGVTY2hlbWE+O1xuXG4vKiogVHlwZWQgY2FwYWJpbGl0eSBjaGFuZ2VzIGZvciBvbmUgZHluYW1pY2FsbHkgZGlzY292ZXJlZCBtb2RlbC4gKi9cbmV4cG9ydCBjb25zdCBNb2RlbENhcGFiaWxpdHlPdmVycmlkZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbW9kZWw6IHouc3RyaW5nKCkubWluKDEpLFxuICBjYXBhYmlsaXRpZXM6IE1vZGVsQ2FwYWJpbGl0aWVzU2NoZW1hLnBhcnRpYWwoKSxcbn0pO1xuLyoqIFR5cGVkIGNhcGFiaWxpdHkgY2hhbmdlcyBmb3Igb25lIGR5bmFtaWNhbGx5IGRpc2NvdmVyZWQgbW9kZWwuICovXG5leHBvcnQgdHlwZSBNb2RlbENhcGFiaWxpdHlPdmVycmlkZSA9IHouaW5mZXI8dHlwZW9mIE1vZGVsQ2FwYWJpbGl0eU92ZXJyaWRlU2NoZW1hPjtcblxuLyoqIElucHV0cyByZXF1aXJlZCB0byBzZWxlY3Qgb25lIGRldGVybWluaXN0aWMgZ2F0ZXdheSByb3V0ZS4gKi9cbmV4cG9ydCBjb25zdCBSZXNvbHZlUm91dGVJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2xpZW50UHJvdG9jb2w6IENsaWVudFByb3RvY29sU2NoZW1hLFxuICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5taW4oMSksXG4gIG9yaWdpbmF0b3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZmVhdHVyZXM6IFJlcXVlc3RlZEZlYXR1cmVzU2NoZW1hLFxuICB0YXJnZXQ6IE1vZGVsVGFyZ2V0U2NoZW1hLFxufSk7XG4vKiogSW5wdXRzIHJlcXVpcmVkIHRvIHNlbGVjdCBvbmUgZGV0ZXJtaW5pc3RpYyBnYXRld2F5IHJvdXRlLiAqL1xuZXhwb3J0IHR5cGUgUmVzb2x2ZVJvdXRlSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBSZXNvbHZlUm91dGVJbnB1dFNjaGVtYT47XG4iXX0=