@thinkhive/sdk 3.1.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,21 +5,46 @@
5
5
  * Centralized HTTP client with authentication and error handling
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.ThinkHiveValidationError = exports.ThinkHiveApiError = void 0;
8
+ exports.IpWhitelistError = exports.RateLimitError = exports.AgentScopeError = exports.PermissionDeniedError = exports.ThinkHiveValidationError = exports.ThinkHiveApiError = exports.ThinkHiveError = void 0;
9
9
  exports.apiRequest = apiRequest;
10
10
  exports.apiRequestWithData = apiRequestWithData;
11
11
  const config_1 = require("./config");
12
+ // ============================================================================
13
+ // RETRY CONFIGURATION
14
+ // ============================================================================
15
+ const MAX_RETRIES = 3;
16
+ const INITIAL_BACKOFF = 500; // ms
17
+ const MAX_BACKOFF = 8000; // ms
18
+ const RETRYABLE_CODES = new Set([408, 429, 500, 502, 503, 504]);
19
+ /**
20
+ * Calculate backoff time for retry attempt
21
+ */
22
+ function calculateBackoff(attempt, retryAfter) {
23
+ if (retryAfter !== undefined) {
24
+ return Math.min(retryAfter * 1000, MAX_BACKOFF); // Convert seconds to ms
25
+ }
26
+ const backoff = INITIAL_BACKOFF * Math.pow(2, attempt);
27
+ return Math.min(backoff, MAX_BACKOFF);
28
+ }
12
29
  /**
13
- * Make an authenticated API request
30
+ * Sleep for a given number of milliseconds
31
+ */
32
+ function sleep(ms) {
33
+ return new Promise((resolve) => setTimeout(resolve, ms));
34
+ }
35
+ /**
36
+ * Make an authenticated API request with retry logic
14
37
  */
15
38
  async function apiRequest(path, options = {}) {
16
39
  const config = (0, config_1.getConfig)();
17
- const { method = 'GET', body, headers = {}, apiVersion } = options;
18
- const version = apiVersion || config.apiVersion;
19
- const url = `${config.endpoint}/api/${version}${path}`;
40
+ const { method = 'GET', body, headers = {}, apiVersion, maxRetries, timeout } = options;
41
+ const version = apiVersion === 'none' ? '' : (apiVersion || '');
42
+ const url = version ? `${config.endpoint}/api/${version}${path}` : `${config.endpoint}/api${path}`;
43
+ const retries = maxRetries ?? MAX_RETRIES;
44
+ const requestTimeout = timeout ?? 30000; // Default 30s
20
45
  const requestHeaders = {
21
46
  'Content-Type': 'application/json',
22
- 'X-SDK-Version': '3.0.0',
47
+ 'X-SDK-Version': config_1.SDK_VERSION,
23
48
  ...headers,
24
49
  };
25
50
  if (config.apiKey) {
@@ -29,32 +54,112 @@ async function apiRequest(path, options = {}) {
29
54
  requestHeaders['X-Agent-ID'] = config.agentId;
30
55
  }
31
56
  (0, config_1.debugLog)(`${method} ${url}`);
32
- const response = await fetch(url, {
33
- method,
34
- headers: requestHeaders,
35
- body: body ? JSON.stringify(body) : undefined,
36
- });
37
- // Handle deprecation warnings
38
- if (response.headers.has('Deprecation')) {
39
- const sunset = response.headers.get('Sunset');
40
- const link = response.headers.get('Link');
41
- console.warn(`[ThinkHive] Deprecation warning: This endpoint is deprecated.` +
42
- (sunset ? ` Sunset: ${sunset}` : '') +
43
- (link ? ` Successor: ${link}` : ''));
44
- }
45
- if (!response.ok) {
46
- const errorText = await response.text();
47
- let errorData = {};
57
+ let lastError = null;
58
+ for (let attempt = 0; attempt <= retries; attempt++) {
48
59
  try {
49
- errorData = JSON.parse(errorText);
60
+ // Create abort controller for timeout
61
+ const controller = new AbortController();
62
+ const timeoutId = setTimeout(() => controller.abort(), requestTimeout);
63
+ let response;
64
+ try {
65
+ response = await fetch(url, {
66
+ method,
67
+ headers: requestHeaders,
68
+ body: body ? JSON.stringify(body) : undefined,
69
+ signal: controller.signal,
70
+ });
71
+ }
72
+ finally {
73
+ clearTimeout(timeoutId);
74
+ }
75
+ // Handle deprecation warnings
76
+ if (response.headers.has('Deprecation')) {
77
+ const sunset = response.headers.get('Sunset');
78
+ const link = response.headers.get('Link');
79
+ console.warn(`[ThinkHive] Deprecation warning: This endpoint is deprecated.` +
80
+ (sunset ? ` Sunset: ${sunset}` : '') +
81
+ (link ? ` Successor: ${link}` : ''));
82
+ }
83
+ // Check if response is retryable
84
+ if (RETRYABLE_CODES.has(response.status) && attempt < retries) {
85
+ // Get Retry-After header if present (for 429 responses)
86
+ let retryAfter;
87
+ if (response.status === 429) {
88
+ const retryAfterHeader = response.headers.get('Retry-After');
89
+ if (retryAfterHeader) {
90
+ retryAfter = parseFloat(retryAfterHeader);
91
+ if (isNaN(retryAfter)) {
92
+ retryAfter = undefined;
93
+ }
94
+ }
95
+ }
96
+ const backoff = calculateBackoff(attempt, retryAfter);
97
+ (0, config_1.debugLog)(`Retrying after ${backoff}ms (attempt ${attempt + 1}/${retries})`);
98
+ await sleep(backoff);
99
+ continue;
100
+ }
101
+ if (!response.ok) {
102
+ const errorText = await response.text();
103
+ let errorData = {};
104
+ try {
105
+ errorData = JSON.parse(errorText);
106
+ }
107
+ catch {
108
+ errorData = { message: errorText };
109
+ }
110
+ // Handle rate limit specifically
111
+ if (response.status === 429) {
112
+ const retryAfterHeader = response.headers.get('Retry-After');
113
+ const retryAfter = retryAfterHeader ? parseFloat(retryAfterHeader) * 1000 : 60000;
114
+ throw new RateLimitError(retryAfter);
115
+ }
116
+ throw new ThinkHiveApiError(errorData.message || `HTTP ${response.status}`, response.status, errorData.code);
117
+ }
118
+ // Handle 204 No Content (e.g., successful DELETE)
119
+ if (response.status === 204) {
120
+ return undefined;
121
+ }
122
+ return response.json();
50
123
  }
51
- catch {
52
- errorData = { message: errorText };
124
+ catch (error) {
125
+ // Handle abort (timeout)
126
+ if (error instanceof Error && error.name === 'AbortError') {
127
+ lastError = new ThinkHiveApiError(`Request timed out after ${requestTimeout}ms`, 408);
128
+ if (attempt < retries) {
129
+ const backoff = calculateBackoff(attempt);
130
+ (0, config_1.debugLog)(`Request timed out, retrying after ${backoff}ms (attempt ${attempt + 1}/${retries})`);
131
+ await sleep(backoff);
132
+ continue;
133
+ }
134
+ throw lastError;
135
+ }
136
+ // Handle network errors (TypeError from fetch)
137
+ if (error instanceof TypeError) {
138
+ lastError = new ThinkHiveApiError(`Network error: ${error.message}`, 503);
139
+ if (attempt < retries) {
140
+ const backoff = calculateBackoff(attempt);
141
+ (0, config_1.debugLog)(`Network error, retrying after ${backoff}ms (attempt ${attempt + 1}/${retries})`);
142
+ await sleep(backoff);
143
+ continue;
144
+ }
145
+ throw lastError;
146
+ }
147
+ // Re-throw ThinkHive errors (non-retryable)
148
+ if (error instanceof ThinkHiveError) {
149
+ throw error;
150
+ }
151
+ // Unknown error
152
+ lastError = error instanceof Error ? error : new Error(String(error));
153
+ if (attempt < retries) {
154
+ const backoff = calculateBackoff(attempt);
155
+ await sleep(backoff);
156
+ continue;
157
+ }
158
+ throw new ThinkHiveApiError(`Request failed: ${lastError.message}`, 500);
53
159
  }
54
- const error = new ThinkHiveApiError(errorData.message || `HTTP ${response.status}`, response.status, errorData.code);
55
- throw error;
56
160
  }
57
- return response.json();
161
+ // Should not reach here, but just in case
162
+ throw lastError || new ThinkHiveApiError('Request failed after all retries', 500);
58
163
  }
59
164
  /**
60
165
  * Make an API request and extract data from response wrapper
@@ -69,21 +174,111 @@ async function apiRequestWithData(path, options = {}) {
69
174
  // ============================================================================
70
175
  // ERRORS
71
176
  // ============================================================================
72
- class ThinkHiveApiError extends Error {
73
- constructor(message, statusCode, code) {
177
+ /**
178
+ * Base error class for ThinkHive SDK errors
179
+ */
180
+ class ThinkHiveError extends Error {
181
+ constructor(message, code, statusCode, details) {
74
182
  super(message);
75
- this.statusCode = statusCode;
76
183
  this.code = code;
184
+ this.statusCode = statusCode;
185
+ this.details = details;
186
+ this.name = 'ThinkHiveError';
187
+ }
188
+ }
189
+ exports.ThinkHiveError = ThinkHiveError;
190
+ /**
191
+ * API request error - returned from ThinkHive server
192
+ */
193
+ class ThinkHiveApiError extends ThinkHiveError {
194
+ constructor(message, statusCode, code) {
195
+ super(message, code || 'API_ERROR', statusCode);
77
196
  this.name = 'ThinkHiveApiError';
78
197
  }
79
198
  }
80
199
  exports.ThinkHiveApiError = ThinkHiveApiError;
81
- class ThinkHiveValidationError extends Error {
200
+ /**
201
+ * Validation error - invalid input parameters
202
+ */
203
+ class ThinkHiveValidationError extends ThinkHiveError {
82
204
  constructor(message, field) {
83
- super(message);
205
+ super(message, 'VALIDATION_ERROR', 400, field ? { field } : undefined);
84
206
  this.field = field;
85
207
  this.name = 'ThinkHiveValidationError';
86
208
  }
87
209
  }
88
210
  exports.ThinkHiveValidationError = ThinkHiveValidationError;
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFvQkgsZ0NBMkRDO0FBS0QsZ0RBYUM7QUEvRkQscUNBQStDO0FBZS9DOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFVBQVUsQ0FDOUIsSUFBWSxFQUNaLFVBQTBCLEVBQUU7SUFFNUIsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBUyxHQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRW5FLE1BQU0sT0FBTyxHQUFHLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ2hELE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsUUFBUSxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFFdkQsTUFBTSxjQUFjLEdBQTJCO1FBQzdDLGNBQWMsRUFBRSxrQkFBa0I7UUFDbEMsZUFBZSxFQUFFLE9BQU87UUFDeEIsR0FBRyxPQUFPO0tBQ1gsQ0FBQztJQUVGLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLGNBQWMsQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM5RCxDQUFDO1NBQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUEsaUJBQVEsRUFBQyxHQUFHLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBRTdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNoQyxNQUFNO1FBQ04sT0FBTyxFQUFF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ZW50XG4gKlxuICogQ2VudHJhbGl6ZWQgSFRUUCBjbGllbnQgd2l0aCBhdXRoZW50aWNhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmdcbiAqL1xuXG5pbXBvcnQgeyBnZXRDb25maWcsIGRlYnVnTG9nIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBBcGlSZXNwb25zZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIVFRQIENMSUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RPcHRpb25zIHtcbiAgbWV0aG9kPzogJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyB8ICdERUxFVEUnO1xuICBib2R5PzogdW5rbm93bjtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBPdmVycmlkZSBBUEkgdmVyc2lvbiBmb3IgdGhpcyByZXF1ZXN0ICovXG4gIGFwaVZlcnNpb24/OiAndjEnIHwgJ3YzJztcbn1cblxuLyoqXG4gKiBNYWtlIGFuIGF1dGhlbnRpY2F0ZWQgQVBJIHJlcXVlc3RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaVJlcXVlc3Q8VD4oXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IG1ldGhvZCA9ICdHRVQnLCBib2R5LCBoZWFkZXJzID0ge30sIGFwaVZlcnNpb24gfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgdmVyc2lvbiA9IGFwaVZlcnNpb24gfHwgY29uZmlnLmFwaVZlcnNpb247XG4gIGNvbnN0IHVybCA9IGAke2NvbmZpZy5lbmRwb2ludH0vYXBpLyR7dmVyc2lvbn0ke3BhdGh9YDtcblxuICBjb25zdCByZXF1ZXN0SGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICdYLVNESy1WZXJzaW9uJzogJzMuMC4wJyxcbiAgICAuLi5oZWFkZXJzLFxuICB9O1xuXG4gIGlmIChjb25maWcuYXBpS2V5KSB7XG4gICAgcmVxdWVzdEhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjb25maWcuYXBpS2V5fWA7XG4gIH0gZWxzZSBpZiAoY29uZmlnLmFnZW50SWQpIHtcbiAgICByZXF1ZXN0SGVhZGVyc1snWC1BZ2VudC1JRCddID0gY29uZmlnLmFnZW50SWQ7XG4gIH1cblxuICBkZWJ1Z0xvZyhgJHttZXRob2R9ICR7dXJsfWApO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kLFxuICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgIGJvZHk6IGJvZHkgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIGRlcHJlY2F0aW9uIHdhcm5pbmdzXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmhhcygnRGVwcmVjYXRpb24nKSkge1xuICAgIGNvbnN0IHN1bnNldCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdTdW5zZXQnKTtcbiAgICBjb25zdCBsaW5rID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0xpbmsnKTtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgW1RoaW5rSGl2ZV0gRGVwcmVjYXRpb24gd2FybmluZzogVGhpcyBlbmRwb2ludCBpcyBkZXByZWNhdGVkLmAgK1xuICAgICAgICAoc3Vuc2V0ID8gYCBTdW5zZXQ6ICR7c3Vuc2V0fWAgOiAnJykgK1xuICAgICAgICAobGluayA/IGAgU3VjY2Vzc29yOiAke2xpbmt9YCA6ICcnKVxuICAgICk7XG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGxldCBlcnJvckRhdGE6IHsgbWVzc2FnZT86IHN0cmluZzsgY29kZT86IHN0cmluZyB9ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIGVycm9yRGF0YSA9IEpTT04ucGFyc2UoZXJyb3JUZXh0KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGVycm9yRGF0YSA9IHsgbWVzc2FnZTogZXJyb3JUZXh0IH07XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgVGhpbmtIaXZlQXBpRXJyb3IoXG4gICAgICBlcnJvckRhdGEubWVzc2FnZSB8fCBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gLFxuICAgICAgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgZXJyb3JEYXRhLmNvZGVcbiAgICApO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKSBhcyBQcm9taXNlPFQ+O1xufVxuXG4vKipcbiAqIE1ha2UgYW4gQVBJIHJlcXVlc3QgYW5kIGV4dHJhY3QgZGF0YSBmcm9tIHJlc3BvbnNlIHdyYXBwZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaVJlcXVlc3RXaXRoRGF0YTxUPihcbiAgcGF0aDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0PEFwaVJlc3BvbnNlPFQ+PihwYXRoLCBvcHRpb25zKTtcbiAgaWYgKCFyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IFRoaW5rSGl2ZUFwaUVycm9yKFxuICAgICAgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgNTAwLFxuICAgICAgcmVzcG9uc2UuZXJyb3I/LmNvZGVcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZS5kYXRhIGFzIFQ7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVSUk9SU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY2xhc3MgVGhpbmtIaXZlQXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyLFxuICAgIHB1YmxpYyByZWFkb25seSBjb2RlPzogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdUaGlua0hpdmVBcGlFcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRoaW5rSGl2ZVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZD86IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVGhpbmtIaXZlVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuIl19
211
+ /**
212
+ * Permission denied error - API key lacks required permissions
213
+ * @example
214
+ * ```typescript
215
+ * try {
216
+ * await thinkHive.traces.create(...);
217
+ * } catch (error) {
218
+ * if (error instanceof PermissionDeniedError) {
219
+ * console.log('API key needs write permission');
220
+ * }
221
+ * }
222
+ * ```
223
+ */
224
+ class PermissionDeniedError extends ThinkHiveError {
225
+ constructor(message, details) {
226
+ super(message, 'PERMISSION_DENIED', 403, details);
227
+ this.name = 'PermissionDeniedError';
228
+ }
229
+ }
230
+ exports.PermissionDeniedError = PermissionDeniedError;
231
+ /**
232
+ * Agent scope violation error - API key not authorized for this agent
233
+ * @example
234
+ * ```typescript
235
+ * // Create key scoped to specific agents
236
+ * const key = await thinkHive.apiKeys.create({
237
+ * name: 'Agent A Key',
238
+ * allowedAgentIds: ['agent-a-id']
239
+ * });
240
+ *
241
+ * // Attempting to use for Agent B will throw AgentScopeError
242
+ * ```
243
+ */
244
+ class AgentScopeError extends ThinkHiveError {
245
+ constructor(agentId, allowedAgents) {
246
+ super(`API key not authorized for agent ${agentId}`, 'AGENT_SCOPE_VIOLATION', 403, { agentId, allowedAgents });
247
+ this.name = 'AgentScopeError';
248
+ }
249
+ }
250
+ exports.AgentScopeError = AgentScopeError;
251
+ /**
252
+ * Rate limit exceeded error
253
+ * @example
254
+ * ```typescript
255
+ * try {
256
+ * await thinkHive.traces.create(...);
257
+ * } catch (error) {
258
+ * if (error instanceof RateLimitError) {
259
+ * // Wait and retry
260
+ * await sleep(error.retryAfter);
261
+ * await thinkHive.traces.create(...);
262
+ * }
263
+ * }
264
+ * ```
265
+ */
266
+ class RateLimitError extends ThinkHiveError {
267
+ constructor(retryAfter) {
268
+ super(`Rate limit exceeded. Retry after ${retryAfter}ms`, 'RATE_LIMIT_EXCEEDED', 429, { retryAfter });
269
+ this.retryAfter = retryAfter;
270
+ this.name = 'RateLimitError';
271
+ }
272
+ }
273
+ exports.RateLimitError = RateLimitError;
274
+ /**
275
+ * IP whitelist violation error
276
+ */
277
+ class IpWhitelistError extends ThinkHiveError {
278
+ constructor(clientIp) {
279
+ super('Request IP address is not authorized for this API key', 'IP_WHITELIST_VIOLATION', 403, { clientIp });
280
+ this.name = 'IpWhitelistError';
281
+ }
282
+ }
283
+ exports.IpWhitelistError = IpWhitelistError;
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFtREgsZ0NBcUpDO0FBS0QsZ0RBYUM7QUF4TkQscUNBQTREO0FBRzVELCtFQUErRTtBQUMvRSxzQkFBc0I7QUFDdEIsK0VBQStFO0FBRS9FLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLO0FBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUs7QUFDL0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFaEU7O0dBRUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLE9BQWUsRUFBRSxVQUFtQjtJQUM1RCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtJQUMzRSxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxLQUFLLENBQUMsRUFBVTtJQUN2QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQWtCRDs7R0FFRztBQUNJLEtB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RCxxQkFBcUIsRUFDckIsR0FBRyxFQUNILEVBQUUsVUFBVSxFQUFFLENBQ2YsQ0FBQztRQVBjLGVBQVUsR0FBVixVQUFVLENBQVE7UUFRbEMsSUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUFaRCx3Q0FZQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxjQUFjO0lBQ2xELFlBQVksUUFBZ0I7UUFDMUIsS0FBSyxDQUNILHVEQUF1RCxFQUN2RCx3QkFBd0IsRUFDeEIsR0FBRyxFQUNILEVBQUUsUUFBUSxFQUFFLENBQ2IsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBVkQsNENBVUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaW5rSGl2ZSBTREsgdjMuMCAtIEhUVFAgQ2xpZW50XG4gKlxuICogQ2VudHJhbGl6ZWQgSFRUUCBjbGllbnQgd2l0aCBhdXRoZW50aWNhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmdcbiAqL1xuXG5pbXBvcnQgeyBnZXRDb25maWcsIGRlYnVnTG9nLCBTREtfVkVSU0lPTiB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB0eXBlIHsgQXBpUmVzcG9uc2UgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUkVUUlkgQ09ORklHVVJBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBNQVhfUkVUUklFUyA9IDM7XG5jb25zdCBJTklUSUFMX0JBQ0tPRkYgPSA1MDA7IC8vIG1zXG5jb25zdCBNQVhfQkFDS09GRiA9IDgwMDA7IC8vIG1zXG5jb25zdCBSRVRSWUFCTEVfQ09ERVMgPSBuZXcgU2V0KFs0MDgsIDQyOSwgNTAwLCA1MDIsIDUwMywgNTA0XSk7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGJhY2tvZmYgdGltZSBmb3IgcmV0cnkgYXR0ZW1wdFxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVCYWNrb2ZmKGF0dGVtcHQ6IG51bWJlciwgcmV0cnlBZnRlcj86IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChyZXRyeUFmdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gTWF0aC5taW4ocmV0cnlBZnRlciAqIDEwMDAsIE1BWF9CQUNLT0ZGKTsgLy8gQ29udmVydCBzZWNvbmRzIHRvIG1zXG4gIH1cbiAgY29uc3QgYmFja29mZiA9IElOSVRJQUxfQkFDS09GRiAqIE1hdGgucG93KDIsIGF0dGVtcHQpO1xuICByZXR1cm4gTWF0aC5taW4oYmFja29mZiwgTUFYX0JBQ0tPRkYpO1xufVxuXG4vKipcbiAqIFNsZWVwIGZvciBhIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqL1xuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSFRUUCBDTElFTlRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIG1ldGhvZD86ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnIHwgJ0RFTEVURSc7XG4gIGJvZHk/OiB1bmtub3duO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIE92ZXJyaWRlIEFQSSB2ZXJzaW9uIGZvciB0aGlzIHJlcXVlc3QuIFVzZSAnbm9uZScgZm9yIHVudmVyc2lvbmVkIHJvdXRlcyAoZS5nLiwgL2FwaS9hZ2VudHMpLiAqL1xuICBhcGlWZXJzaW9uPzogJ3YxJyB8ICd2MicgfCAndjMnIHwgJ25vbmUnO1xuICAvKiogT3ZlcnJpZGUgbWF4IHJldHJpZXMgZm9yIHRoaXMgcmVxdWVzdCAqL1xuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gYXV0aGVudGljYXRlZCBBUEkgcmVxdWVzdCB3aXRoIHJldHJ5IGxvZ2ljXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcGlSZXF1ZXN0PFQ+KFxuICBwYXRoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgY29uc3QgeyBtZXRob2QgPSAnR0VUJywgYm9keSwgaGVhZGVycyA9IHt9LCBhcGlWZXJzaW9uLCBtYXhSZXRyaWVzLCB0aW1lb3V0IH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHZlcnNpb24gPSBhcGlWZXJzaW9uID09PSAnbm9uZScgPyAnJyA6IChhcGlWZXJzaW9uIHx8ICcnKTtcbiAgY29uc3QgdXJsID0gdmVyc2lvbiA/IGAke2NvbmZpZy5lbmRwb2ludH0vYXBpLyR7dmVyc2lvbn0ke3BhdGh9YCA6IGAke2NvbmZpZy5lbmRwb2ludH0vYXBpJHtwYXRofWA7XG4gIGNvbnN0IHJldHJpZXMgPSBtYXhSZXRyaWVzID8/IE1BWF9SRVRSSUVTO1xuICBjb25zdCByZXF1ZXN0VGltZW91dCA9IHRpbWVvdXQgPz8gMzAwMDA7IC8vIERlZmF1bHQgMzBzXG5cbiAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAnWC1TREstVmVyc2lvbic6IFNES19WRVJTSU9OLFxuICAgIC4uLmhlYWRlcnMsXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5hcGlLZXkpIHtcbiAgICByZXF1ZXN0SGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke2NvbmZpZy5hcGlLZXl9YDtcbiAgfSBlbHNlIGlmIChjb25maWcuYWdlbnRJZCkge1xuICAgIHJlcXVlc3RIZWFkZXJzWydYLUFnZW50LUlEJ10gPSBjb25maWcuYWdlbnRJZDtcbiAgfVxuXG4gIGRlYnVnTG9nKGAke21ldGhvZH0gJHt1cmx9YCk7XG5cbiAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSByZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIGFib3J0IGNvbnRyb2xsZXIgZm9yIHRpbWVvdXRcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgcmVxdWVzdFRpbWVvdXQpO1xuXG4gICAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgICAgYm9keTogYm9keSA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBkZXByZWNhdGlvbiB3YXJuaW5nc1xuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuaGFzKCdEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHN1bnNldCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdTdW5zZXQnKTtcbiAgICAgICAgY29uc3QgbGluayA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdMaW5rJyk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW1RoaW5rSGl2ZV0gRGVwcmVjYXRpb24gd2FybmluZzogVGhpcyBlbmRwb2ludCBpcyBkZXByZWNhdGVkLmAgK1xuICAgICAgICAgICAgKHN1bnNldCA/IGAgU3Vuc2V0OiAke3N1bnNldH1gIDogJycpICtcbiAgICAgICAgICAgIChsaW5rID8gYCBTdWNjZXNzb3I6ICR7bGlua31gIDogJycpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHJlc3BvbnNlIGlzIHJldHJ5YWJsZVxuICAgICAgaWYgKFJFVFJZQUJMRV9DT0RFUy5oYXMocmVzcG9uc2Uuc3RhdHVzKSAmJiBhdHRlbXB0IDwgcmV0cmllcykge1xuICAgICAgICAvLyBHZXQgUmV0cnktQWZ0ZXIgaGVhZGVyIGlmIHByZXNlbnQgKGZvciA0MjkgcmVzcG9uc2VzKVxuICAgICAgICBsZXQgcmV0cnlBZnRlcjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MjkpIHtcbiAgICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1JldHJ5LUFmdGVyJyk7XG4gICAgICAgICAgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHtcbiAgICAgICAgICAgIHJldHJ5QWZ0ZXIgPSBwYXJzZUZsb2F0KHJldHJ5QWZ0ZXJIZWFkZXIpO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHJldHJ5QWZ0ZXIpKSB7XG4gICAgICAgICAgICAgIHJldHJ5QWZ0ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFja29mZiA9IGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdCwgcmV0cnlBZnRlcik7XG4gICAgICAgIGRlYnVnTG9nKGBSZXRyeWluZyBhZnRlciAke2JhY2tvZmZ9bXMgKGF0dGVtcHQgJHthdHRlbXB0ICsgMX0vJHtyZXRyaWVzfSlgKTtcbiAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgbGV0IGVycm9yRGF0YTogeyBtZXNzYWdlPzogc3RyaW5nOyBjb2RlPzogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlcnJvckRhdGEgPSBKU09OLnBhcnNlKGVycm9yVGV4dCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGVycm9yRGF0YSA9IHsgbWVzc2FnZTogZXJyb3JUZXh0IH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgcmF0ZSBsaW1pdCBzcGVjaWZpY2FsbHlcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDI5KSB7XG4gICAgICAgICAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdSZXRyeS1BZnRlcicpO1xuICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSByZXRyeUFmdGVySGVhZGVyID8gcGFyc2VGbG9hdChyZXRyeUFmdGVySGVhZGVyKSAqIDEwMDAgOiA2MDAwMDtcbiAgICAgICAgICB0aHJvdyBuZXcgUmF0ZUxpbWl0RXJyb3IocmV0cnlBZnRlcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVGhpbmtIaXZlQXBpRXJyb3IoXG4gICAgICAgICAgZXJyb3JEYXRhLm1lc3NhZ2UgfHwgYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCxcbiAgICAgICAgICByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgZXJyb3JEYXRhLmNvZGVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIDIwNCBObyBDb250ZW50IChlLmcuLCBzdWNjZXNzZnVsIERFTEVURSlcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKSBhcyBQcm9taXNlPFQ+O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgYWJvcnQgKHRpbWVvdXQpXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgbGFzdEVycm9yID0gbmV3IFRoaW5rSGl2ZUFwaUVycm9yKGBSZXF1ZXN0IHRpbWVkIG91dCBhZnRlciAke3JlcXVlc3RUaW1lb3V0fW1zYCwgNDA4KTtcbiAgICAgICAgaWYgKGF0dGVtcHQgPCByZXRyaWVzKSB7XG4gICAgICAgICAgY29uc3QgYmFja29mZiA9IGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdCk7XG4gICAgICAgICAgZGVidWdMb2coYFJlcXVlc3QgdGltZWQgb3V0LCByZXRyeWluZyBhZnRlciAke2JhY2tvZmZ9bXMgKGF0dGVtcHQgJHthdHRlbXB0ICsgMX0vJHtyZXRyaWVzfSlgKTtcbiAgICAgICAgICBhd2FpdCBzbGVlcChiYWNrb2ZmKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBsYXN0RXJyb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBuZXR3b3JrIGVycm9ycyAoVHlwZUVycm9yIGZyb20gZmV0Y2gpXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgbGFzdEVycm9yID0gbmV3IFRoaW5rSGl2ZUFwaUVycm9yKGBOZXR3b3JrIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgNTAzKTtcbiAgICAgICAgaWYgKGF0dGVtcHQgPCByZXRyaWVzKSB7XG4gICAgICAgICAgY29uc3QgYmFja29mZiA9IGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdCk7XG4gICAgICAgICAgZGVidWdMb2coYE5ldHdvcmsgZXJyb3IsIHJldHJ5aW5nIGFmdGVyICR7YmFja29mZn1tcyAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke3JldHJpZXN9KWApO1xuICAgICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmYpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGxhc3RFcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gUmUtdGhyb3cgVGhpbmtIaXZlIGVycm9ycyAobm9uLXJldHJ5YWJsZSlcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFRoaW5rSGl2ZUVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICAvLyBVbmtub3duIGVycm9yXG4gICAgICBsYXN0RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XG4gICAgICBpZiAoYXR0ZW1wdCA8IHJldHJpZXMpIHtcbiAgICAgICAgY29uc3QgYmFja29mZiA9IGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdCk7XG4gICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmYpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBUaGlua0hpdmVBcGlFcnJvcihgUmVxdWVzdCBmYWlsZWQ6ICR7bGFzdEVycm9yLm1lc3NhZ2V9YCwgNTAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBTaG91bGQgbm90IHJlYWNoIGhlcmUsIGJ1dCBqdXN0IGluIGNhc2VcbiAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBUaGlua0hpdmVBcGlFcnJvcignUmVxdWVzdCBmYWlsZWQgYWZ0ZXIgYWxsIHJldHJpZXMnLCA1MDApO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gQVBJIHJlcXVlc3QgYW5kIGV4dHJhY3QgZGF0YSBmcm9tIHJlc3BvbnNlIHdyYXBwZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaVJlcXVlc3RXaXRoRGF0YTxUPihcbiAgcGF0aDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0PEFwaVJlc3BvbnNlPFQ+PihwYXRoLCBvcHRpb25zKTtcbiAgaWYgKCFyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IFRoaW5rSGl2ZUFwaUVycm9yKFxuICAgICAgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgNTAwLFxuICAgICAgcmVzcG9uc2UuZXJyb3I/LmNvZGVcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZS5kYXRhIGFzIFQ7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVSUk9SU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEJhc2UgZXJyb3IgY2xhc3MgZm9yIFRoaW5rSGl2ZSBTREsgZXJyb3JzXG4gKi9cbmV4cG9ydCBjbGFzcyBUaGlua0hpdmVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU/OiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVGhpbmtIaXZlRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZXJyb3IgLSByZXR1cm5lZCBmcm9tIFRoaW5rSGl2ZSBzZXJ2ZXJcbiAqL1xuZXhwb3J0IGNsYXNzIFRoaW5rSGl2ZUFwaUVycm9yIGV4dGVuZHMgVGhpbmtIaXZlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RhdHVzQ29kZTogbnVtYmVyLFxuICAgIGNvZGU/OiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgY29kZSB8fCAnQVBJX0VSUk9SJywgc3RhdHVzQ29kZSk7XG4gICAgdGhpcy5uYW1lID0gJ1RoaW5rSGl2ZUFwaUVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRpb24gZXJyb3IgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFRoaW5rSGl2ZVZhbGlkYXRpb25FcnJvciBleHRlbmRzIFRoaW5rSGl2ZUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZD86IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCAnVkFMSURBVElPTl9FUlJPUicsIDQwMCwgZmllbGQgPyB7IGZpZWxkIH0gOiB1bmRlZmluZWQpO1xuICAgIHRoaXMubmFtZSA9ICdUaGlua0hpdmVWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogUGVybWlzc2lvbiBkZW5pZWQgZXJyb3IgLSBBUEkga2V5IGxhY2tzIHJlcXVpcmVkIHBlcm1pc3Npb25zXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgYXdhaXQgdGhpbmtIaXZlLnRyYWNlcy5jcmVhdGUoLi4uKTtcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFBlcm1pc3Npb25EZW5pZWRFcnJvcikge1xuICogICAgIGNvbnNvbGUubG9nKCdBUEkga2V5IG5lZWRzIHdyaXRlIHBlcm1pc3Npb24nKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uRGVuaWVkRXJyb3IgZXh0ZW5kcyBUaGlua0hpdmVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgc3VwZXIobWVzc2FnZSwgJ1BFUk1JU1NJT05fREVOSUVEJywgNDAzLCBkZXRhaWxzKTtcbiAgICB0aGlzLm5hbWUgPSAnUGVybWlzc2lvbkRlbmllZEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEFnZW50IHNjb3BlIHZpb2xhdGlvbiBlcnJvciAtIEFQSSBrZXkgbm90IGF1dGhvcml6ZWQgZm9yIHRoaXMgYWdlbnRcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUga2V5IHNjb3BlZCB0byBzcGVjaWZpYyBhZ2VudHNcbiAqIGNvbnN0IGtleSA9IGF3YWl0IHRoaW5rSGl2ZS5hcGlLZXlzLmNyZWF0ZSh7XG4gKiAgIG5hbWU6ICdBZ2VudCBBIEtleScsXG4gKiAgIGFsbG93ZWRBZ2VudElkczogWydhZ2VudC1hLWlkJ11cbiAqIH0pO1xuICpcbiAqIC8vIEF0dGVtcHRpbmcgdG8gdXNlIGZvciBBZ2VudCBCIHdpbGwgdGhyb3cgQWdlbnRTY29wZUVycm9yXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFnZW50U2NvcGVFcnJvciBleHRlbmRzIFRoaW5rSGl2ZUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgYWdlbnRJZDogc3RyaW5nLFxuICAgIGFsbG93ZWRBZ2VudHM6IHN0cmluZ1tdXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgYEFQSSBrZXkgbm90IGF1dGhvcml6ZWQgZm9yIGFnZW50ICR7YWdlbnRJZH1gLFxuICAgICAgJ0FHRU5UX1NDT1BFX1ZJT0xBVElPTicsXG4gICAgICA0MDMsXG4gICAgICB7IGFnZW50SWQsIGFsbG93ZWRBZ2VudHMgfVxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ0FnZW50U2NvcGVFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBSYXRlIGxpbWl0IGV4Y2VlZGVkIGVycm9yXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgYXdhaXQgdGhpbmtIaXZlLnRyYWNlcy5jcmVhdGUoLi4uKTtcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFJhdGVMaW1pdEVycm9yKSB7XG4gKiAgICAgLy8gV2FpdCBhbmQgcmV0cnlcbiAqICAgICBhd2FpdCBzbGVlcChlcnJvci5yZXRyeUFmdGVyKTtcbiAqICAgICBhd2FpdCB0aGlua0hpdmUudHJhY2VzLmNyZWF0ZSguLi4pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFJhdGVMaW1pdEVycm9yIGV4dGVuZHMgVGhpbmtIaXZlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmV0cnlBZnRlcjogbnVtYmVyXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgYFJhdGUgbGltaXQgZXhjZWVkZWQuIFJldHJ5IGFmdGVyICR7cmV0cnlBZnRlcn1tc2AsXG4gICAgICAnUkFURV9MSU1JVF9FWENFRURFRCcsXG4gICAgICA0MjksXG4gICAgICB7IHJldHJ5QWZ0ZXIgfVxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ1JhdGVMaW1pdEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIElQIHdoaXRlbGlzdCB2aW9sYXRpb24gZXJyb3JcbiAqL1xuZXhwb3J0IGNsYXNzIElwV2hpdGVsaXN0RXJyb3IgZXh0ZW5kcyBUaGlua0hpdmVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGNsaWVudElwOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgICdSZXF1ZXN0IElQIGFkZHJlc3MgaXMgbm90IGF1dGhvcml6ZWQgZm9yIHRoaXMgQVBJIGtleScsXG4gICAgICAnSVBfV0hJVEVMSVNUX1ZJT0xBVElPTicsXG4gICAgICA0MDMsXG4gICAgICB7IGNsaWVudElwIH1cbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdJcFdoaXRlbGlzdEVycm9yJztcbiAgfVxufVxuIl19
@@ -2,8 +2,8 @@
2
2
  * ThinkHive SDK v3.0 - Configuration
3
3
  */
4
4
  import type { InitOptions, Framework } from './types';
5
- export declare const SDK_VERSION = "3.0.0";
6
- export declare const DEFAULT_ENDPOINT = "https://thinkhivemind-h25z7pvd3q-uc.a.run.app";
5
+ export declare const SDK_VERSION = "4.0.0";
6
+ export declare const DEFAULT_ENDPOINT = "https://app.thinkhive.ai";
7
7
  export declare const DEFAULT_SERVICE_NAME = "my-ai-agent";
8
8
  export interface ResolvedConfig {
9
9
  apiKey: string;
@@ -13,7 +13,6 @@ export interface ResolvedConfig {
13
13
  autoInstrument: boolean;
14
14
  frameworks: Framework[];
15
15
  debug: boolean;
16
- apiVersion: 'v1' | 'v3';
17
16
  }
18
17
  /**
19
18
  * Initialize configuration from options
@@ -12,8 +12,8 @@ exports.debugLog = debugLog;
12
12
  // ============================================================================
13
13
  // CONSTANTS
14
14
  // ============================================================================
15
- exports.SDK_VERSION = '3.0.0';
16
- exports.DEFAULT_ENDPOINT = 'https://thinkhivemind-h25z7pvd3q-uc.a.run.app';
15
+ exports.SDK_VERSION = '4.0.0';
16
+ exports.DEFAULT_ENDPOINT = 'https://app.thinkhive.ai';
17
17
  exports.DEFAULT_SERVICE_NAME = 'my-ai-agent';
18
18
  let config = null;
19
19
  let initialized = false;
@@ -37,7 +37,6 @@ function initConfig(options = {}) {
37
37
  autoInstrument: options.autoInstrument ?? false,
38
38
  frameworks: options.frameworks || ['langchain', 'openai'],
39
39
  debug: options.debug ?? false,
40
- apiVersion: options.apiVersion ?? 'v3',
41
40
  };
42
41
  initialized = true;
43
42
  return config;
@@ -73,4 +72,4 @@ function debugLog(...args) {
73
72
  console.log('[ThinkHive]', ...args);
74
73
  }
75
74
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBcUNILGdDQXVCQztBQU1ELDhCQUtDO0FBS0Qsc0NBRUM7QUFLRCxrQ0FHQztBQUtELDRCQUlDO0FBM0ZELCtFQUErRTtBQUMvRSxZQUFZO0FBQ1osK0VBQStFO0FBRWxFLFFBQUEsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUN0QixRQUFBLGdCQUFnQixHQUFHLCtDQUErQyxDQUFDO0FBQ25FLFFBQUEsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO0FBaUJsRCxJQUFJLE1BQU0sR0FBMEIsSUFBSSxDQUFDO0FBQ3pDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUV4QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRTs7R0FFRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxVQUF1QixFQUFFO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7SUFDckUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztJQUV4RSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYiw4RUFBOEUsQ0FDL0UsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEdBQUc7UUFDUCxNQUFNO1FBQ04sT0FBTztRQUNQLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLElBQUksd0JBQWdCO1FBQ2hGLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksNEJBQW9CO1FBQzlGLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFJLEtBQUs7UUFDL0MsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO1FBQ3pELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUs7UUFDN0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSTtLQUN2QyxDQUFDO0lBRUYsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNuQixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsU0FBUztJQUN2QixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhO0lBQzNCLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFdBQVc7SUFDekIsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDdEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEdBQUcsSUFBZTtJQUN6QyxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIHYzLjAgLSBDb25maWd1cmF0aW9uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJbml0T3B0aW9ucywgRnJhbWV3b3JrIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTlNUQU5UU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgU0RLX1ZFUlNJT04gPSAnMy4wLjAnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRU5EUE9JTlQgPSAnaHR0cHM6Ly90aGlua2hpdmVtaW5kLWgyNXo3cHZkM3EtdWMuYS5ydW4uYXBwJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFUlZJQ0VfTkFNRSA9ICdteS1haS1hZ2VudCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEdMT0JBTCBDT05GSUcgU1RBVEVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZENvbmZpZyB7XG4gIGFwaUtleTogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIGVuZHBvaW50OiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIGF1dG9JbnN0cnVtZW50OiBib29sZWFuO1xuICBmcmFtZXdvcmtzOiBGcmFtZXdvcmtbXTtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGFwaVZlcnNpb246ICd2MScgfCAndjMnO1xufVxuXG5sZXQgY29uZmlnOiBSZXNvbHZlZENvbmZpZyB8IG51bGwgPSBudWxsO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTkZJRyBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gZnJvbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29uZmlnKG9wdGlvbnM6IEluaXRPcHRpb25zID0ge30pOiBSZXNvbHZlZENvbmZpZyB7XG4gIGNvbnN0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LlRISU5LSElWRV9BUElfS0VZIHx8ICcnO1xuICBjb25zdCBhZ2VudElkID0gb3B0aW9ucy5hZ2VudElkIHx8IHByb2Nlc3MuZW52LlRISU5LSElWRV9BR0VOVF9JRCB8fCAnJztcblxuICBpZiAoIWFwaUtleSAmJiAhYWdlbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdFaXRoZXIgYXBpS2V5IG9yIGFnZW50SWQgbXVzdCBiZSBwcm92aWRlZCAob3Igc2V0IFRISU5LSElWRV9BUElfS0VZIGVudiB2YXIpJ1xuICAgICk7XG4gIH1cblxuICBjb25maWcgPSB7XG4gICAgYXBpS2V5LFxuICAgIGFnZW50SWQsXG4gICAgZW5kcG9pbnQ6IG9wdGlvbnMuZW5kcG9pbnQgfHwgcHJvY2Vzcy5lbnYuVEhJTktISVZFX0VORFBPSU5UIHx8IERFRkFVTFRfRU5EUE9JTlQsXG4gICAgc2VydmljZU5hbWU6IG9wdGlvbnMuc2VydmljZU5hbWUgfHwgcHJvY2Vzcy5lbnYuVEhJTktISVZFX1NFUlZJQ0VfTkFNRSB8fCBERUZBVUxUX1NFUlZJQ0VfTkFNRSxcbiAgICBhdXRvSW5zdHJ1bWVudDogb3B0aW9ucy5hdXRvSW5zdHJ1bWVudCA/PyBmYWxzZSxcbiAgICBmcmFtZXdvcmtzOiBvcHRpb25zLmZyYW1ld29ya3MgfHwgWydsYW5nY2hhaW4nLCAnb3BlbmFpJ10sXG4gICAgZGVidWc6IG9wdGlvbnMuZGVidWcgPz8gZmFsc2UsXG4gICAgYXBpVmVyc2lvbjogb3B0aW9ucy5hcGlWZXJzaW9uID8/ICd2MycsXG4gIH07XG5cbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAqIEB0aHJvd3MgaWYgbm90IGluaXRpYWxpemVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKTogUmVzb2x2ZWRDb25maWcge1xuICBpZiAoIWNvbmZpZyB8fCAhaW5pdGlhbGl6ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaW5rSGl2ZSBTREsgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4nKTtcbiAgfVxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIFNESyBpcyBpbml0aWFsaXplZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGluaXRpYWxpemVkO1xufVxuXG4vKipcbiAqIFJlc2V0IGNvbmZpZ3VyYXRpb24gKGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDb25maWcoKTogdm9pZCB7XG4gIGNvbmZpZyA9IG51bGw7XG4gIGluaXRpYWxpemVkID0gZmFsc2U7XG59XG5cbi8qKlxuICogRGVidWcgbG9nIGhlbHBlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVidWdMb2coLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gIGlmIChjb25maWc/LmRlYnVnKSB7XG4gICAgY29uc29sZS5sb2coJ1tUaGlua0hpdmVdJywgLi4uYXJncyk7XG4gIH1cbn1cbiJdfQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBb0NILGdDQXNCQztBQU1ELDhCQUtDO0FBS0Qsc0NBRUM7QUFLRCxrQ0FHQztBQUtELDRCQUlDO0FBekZELCtFQUErRTtBQUMvRSxZQUFZO0FBQ1osK0VBQStFO0FBRWxFLFFBQUEsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUN0QixRQUFBLGdCQUFnQixHQUFHLDBCQUEwQixDQUFDO0FBQzlDLFFBQUEsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO0FBZ0JsRCxJQUFJLE1BQU0sR0FBMEIsSUFBSSxDQUFDO0FBQ3pDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUV4QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRTs7R0FFRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxVQUF1QixFQUFFO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7SUFDckUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztJQUV4RSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYiw4RUFBOEUsQ0FDL0UsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEdBQUc7UUFDUCxNQUFNO1FBQ04sT0FBTztRQUNQLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLElBQUksd0JBQWdCO1FBQ2hGLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksNEJBQW9CO1FBQzlGLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFJLEtBQUs7UUFDL0MsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO1FBQ3pELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUs7S0FDOUIsQ0FBQztJQUVGLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDbkIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFNBQVM7SUFDdkIsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYTtJQUMzQixPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixXQUFXO0lBQ3pCLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDZCxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFHLElBQWU7SUFDekMsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4wIC0gQ29uZmlndXJhdGlvblxuICovXG5cbmltcG9ydCB0eXBlIHsgSW5pdE9wdGlvbnMsIEZyYW1ld29yayB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05TVEFOVFNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IFNES19WRVJTSU9OID0gJzQuMC4wJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VORFBPSU5UID0gJ2h0dHBzOi8vYXBwLnRoaW5raGl2ZS5haSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVJWSUNFX05BTUUgPSAnbXktYWktYWdlbnQnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHTE9CQUwgQ09ORklHIFNUQVRFXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRDb25maWcge1xuICBhcGlLZXk6IHN0cmluZztcbiAgYWdlbnRJZDogc3RyaW5nO1xuICBlbmRwb2ludDogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICBhdXRvSW5zdHJ1bWVudDogYm9vbGVhbjtcbiAgZnJhbWV3b3JrczogRnJhbWV3b3JrW107XG4gIGRlYnVnOiBib29sZWFuO1xufVxuXG5sZXQgY29uZmlnOiBSZXNvbHZlZENvbmZpZyB8IG51bGwgPSBudWxsO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTkZJRyBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gZnJvbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29uZmlnKG9wdGlvbnM6IEluaXRPcHRpb25zID0ge30pOiBSZXNvbHZlZENvbmZpZyB7XG4gIGNvbnN0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LlRISU5LSElWRV9BUElfS0VZIHx8ICcnO1xuICBjb25zdCBhZ2VudElkID0gb3B0aW9ucy5hZ2VudElkIHx8IHByb2Nlc3MuZW52LlRISU5LSElWRV9BR0VOVF9JRCB8fCAnJztcblxuICBpZiAoIWFwaUtleSAmJiAhYWdlbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdFaXRoZXIgYXBpS2V5IG9yIGFnZW50SWQgbXVzdCBiZSBwcm92aWRlZCAob3Igc2V0IFRISU5LSElWRV9BUElfS0VZIGVudiB2YXIpJ1xuICAgICk7XG4gIH1cblxuICBjb25maWcgPSB7XG4gICAgYXBpS2V5LFxuICAgIGFnZW50SWQsXG4gICAgZW5kcG9pbnQ6IG9wdGlvbnMuZW5kcG9pbnQgfHwgcHJvY2Vzcy5lbnYuVEhJTktISVZFX0VORFBPSU5UIHx8IERFRkFVTFRfRU5EUE9JTlQsXG4gICAgc2VydmljZU5hbWU6IG9wdGlvbnMuc2VydmljZU5hbWUgfHwgcHJvY2Vzcy5lbnYuVEhJTktISVZFX1NFUlZJQ0VfTkFNRSB8fCBERUZBVUxUX1NFUlZJQ0VfTkFNRSxcbiAgICBhdXRvSW5zdHJ1bWVudDogb3B0aW9ucy5hdXRvSW5zdHJ1bWVudCA/PyBmYWxzZSxcbiAgICBmcmFtZXdvcmtzOiBvcHRpb25zLmZyYW1ld29ya3MgfHwgWydsYW5nY2hhaW4nLCAnb3BlbmFpJ10sXG4gICAgZGVidWc6IG9wdGlvbnMuZGVidWcgPz8gZmFsc2UsXG4gIH07XG5cbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAqIEB0aHJvd3MgaWYgbm90IGluaXRpYWxpemVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKTogUmVzb2x2ZWRDb25maWcge1xuICBpZiAoIWNvbmZpZyB8fCAhaW5pdGlhbGl6ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaW5rSGl2ZSBTREsgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4nKTtcbiAgfVxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIFNESyBpcyBpbml0aWFsaXplZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGluaXRpYWxpemVkO1xufVxuXG4vKipcbiAqIFJlc2V0IGNvbmZpZ3VyYXRpb24gKGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDb25maWcoKTogdm9pZCB7XG4gIGNvbmZpZyA9IG51bGw7XG4gIGluaXRpYWxpemVkID0gZmFsc2U7XG59XG5cbi8qKlxuICogRGVidWcgbG9nIGhlbHBlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVidWdMb2coLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gIGlmIChjb25maWc/LmRlYnVnKSB7XG4gICAgY29uc29sZS5sb2coJ1tUaGlua0hpdmVdJywgLi4uYXJncyk7XG4gIH1cbn1cbiJdfQ==
@@ -18,8 +18,6 @@ export interface InitOptions {
18
18
  frameworks?: Framework[];
19
19
  /** Enable debug logging */
20
20
  debug?: boolean;
21
- /** API version (default: 'v3') */
22
- apiVersion?: 'v1' | 'v3';
23
21
  }
24
22
  export type Framework = 'langchain' | 'langgraph' | 'openai' | 'openai-assistants' | 'anthropic' | 'llamaindex' | 'n8n' | 'voiceflow';
25
23
  /**
@@ -50,6 +48,32 @@ export interface RunOptions {
50
48
  ticketLinking?: TicketLinkingOptions;
51
49
  /** Custom metadata */
52
50
  metadata?: Record<string, unknown>;
51
+ /**
52
+ * Custom business metrics to record with this run.
53
+ * Keys should match metrics declared during agent setup (onboarding).
54
+ * Values can be numbers, booleans, or short strings (max 100 chars).
55
+ *
56
+ * Metrics are aggregated over time for dashboard display and trend analysis.
57
+ * Undeclared metrics will be tracked but flagged as "discovered" metrics.
58
+ *
59
+ * @example
60
+ * metrics: {
61
+ * customer_satisfaction: 4.5,
62
+ * resolution_time_ms: 2450,
63
+ * escalated: false,
64
+ * ticket_priority: 'high'
65
+ * }
66
+ */
67
+ metrics?: Record<string, number | boolean | string>;
68
+ /**
69
+ * Request evaluation when run is ingested.
70
+ * Overrides agent's auto_evaluate setting for this run.
71
+ *
72
+ * - true: Force evaluation on this run
73
+ * - false: Skip evaluation even if agent has auto_evaluate enabled
74
+ * - undefined: Use agent's auto_evaluate setting (default)
75
+ */
76
+ runEvaluation?: boolean;
53
77
  }
54
78
  export type RunOutcome = 'resolved' | 'escalated' | 'abandoned' | 'failed' | 'transferred' | 'pending';
55
79
  export interface ConversationMessage {
@@ -93,6 +117,11 @@ export interface TicketLinkingOptions {
93
117
  customFieldValue?: string;
94
118
  }
95
119
  export type LinkMethod = 'sdk_explicit' | 'zendesk_marker' | 'custom_field' | 'middleware_stamp' | 'session_match' | 'email_time_window' | 'manual';
120
+ /**
121
+ * Classification flags for categorizing trace issues
122
+ * Separate from binary outcome (success/failure)
123
+ */
124
+ export type TraceCustomFlag = 'hallucination' | 'policy_violation' | 'tone_issue' | 'retrieval_miss' | 'error';
96
125
  /**
97
126
  * Trace options (v2 format, converted to runs internally)
98
127
  * @deprecated Use RunOptions instead
@@ -104,8 +133,10 @@ export interface TraceOptions {
104
133
  agentResponse: string;
105
134
  /** User's detected intent */
106
135
  userIntent?: string;
107
- /** Outcome: success, failure, partial_success */
108
- outcome?: 'success' | 'failure' | 'partial_success';
136
+ /** Binary outcome: success or failure */
137
+ outcome?: 'success' | 'failure';
138
+ /** Classification flags for categorizing the issue type (hallucination, policy_violation, etc.) */
139
+ customFlags?: TraceCustomFlag[];
109
140
  /** Duration in milliseconds */
110
141
  duration?: number;
111
142
  /** Session ID for conversation tracking */
@@ -121,6 +152,28 @@ export interface TraceOptions {
121
152
  businessContext?: BusinessContext;
122
153
  /** Custom metadata */
123
154
  metadata?: Record<string, unknown>;
155
+ /**
156
+ * Custom business metrics to record with this trace.
157
+ * Keys should match metrics declared during agent setup.
158
+ * Values can be numbers, booleans, or short strings.
159
+ *
160
+ * @example
161
+ * metrics: {
162
+ * customer_satisfaction: 4.5,
163
+ * resolution_time_ms: 2450,
164
+ * escalated: false
165
+ * }
166
+ */
167
+ metrics?: Record<string, number | boolean | string>;
168
+ /**
169
+ * Request evaluation when trace is ingested.
170
+ * Overrides agent's auto_evaluate setting for this trace.
171
+ *
172
+ * - true: Force evaluation on this trace
173
+ * - false: Skip evaluation even if agent has auto_evaluate enabled
174
+ * - undefined: Use agent's auto_evaluate setting (default)
175
+ */
176
+ runEvaluation?: boolean;
124
177
  }
125
178
  export interface SpanData {
126
179
  id?: string;
@@ -5,4 +5,4 @@
5
5
  * Run-centric types with facts vs inferences and customer context snapshots
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4wIC0gQ29yZSBUeXBlc1xuICpcbiAqIFJ1bi1jZW50cmljIHR5cGVzIHdpdGggZmFjdHMgdnMgaW5mZXJlbmNlcyBhbmQgY3VzdG9tZXIgY29udGV4dCBzbmFwc2hvdHNcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJTklUIE9QVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0T3B0aW9ucyB7XG4gIC8qKiBUaGlua0hpdmUgQVBJIGtleSAoc3RhcnRzIHdpdGggdGhfKSAqL1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBBZ2VudCBJRCAqL1xuICBhZ2VudElkPzogc3RyaW5nO1xuICAvKiogVGhpbmtIaXZlIEFQSSBlbmRwb2ludCAqL1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgLyoqIFNlcnZpY2UgbmFtZSBmb3IgdHJhY2VzICovXG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIGF1dG8taW5zdHJ1bWVudGF0aW9uICovXG4gIGF1dG9JbnN0cnVtZW50PzogYm9vbGVhbjtcbiAgLyoqIEZyYW1ld29ya3MgdG8gYXV0by1pbnN0cnVtZW50ICovXG4gIGZyYW1ld29ya3M/OiBGcmFtZXdvcmtbXTtcbiAgLyoqIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nICovXG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgLyoqIEFQSSB2ZXJzaW9uIChkZWZhdWx0OiAndjMnKSAqL1xuICBhcGlWZXJzaW9uPzogJ3YxJyB8ICd2Myc7XG59XG5cbmV4cG9ydCB0eXBlIEZyYW1ld29yayA9XG4gIHwgJ2xhbmdjaGFpbidcbiAgfCAnbGFuZ2dyYXBoJ1xuICB8ICdvcGVuYWknXG4gIHwgJ29wZW5haS1hc3Npc3RhbnRzJ1xuICB8ICdhbnRocm9waWMnXG4gIHwgJ2xsYW1haW5kZXgnXG4gIHwgJ244bidcbiAgfCAndm9pY2VmbG93JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUlVOIE9QVElPTlMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgcnVuICh2MyBhdG9taWMgdW5pdClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5PcHRpb25zIHtcbiAgLyoqIEFnZW50IElEICovXG4gIGFnZW50SWQ6IHN0cmluZztcbiAgLyoqIFdoZW4gdGhlIHJ1biBzdGFydGVkICovXG4gIHN0YXJ0ZWRBdD86IHN0cmluZyB8IERhdGU7XG4gIC8qKiBXaGVuIHRoZSBydW4gZW5kZWQgKi9cbiAgZW5kZWRBdD86IHN0cmluZyB8IERhdGU7XG4gIC8qKiBSdW4gb3V0Y29tZSAqL1xuICBvdXRjb21lPzogUnVuT3V0Y29tZTtcbiAgLyoqIFJlYXNvbiBmb3IgdGhlIG91dGNvbWUgKi9cbiAgb3V0Y29tZVJlYXNvbj86IHN0cmluZztcbiAgLyoqIENvbnZlcnNhdGlvbiBtZXNzYWdlcyAqL1xuICBjb252ZXJzYXRpb25NZXNzYWdlczogQ29udmVyc2F0aW9uTWVzc2FnZVtdO1xuICAvKiogTW9kZWwgSUQgdXNlZCAqL1xuICBtb2RlbElkPzogc3RyaW5nO1xuICAvKiogUHJvbXB0IHZlcnNpb24gKi9cbiAgcHJvbXB0VmVyc2lvbj86IHN0cmluZztcbiAgLyoqIFNlc3Npb24gSUQgZm9yIGNvbnZlcnNhdGlvbiB0cmFja2luZyAqL1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b21lciBjb250ZXh0IHNuYXBzaG90IChBUlIsIGhlYWx0aCBBUyBPRiB0aGlzIHJ1bikgKi9cbiAgY3VzdG9tZXJDb250ZXh0PzogQ3VzdG9tZXJDb250ZXh0U25hcHNob3Q7XG4gIC8qKiBUaWNrZXQgbGlua2luZyBvcHRpb25zICovXG4gIHRpY2tldExpbmtpbmc/OiBUaWNrZXRMaW5raW5nT3B0aW9ucztcbiAgLyoqIEN1c3RvbSBtZXRhZGF0YSAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgdHlwZSBSdW5PdXRjb21lID1cbiAgfCAncmVzb2x2ZWQnXG4gIHwgJ2VzY2FsYXRlZCdcbiAgfCAnYWJhbmRvbmVkJ1xuICB8ICdmYWlsZWQnXG4gIHwgJ3RyYW5zZmVycmVkJ1xuICB8ICdwZW5kaW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25NZXNzYWdlIHtcbiAgcm9sZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCcgfCAnc3lzdGVtJyB8ICd0b29sJztcbiAgY29udGVudDogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENVU1RPTUVSIENPTlRFWFQgU05BUFNIT1QgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEN1c3RvbWVyIGNvbnRleHQgY2FwdHVyZWQgQVMgT0YgdGhlIHJ1biB0aW1lIChub3QgY3VycmVudCB2YWx1ZXMpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tZXJDb250ZXh0U25hcHNob3Qge1xuICAvKiogQ3VzdG9tZXIgYWNjb3VudCBJRCAqL1xuICBjdXN0b21lcklkPzogc3RyaW5nO1xuICAvKiogQVJSIGF0IHRoZSB0aW1lIG9mIHRoZSBydW4gKG5vdCBjdXJyZW50IEFSUikgKi9cbiAgYXJyPzogbnVtYmVyO1xuICAvKiogSGVhbHRoIHNjb3JlIGF0IHRoZSB0aW1lIG9mIHRoZSBydW4gKDAtMTAwKSAqL1xuICBoZWFsdGhTY29yZT86IG51bWJlcjtcbiAgLyoqIEN1c3RvbWVyIHNlZ21lbnQgKGUuZy4sICdlbnRlcnByaXNlJywgJ21pZC1tYXJrZXQnLCAnc21iJykgKi9cbiAgc2VnbWVudD86IHN0cmluZztcbiAgLyoqIFdoZW4gdGhpcyBzbmFwc2hvdCB3YXMgY2FwdHVyZWQgKi9cbiAgY2FwdHVyZWRBdD86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWVsZHMgKHdpbGwgYmUgdmFsaWRhdGVkIGFnYWluc3Qgc2NoZW1hKSAqL1xuICBjdXN0b21GaWVsZHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVElDS0VUIExJTktJTkcgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRldGVybWluaXN0aWMgdGlja2V0IGxpbmtpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWNrZXRMaW5raW5nT3B0aW9ucyB7XG4gIC8qKiBMaW5rIG1ldGhvZCB0byB1c2UgKi9cbiAgbWV0aG9kOiBMaW5rTWV0aG9kO1xuICAvKiogVGlja2V0IElEIChmb3Igc2RrX2V4cGxpY2l0IG1ldGhvZCkgKi9cbiAgdGlja2V0SWQ/OiBzdHJpbmc7XG4gIC8qKiBFeHRlcm5hbCB0aWNrZXQgSUQgKGUuZy4sIFplbmRlc2sgdGlja2V0IElEKSAqL1xuICBleHRlcm5hbFRpY2tldElkPzogc3RyaW5nO1xuICAvKiogUGxhdGZvcm0gZm9yIGV4dGVybmFsIHRpY2tldCAqL1xuICBwbGF0Zm9ybT86ICd6ZW5kZXNrJyB8ICdpbnRlcmNvbScgfCAnc2FsZXNmb3JjZScgfCAnZnJlc2hkZXNrJztcbiAgLyoqIEN1c3RvbSBmaWVsZCBuYW1lIGZvciBsaW5raW5nICovXG4gIGN1c3RvbUZpZWxkTmFtZT86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWVsZCB2YWx1ZSAqL1xuICBjdXN0b21GaWVsZFZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaW5rTWV0aG9kID1cbiAgfCAnc2RrX2V4cGxpY2l0JyAgICAgIC8vIERpcmVjdCBTREsgY2FsbCB3aXRoIHRpY2tldCBJRCAoY29uZmlkZW5jZTogMS4wKVxuICB8ICd6ZW5kZXNrX21hcmtlcicgICAgLy8gRW1iZWRkZWQgVEhJRCBtYXJrZXIgaW4gcmVzcG9uc2UgKGNvbmZpZGVuY2U6IDEuMClcbiAgfCAnY3VzdG9tX2ZpZWxkJyAgICAgIC8vIFplbmRlc2sgY3VzdG9tIGZpZWxkIChjb25maWRlbmNlOiAxLjApXG4gIHwgJ21pZGRsZXdhcmVfc3RhbXAnICAvLyBNaWRkbGV3YXJlLWluamVjdGVkIHRyYWNlIElEIChjb25maWRlbmNlOiAwLjk4KVxuICB8ICdzZXNzaW9uX21hdGNoJyAgICAgLy8gU2Vzc2lvbiBJRCBjb3JyZWxhdGlvbiAoY29uZmlkZW5jZTogMC45NSlcbiAgfCAnZW1haWxfdGltZV93aW5kb3cnIC8vIEVtYWlsICsgMTVtaW4gd2luZG93IChjb25maWRlbmNlOiAwLjYpXG4gIHwgJ21hbnVhbCc7ICAgICAgICAgICAvLyBIdW1hbi1hc3NpZ25lZCAoY29uZmlkZW5jZTogMS4wKVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUUkFDRSBPUFRJT05TICh2MiBjb21wYXRpYmlsaXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFRyYWNlIG9wdGlvbnMgKHYyIGZvcm1hdCwgY29udmVydGVkIHRvIHJ1bnMgaW50ZXJuYWxseSlcbiAqIEBkZXByZWNhdGVkIFVzZSBSdW5PcHRpb25zIGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFjZU9wdGlvbnMge1xuICAvKiogVXNlcidzIG1lc3NhZ2UvcXVlcnkgKi9cbiAgdXNlck1lc3NhZ2U6IHN0cmluZztcbiAgLyoqIEFnZW50J3MgcmVzcG9uc2UgKi9cbiAgYWdlbnRSZXNwb25zZTogc3RyaW5nO1xuICAvKiogVXNlcidzIGRldGVjdGVkIGludGVudCAqL1xuICB1c2VySW50ZW50Pzogc3RyaW5nO1xuICAvKiogT3V0Y29tZTogc3VjY2VzcywgZmFpbHVyZSwgcGFydGlhbF9zdWNjZXNzICovXG4gIG91dGNvbWU/OiAnc3VjY2VzcycgfCAnZmFpbHVyZScgfCAncGFydGlhbF9zdWNjZXNzJztcbiAgLyoqIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyAqL1xuICBkdXJhdGlvbj86IG51bWJlcjtcbiAgLyoqIFNlc3Npb24gSUQgZm9yIGNvbnZlcnNhdGlvbiB0cmFja2luZyAqL1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBDb252ZXJzYXRpb24gaGlzdG9yeSAqL1xuICBjb252ZXJzYXRpb25IaXN0b3J5PzogQXJyYXk8eyByb2xlOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PjtcbiAgLyoqIFNwYW4gZGF0YSBmb3IgZGV0YWlsZWQgYW5hbHlzaXMgKi9cbiAgc3BhbnM/OiBTcGFuRGF0YVtdO1xuICAvKiogQnVzaW5lc3MgY29udGV4dCBmb3IgUk9JIGNhbGN1bGF0aW9uICovXG4gIGJ1c2luZXNzQ29udGV4dD86IEJ1c2luZXNzQ29udGV4dDtcbiAgLyoqIEN1c3RvbSBtZXRhZGF0YSAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5EYXRhIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogJ2xsbScgfCAndG9vbCcgfCAncmV0cmlldmFsJyB8ICdlbWJlZGRpbmcnIHwgJ2NoYWluJyB8ICdjdXN0b20nO1xuICBzdGFydFRpbWU/OiBEYXRlO1xuICBlbmRUaW1lPzogRGF0ZTtcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgc3RhdHVzPzogJ29rJyB8ICdlcnJvcicgfCAndGltZW91dCc7XG4gIGVycm9yPzogc3RyaW5nO1xuICBpbnB1dD86IHVua25vd247XG4gIG91dHB1dD86IHVua25vd247XG4gIC8vIExMTS1zcGVjaWZpY1xuICBtb2RlbD86IHN0cmluZztcbiAgcHJvdmlkZXI/OiBzdHJpbmc7XG4gIHByb21wdFRva2Vucz86IG51bWJlcjtcbiAgY29tcGxldGlvblRva2Vucz86IG51bWJlcjtcbiAgLy8gVG9vbC1zcGVjaWZpY1xuICB0b29sTmFtZT86IHN0cmluZztcbiAgdG9vbFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gUmV0cmlldmFsLXNwZWNpZmljXG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICBkb2N1bWVudENvdW50PzogbnVtYmVyO1xuICB0b3BTY29yZT86IG51bWJlcjtcbiAgc291cmNlcz86IHN0cmluZ1tdO1xuICAvLyBDaGlsZHJlblxuICBjaGlsZHJlbj86IFNwYW5EYXRhW107XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIEN1c3RvbWVyQ29udGV4dFNuYXBzaG90IGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdXNpbmVzc0NvbnRleHQge1xuICAvKiogQ3VzdG9tZXIgSUQgKi9cbiAgY3VzdG9tZXJJZD86IHN0cmluZztcbiAgLyoqIFRyYW5zYWN0aW9uIHZhbHVlIGluIGRvbGxhcnMgKi9cbiAgdHJhbnNhY3Rpb25WYWx1ZT86IG51bWJlcjtcbiAgLyoqIFByaW9yaXR5IGxldmVsICovXG4gIHByaW9yaXR5PzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG4gIC8qKiBEZXBhcnRtZW50ICovXG4gIGRlcGFydG1lbnQ/OiBzdHJpbmc7XG4gIC8qKiBJbmR1c3RyeSB2ZXJ0aWNhbCAqL1xuICBpbmR1c3RyeT86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWVsZHMgKi9cbiAgY3VzdG9tPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENMQUlNIFRZUEVTICh2Mylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBIGNsYWltIGFib3V0IGEgcnVuIChmYWN0IHZzIGluZmVyZW5jZSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFpbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuYWx5c2lzSWQ6IHN0cmluZztcbiAgLyoqIFR5cGUgb2YgY2xhaW0gKi9cbiAgY2xhaW1UeXBlOiBDbGFpbVR5cGU7XG4gIC8qKiBDYXRlZ29yeSBvZiB0aGUgY2xhaW0gKi9cbiAgY2xhaW1DYXRlZ29yeTogQ2xhaW1DYXRlZ29yeTtcbiAgLyoqIFRoZSBjbGFpbSB0ZXh0ICovXG4gIGNsYWltVGV4dDogc3RyaW5nO1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGlzIGNsYWltICgwLTEpICovXG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgLyoqIEhvdyB3ZWxsIGNhbGlicmF0ZWQgaXMgdGhpcyBjb25maWRlbmNlICovXG4gIGNvbmZpZGVuY2VDYWxpYnJhdGlvbjogQ29uZmlkZW5jZUNhbGlicmF0aW9uO1xuICAvKiogRXZpZGVuY2Ugc3VwcG9ydGluZyB0aGlzIGNsYWltICovXG4gIGV2aWRlbmNlOiBFdmlkZW5jZVJlZmVyZW5jZVtdO1xuICAvKiogSXMgdGhpcyBjbGFpbSBleHBsYWluYWJsZSB0byBlbmQgdXNlcnMgKi9cbiAgaXNFeHBsYWluYWJsZTogYm9vbGVhbjtcbiAgLyoqIFByb2JhYmlsaXR5IHZhbHVlIGZvciBwcm9iYWJpbGl0eSBjbGFpbXMgKi9cbiAgcHJvYmFiaWxpdHlWYWx1ZT86IG51bWJlcjtcbiAgLyoqIEh1bWFuLWFzc2lnbmVkIHZlcmlmaWNhdGlvbiBzdGF0dXMgKi9cbiAgaHVtYW5WZXJpZmllZD86IGJvb2xlYW47XG4gIC8qKiBIdW1hbiB2ZXJpZmljYXRpb24gdmVyZGljdCAqL1xuICBodW1hblZlcmRpY3Q/OiAnY29uZmlybWVkJyB8ICdyZWplY3RlZCcgfCAnbW9kaWZpZWQnO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENsYWltVHlwZSA9ICdvYnNlcnZlZCcgfCAnaW5mZXJyZWQnIHwgJ2NvbXB1dGVkJztcbmV4cG9ydCB0eXBlIENsYWltQ2F0ZWdvcnkgPVxuICB8ICdvdXRjb21lJ1xuICB8ICdyb290X2NhdXNlJ1xuICB8ICdjdXN0b21lcl9pbXBhY3QnXG4gIHwgJ2NodXJuX3Jpc2snXG4gIHwgJ3JldmVudWVfaW1wYWN0J1xuICB8ICdxdWFsaXR5J1xuICB8ICdvdGhlcic7XG5leHBvcnQgdHlwZSBDb25maWRlbmNlQ2FsaWJyYXRpb24gPSAnY2FsaWJyYXRlZCcgfCAndW5jYWxpYnJhdGVkJyB8ICduZWVkc19tb3JlX2RhdGEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2aWRlbmNlUmVmZXJlbmNlIHtcbiAgLyoqIFR5cGUgb2YgZXZpZGVuY2UgKi9cbiAgdHlwZTogJ3NwYW4nIHwgJ21lc3NhZ2UnIHwgJ3Rvb2xfY2FsbCcgfCAnZXh0ZXJuYWwnIHwgJ2NvbXB1dGVkJztcbiAgLyoqIElEIG9mIHRoZSByZWZlcmVuY2VkIGl0ZW0gKi9cbiAgcmVmZXJlbmNlSWQ6IHN0cmluZztcbiAgLyoqIEhvdyByZWxldmFudCBpcyB0aGlzIGV2aWRlbmNlICovXG4gIHJlbGV2YW5jZTogc3RyaW5nO1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGlzIGV2aWRlbmNlICovXG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQU5BTFlTSVMgUkVTVUxUICh2Mylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXNpc1Jlc3VsdCB7XG4gIGlkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIGFuYWx5c2lzVmVyc2lvbjogc3RyaW5nO1xuICBtb2RlbFVzZWQ6IHN0cmluZztcbiAgLyoqIE92ZXJhbGwgb3V0Y29tZSB2ZXJkaWN0ICovXG4gIG91dGNvbWVWZXJkaWN0OiAnc3VjY2VzcycgfCAncGFydGlhbF9zdWNjZXNzJyB8ICdmYWlsdXJlJztcbiAgLyoqIENvbmZpZGVuY2UgaW4gdGhlIHZlcmRpY3QgKDAtMSkgKi9cbiAgb3V0Y29tZUNvbmZpZGVuY2U6IG51bWJlcjtcbiAgLyoqIFJvb3QgY2F1c2UgY2F0ZWdvcnkgaWYgZmFpbHVyZSAqL1xuICByb290Q2F1c2VDYXRlZ29yeT86IHN0cmluZztcbiAgLyoqIENvbmZpZGVuY2UgaW4gcm9vdCBjYXVzZSAoMC0xKSAqL1xuICByb290Q2F1c2VDb25maWRlbmNlPzogbnVtYmVyO1xuICAvKiogSXMgdGhpcyB0aGUgY3VycmVudCBhbmFseXNpcyAqL1xuICBpc0N1cnJlbnQ6IGJvb2xlYW47XG4gIC8qKiBJRCBvZiBhbmFseXNpcyB0aGF0IHN1cGVyc2VkZWQgdGhpcyBvbmUgKi9cbiAgc3VwZXJzZWRlZEJ5Pzogc3RyaW5nO1xuICAvKiogQ2xhaW1zIGZyb20gdGhpcyBhbmFseXNpcyAqL1xuICBjbGFpbXM6IENsYWltW107XG4gIGFuYWx5emVkQXQ/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ0FMSUJSQVRJT04gVFlQRVMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGlicmF0aW9uU3RhdHVzIHtcbiAgYWdlbnRJZDogc3RyaW5nO1xuICBwcmVkaWN0aW9uVHlwZTogUHJlZGljdGlvblR5cGU7XG4gIC8qKiBCcmllciBzY29yZSAobG93ZXIgaXMgYmV0dGVyLCA8MC4xIGlzIGdvb2QpICovXG4gIGJyaWVyU2NvcmU6IG51bWJlcjtcbiAgLyoqIEV4cGVjdGVkIENhbGlicmF0aW9uIEVycm9yICovXG4gIGVjZTogbnVtYmVyO1xuICAvKiogU2FtcGxlIGNvdW50ICovXG4gIHNhbXBsZUNvdW50OiBudW1iZXI7XG4gIC8qKiBJcyB0aGUgbW9kZWwgd2VsbC1jYWxpYnJhdGVkICovXG4gIGlzQ2FsaWJyYXRlZDogYm9vbGVhbjtcbiAgLyoqIENhbGlicmF0aW9uIGJ5IGNvbmZpZGVuY2UgYnVja2V0ICovXG4gIGJ1Y2tldHM6IENhbGlicmF0aW9uQnVja2V0W107XG4gIGxhc3RVcGRhdGVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQcmVkaWN0aW9uVHlwZSA9XG4gIHwgJ291dGNvbWUnXG4gIHwgJ2NodXJuX3Jpc2snXG4gIHwgJ2VzY2FsYXRpb25fcmlzaydcbiAgfCAncmVzb2x1dGlvbl90aW1lJ1xuICB8ICdjdXN0b21lcl9zYXRpc2ZhY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGlicmF0aW9uQnVja2V0IHtcbiAgYnVja2V0U3RhcnQ6IG51bWJlcjtcbiAgYnVja2V0RW5kOiBudW1iZXI7XG4gIHByZWRpY3RlZFByb2JhYmlsaXR5OiBudW1iZXI7XG4gIGFjdHVhbEZyZXF1ZW5jeTogbnVtYmVyO1xuICBzYW1wbGVDb3VudDogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBST0kgVFlQRVMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvaUNvbmZpZyB7XG4gIC8qKiBDb3N0IHBlciBzdXBwb3J0IHRpY2tldCBkZWZsZWN0ZWQgKi9cbiAgdGlja2V0RGVmbGVjdGlvblZhbHVlOiBudW1iZXI7XG4gIC8qKiBDb3N0IHBlciBlc2NhbGF0aW9uICovXG4gIGVzY2FsYXRpb25Db3N0OiBudW1iZXI7XG4gIC8qKiBDb3N0IHBlciBob3VyIG9mIGFnZW50IHRpbWUgKi9cbiAgYWdlbnRIb3VybHlDb3N0OiBudW1iZXI7XG4gIC8qKiBBdmVyYWdlIHJlc29sdXRpb24gdGltZSAobWludXRlcykgKi9cbiAgYXZnUmVzb2x1dGlvbk1pbnV0ZXM6IG51bWJlcjtcbiAgLyoqIENTQVQgaW1wYWN0IG11bHRpcGxpZXIgKi9cbiAgY3NhdEltcGFjdE11bHRpcGxpZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb2lTdW1tYXJ5IHtcbiAgcGVyaW9kOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9O1xuICAvKiogVG90YWwgZXN0aW1hdGVkIHNhdmluZ3MgKi9cbiAgdG90YWxTYXZpbmdzOiBudW1iZXI7XG4gIC8qKiBCcmVha2Rvd24gYnkgY2F0ZWdvcnkgKi9cbiAgYnJlYWtkb3duOiB7XG4gICAgdGlja2V0RGVmbGVjdGlvbjogbnVtYmVyO1xuICAgIGVzY2FsYXRpb25QcmV2ZW50aW9uOiBudW1iZXI7XG4gICAgdGltZVRvUmVzb2x1dGlvbjogbnVtYmVyO1xuICAgIGNodXJuUHJldmVudGlvbjogbnVtYmVyO1xuICB9O1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGVzZSBlc3RpbWF0ZXMgKi9cbiAgY29uZmlkZW5jZTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcbiAgLyoqIE1ldGhvZG9sb2d5IHVzZWQgKi9cbiAgbWV0aG9kb2xvZ3k6IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVhQTEFJTkFCSUxJVFkgUkVTVUxUICh2MiBjb21wYXRpYmlsaXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBBbmFseXNpc1Jlc3VsdCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpbmFiaWxpdHlSZXN1bHQge1xuICB0cmFjZUlkOiBzdHJpbmc7XG4gIGV4cGxhaW5hYmlsaXR5SWQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICBvdXRjb21lOiB7XG4gICAgdmVyZGljdDogJ3N1Y2Nlc3MnIHwgJ3BhcnRpYWxfc3VjY2VzcycgfCAnZmFpbHVyZSc7XG4gICAgY29uZmlkZW5jZTogbnVtYmVyO1xuICAgIHJlYXNvbmluZzogc3RyaW5nO1xuICB9O1xuICBidXNpbmVzc0ltcGFjdDoge1xuICAgIGltcGFjdFNjb3JlOiBudW1iZXI7XG4gICAgY3VzdG9tZXJTYXRpc2ZhY3Rpb246IG51bWJlcjtcbiAgICByZXZlbnVlUmlzazogc3RyaW5nO1xuICB9O1xuICByZWNvbW1lbmRhdGlvbnM6IEFycmF5PHtcbiAgICBwcmlvcml0eTogc3RyaW5nO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgZXhwZWN0ZWRJbXBhY3Q6IHN0cmluZztcbiAgfT47XG4gIHJhZ0V2YWx1YXRpb24/OiB7XG4gICAgZ3JvdW5kZWRuZXNzOiBudW1iZXI7XG4gICAgZmFpdGhmdWxuZXNzOiBudW1iZXI7XG4gICAgYW5zd2VyUmVsZXZhbmNlOiBudW1iZXI7XG4gIH07XG4gIGhhbGx1Y2luYXRpb25SZXBvcnQ/OiB7XG4gICAgZGV0ZWN0ZWQ6IGJvb2xlYW47XG4gICAgdHlwZXM6IHN0cmluZ1tdO1xuICAgIHNldmVyaXR5OiBzdHJpbmc7XG4gIH07XG4gIHByb2Nlc3NpbmdUaW1lTXM6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQVBJIFJFU1BPTlNFIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzcG9uc2U8VD4ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkYXRhPzogVDtcbiAgZXJyb3I/OiB7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBkZXRhaWxzPzogdW5rbm93bjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0ZWRSZXNwb25zZTxUPiB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE6IHtcbiAgICBpdGVtczogVFtdO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgb2Zmc2V0OiBudW1iZXI7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5SZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbXBhbnlJZDogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIHRpY2tldElkPzogc3RyaW5nO1xuICBjdXN0b21lckFjY291bnRJZD86IHN0cmluZztcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBzdGFydGVkQXQ6IHN0cmluZztcbiAgZW5kZWRBdD86IHN0cmluZztcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgb3V0Y29tZT86IFJ1bk91dGNvbWU7XG4gIG91dGNvbWVSZWFzb24/OiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbk1lc3NhZ2VzOiBDb252ZXJzYXRpb25NZXNzYWdlW107XG4gIG1vZGVsSWQ/OiBzdHJpbmc7XG4gIHByb21wdFZlcnNpb24/OiBzdHJpbmc7XG4gIGN1c3RvbWVyQ29udGV4dFNuYXBzaG90PzogQ3VzdG9tZXJDb250ZXh0U25hcHNob3Q7XG4gIHplbmRlc2tNYXJrZXI/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cbiJdfQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4wIC0gQ29yZSBUeXBlc1xuICpcbiAqIFJ1bi1jZW50cmljIHR5cGVzIHdpdGggZmFjdHMgdnMgaW5mZXJlbmNlcyBhbmQgY3VzdG9tZXIgY29udGV4dCBzbmFwc2hvdHNcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJTklUIE9QVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0T3B0aW9ucyB7XG4gIC8qKiBUaGlua0hpdmUgQVBJIGtleSAoc3RhcnRzIHdpdGggdGhfKSAqL1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBBZ2VudCBJRCAqL1xuICBhZ2VudElkPzogc3RyaW5nO1xuICAvKiogVGhpbmtIaXZlIEFQSSBlbmRwb2ludCAqL1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgLyoqIFNlcnZpY2UgbmFtZSBmb3IgdHJhY2VzICovXG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIGF1dG8taW5zdHJ1bWVudGF0aW9uICovXG4gIGF1dG9JbnN0cnVtZW50PzogYm9vbGVhbjtcbiAgLyoqIEZyYW1ld29ya3MgdG8gYXV0by1pbnN0cnVtZW50ICovXG4gIGZyYW1ld29ya3M/OiBGcmFtZXdvcmtbXTtcbiAgLyoqIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nICovXG4gIGRlYnVnPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRnJhbWV3b3JrID1cbiAgfCAnbGFuZ2NoYWluJ1xuICB8ICdsYW5nZ3JhcGgnXG4gIHwgJ29wZW5haSdcbiAgfCAnb3BlbmFpLWFzc2lzdGFudHMnXG4gIHwgJ2FudGhyb3BpYydcbiAgfCAnbGxhbWFpbmRleCdcbiAgfCAnbjhuJ1xuICB8ICd2b2ljZWZsb3cnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSVU4gT1BUSU9OUyAodjMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBydW4gKHYzIGF0b21pYyB1bml0KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWdlbnQgSUQgKi9cbiAgYWdlbnRJZDogc3RyaW5nO1xuICAvKiogV2hlbiB0aGUgcnVuIHN0YXJ0ZWQgKi9cbiAgc3RhcnRlZEF0Pzogc3RyaW5nIHwgRGF0ZTtcbiAgLyoqIFdoZW4gdGhlIHJ1biBlbmRlZCAqL1xuICBlbmRlZEF0Pzogc3RyaW5nIHwgRGF0ZTtcbiAgLyoqIFJ1biBvdXRjb21lICovXG4gIG91dGNvbWU/OiBSdW5PdXRjb21lO1xuICAvKiogUmVhc29uIGZvciB0aGUgb3V0Y29tZSAqL1xuICBvdXRjb21lUmVhc29uPzogc3RyaW5nO1xuICAvKiogQ29udmVyc2F0aW9uIG1lc3NhZ2VzICovXG4gIGNvbnZlcnNhdGlvbk1lc3NhZ2VzOiBDb252ZXJzYXRpb25NZXNzYWdlW107XG4gIC8qKiBNb2RlbCBJRCB1c2VkICovXG4gIG1vZGVsSWQ/OiBzdHJpbmc7XG4gIC8qKiBQcm9tcHQgdmVyc2lvbiAqL1xuICBwcm9tcHRWZXJzaW9uPzogc3RyaW5nO1xuICAvKiogU2Vzc2lvbiBJRCBmb3IgY29udmVyc2F0aW9uIHRyYWNraW5nICovXG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgLyoqIEN1c3RvbWVyIGNvbnRleHQgc25hcHNob3QgKEFSUiwgaGVhbHRoIEFTIE9GIHRoaXMgcnVuKSAqL1xuICBjdXN0b21lckNvbnRleHQ/OiBDdXN0b21lckNvbnRleHRTbmFwc2hvdDtcbiAgLyoqIFRpY2tldCBsaW5raW5nIG9wdGlvbnMgKi9cbiAgdGlja2V0TGlua2luZz86IFRpY2tldExpbmtpbmdPcHRpb25zO1xuICAvKiogQ3VzdG9tIG1ldGFkYXRhICovXG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBDdXN0b20gYnVzaW5lc3MgbWV0cmljcyB0byByZWNvcmQgd2l0aCB0aGlzIHJ1bi5cbiAgICogS2V5cyBzaG91bGQgbWF0Y2ggbWV0cmljcyBkZWNsYXJlZCBkdXJpbmcgYWdlbnQgc2V0dXAgKG9uYm9hcmRpbmcpLlxuICAgKiBWYWx1ZXMgY2FuIGJlIG51bWJlcnMsIGJvb2xlYW5zLCBvciBzaG9ydCBzdHJpbmdzIChtYXggMTAwIGNoYXJzKS5cbiAgICpcbiAgICogTWV0cmljcyBhcmUgYWdncmVnYXRlZCBvdmVyIHRpbWUgZm9yIGRhc2hib2FyZCBkaXNwbGF5IGFuZCB0cmVuZCBhbmFseXNpcy5cbiAgICogVW5kZWNsYXJlZCBtZXRyaWNzIHdpbGwgYmUgdHJhY2tlZCBidXQgZmxhZ2dlZCBhcyBcImRpc2NvdmVyZWRcIiBtZXRyaWNzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBtZXRyaWNzOiB7XG4gICAqICAgY3VzdG9tZXJfc2F0aXNmYWN0aW9uOiA0LjUsXG4gICAqICAgcmVzb2x1dGlvbl90aW1lX21zOiAyNDUwLFxuICAgKiAgIGVzY2FsYXRlZDogZmFsc2UsXG4gICAqICAgdGlja2V0X3ByaW9yaXR5OiAnaGlnaCdcbiAgICogfVxuICAgKi9cbiAgbWV0cmljcz86IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IGJvb2xlYW4gfCBzdHJpbmc+O1xuICAvKipcbiAgICogUmVxdWVzdCBldmFsdWF0aW9uIHdoZW4gcnVuIGlzIGluZ2VzdGVkLlxuICAgKiBPdmVycmlkZXMgYWdlbnQncyBhdXRvX2V2YWx1YXRlIHNldHRpbmcgZm9yIHRoaXMgcnVuLlxuICAgKlxuICAgKiAtIHRydWU6IEZvcmNlIGV2YWx1YXRpb24gb24gdGhpcyBydW5cbiAgICogLSBmYWxzZTogU2tpcCBldmFsdWF0aW9uIGV2ZW4gaWYgYWdlbnQgaGFzIGF1dG9fZXZhbHVhdGUgZW5hYmxlZFxuICAgKiAtIHVuZGVmaW5lZDogVXNlIGFnZW50J3MgYXV0b19ldmFsdWF0ZSBzZXR0aW5nIChkZWZhdWx0KVxuICAgKi9cbiAgcnVuRXZhbHVhdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFJ1bk91dGNvbWUgPVxuICB8ICdyZXNvbHZlZCdcbiAgfCAnZXNjYWxhdGVkJ1xuICB8ICdhYmFuZG9uZWQnXG4gIHwgJ2ZhaWxlZCdcbiAgfCAndHJhbnNmZXJyZWQnXG4gIHwgJ3BlbmRpbmcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbk1lc3NhZ2Uge1xuICByb2xlOiAndXNlcicgfCAnYXNzaXN0YW50JyB8ICdzeXN0ZW0nIHwgJ3Rvb2wnO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHRpbWVzdGFtcD86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ1VTVE9NRVIgQ09OVEVYVCBTTkFQU0hPVCAodjMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ3VzdG9tZXIgY29udGV4dCBjYXB0dXJlZCBBUyBPRiB0aGUgcnVuIHRpbWUgKG5vdCBjdXJyZW50IHZhbHVlcylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21lckNvbnRleHRTbmFwc2hvdCB7XG4gIC8qKiBDdXN0b21lciBhY2NvdW50IElEICovXG4gIGN1c3RvbWVySWQ/OiBzdHJpbmc7XG4gIC8qKiBBUlIgYXQgdGhlIHRpbWUgb2YgdGhlIHJ1biAobm90IGN1cnJlbnQgQVJSKSAqL1xuICBhcnI/OiBudW1iZXI7XG4gIC8qKiBIZWFsdGggc2NvcmUgYXQgdGhlIHRpbWUgb2YgdGhlIHJ1biAoMC0xMDApICovXG4gIGhlYWx0aFNjb3JlPzogbnVtYmVyO1xuICAvKiogQ3VzdG9tZXIgc2VnbWVudCAoZS5nLiwgJ2VudGVycHJpc2UnLCAnbWlkLW1hcmtldCcsICdzbWInKSAqL1xuICBzZWdtZW50Pzogc3RyaW5nO1xuICAvKiogV2hlbiB0aGlzIHNuYXBzaG90IHdhcyBjYXB0dXJlZCAqL1xuICBjYXB0dXJlZEF0Pzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIGZpZWxkcyAod2lsbCBiZSB2YWxpZGF0ZWQgYWdhaW5zdCBzY2hlbWEpICovXG4gIGN1c3RvbUZpZWxkcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUSUNLRVQgTElOS0lORyAodjMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZGV0ZXJtaW5pc3RpYyB0aWNrZXQgbGlua2luZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpY2tldExpbmtpbmdPcHRpb25zIHtcbiAgLyoqIExpbmsgbWV0aG9kIHRvIHVzZSAqL1xuICBtZXRob2Q6IExpbmtNZXRob2Q7XG4gIC8qKiBUaWNrZXQgSUQgKGZvciBzZGtfZXhwbGljaXQgbWV0aG9kKSAqL1xuICB0aWNrZXRJZD86IHN0cmluZztcbiAgLyoqIEV4dGVybmFsIHRpY2tldCBJRCAoZS5nLiwgWmVuZGVzayB0aWNrZXQgSUQpICovXG4gIGV4dGVybmFsVGlja2V0SWQ/OiBzdHJpbmc7XG4gIC8qKiBQbGF0Zm9ybSBmb3IgZXh0ZXJuYWwgdGlja2V0ICovXG4gIHBsYXRmb3JtPzogJ3plbmRlc2snIHwgJ2ludGVyY29tJyB8ICdzYWxlc2ZvcmNlJyB8ICdmcmVzaGRlc2snO1xuICAvKiogQ3VzdG9tIGZpZWxkIG5hbWUgZm9yIGxpbmtpbmcgKi9cbiAgY3VzdG9tRmllbGROYW1lPzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIGZpZWxkIHZhbHVlICovXG4gIGN1c3RvbUZpZWxkVmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIExpbmtNZXRob2QgPVxuICB8ICdzZGtfZXhwbGljaXQnICAgICAgLy8gRGlyZWN0IFNESyBjYWxsIHdpdGggdGlja2V0IElEIChjb25maWRlbmNlOiAxLjApXG4gIHwgJ3plbmRlc2tfbWFya2VyJyAgICAvLyBFbWJlZGRlZCBUSElEIG1hcmtlciBpbiByZXNwb25zZSAoY29uZmlkZW5jZTogMS4wKVxuICB8ICdjdXN0b21fZmllbGQnICAgICAgLy8gWmVuZGVzayBjdXN0b20gZmllbGQgKGNvbmZpZGVuY2U6IDEuMClcbiAgfCAnbWlkZGxld2FyZV9zdGFtcCcgIC8vIE1pZGRsZXdhcmUtaW5qZWN0ZWQgdHJhY2UgSUQgKGNvbmZpZGVuY2U6IDAuOTgpXG4gIHwgJ3Nlc3Npb25fbWF0Y2gnICAgICAvLyBTZXNzaW9uIElEIGNvcnJlbGF0aW9uIChjb25maWRlbmNlOiAwLjk1KVxuICB8ICdlbWFpbF90aW1lX3dpbmRvdycgLy8gRW1haWwgKyAxNW1pbiB3aW5kb3cgKGNvbmZpZGVuY2U6IDAuNilcbiAgfCAnbWFudWFsJzsgICAgICAgICAgIC8vIEh1bWFuLWFzc2lnbmVkIChjb25maWRlbmNlOiAxLjApXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRSQUNFIE9QVElPTlMgKHYyIGNvbXBhdGliaWxpdHkpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2xhc3NpZmljYXRpb24gZmxhZ3MgZm9yIGNhdGVnb3JpemluZyB0cmFjZSBpc3N1ZXNcbiAqIFNlcGFyYXRlIGZyb20gYmluYXJ5IG91dGNvbWUgKHN1Y2Nlc3MvZmFpbHVyZSlcbiAqL1xuZXhwb3J0IHR5cGUgVHJhY2VDdXN0b21GbGFnID1cbiAgfCAnaGFsbHVjaW5hdGlvbidcbiAgfCAncG9saWN5X3Zpb2xhdGlvbidcbiAgfCAndG9uZV9pc3N1ZSdcbiAgfCAncmV0cmlldmFsX21pc3MnXG4gIHwgJ2Vycm9yJztcblxuLyoqXG4gKiBUcmFjZSBvcHRpb25zICh2MiBmb3JtYXQsIGNvbnZlcnRlZCB0byBydW5zIGludGVybmFsbHkpXG4gKiBAZGVwcmVjYXRlZCBVc2UgUnVuT3B0aW9ucyBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2VPcHRpb25zIHtcbiAgLyoqIFVzZXIncyBtZXNzYWdlL3F1ZXJ5ICovXG4gIHVzZXJNZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBBZ2VudCdzIHJlc3BvbnNlICovXG4gIGFnZW50UmVzcG9uc2U6IHN0cmluZztcbiAgLyoqIFVzZXIncyBkZXRlY3RlZCBpbnRlbnQgKi9cbiAgdXNlckludGVudD86IHN0cmluZztcbiAgLyoqIEJpbmFyeSBvdXRjb21lOiBzdWNjZXNzIG9yIGZhaWx1cmUgKi9cbiAgb3V0Y29tZT86ICdzdWNjZXNzJyB8ICdmYWlsdXJlJztcbiAgLyoqIENsYXNzaWZpY2F0aW9uIGZsYWdzIGZvciBjYXRlZ29yaXppbmcgdGhlIGlzc3VlIHR5cGUgKGhhbGx1Y2luYXRpb24sIHBvbGljeV92aW9sYXRpb24sIGV0Yy4pICovXG4gIGN1c3RvbUZsYWdzPzogVHJhY2VDdXN0b21GbGFnW107XG4gIC8qKiBEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgKi9cbiAgZHVyYXRpb24/OiBudW1iZXI7XG4gIC8qKiBTZXNzaW9uIElEIGZvciBjb252ZXJzYXRpb24gdHJhY2tpbmcgKi9cbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICAvKiogQ29udmVyc2F0aW9uIGhpc3RvcnkgKi9cbiAgY29udmVyc2F0aW9uSGlzdG9yeT86IEFycmF5PHsgcm9sZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT47XG4gIC8qKiBTcGFuIGRhdGEgZm9yIGRldGFpbGVkIGFuYWx5c2lzICovXG4gIHNwYW5zPzogU3BhbkRhdGFbXTtcbiAgLyoqIEJ1c2luZXNzIGNvbnRleHQgZm9yIFJPSSBjYWxjdWxhdGlvbiAqL1xuICBidXNpbmVzc0NvbnRleHQ/OiBCdXNpbmVzc0NvbnRleHQ7XG4gIC8qKiBDdXN0b20gbWV0YWRhdGEgKi9cbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEN1c3RvbSBidXNpbmVzcyBtZXRyaWNzIHRvIHJlY29yZCB3aXRoIHRoaXMgdHJhY2UuXG4gICAqIEtleXMgc2hvdWxkIG1hdGNoIG1ldHJpY3MgZGVjbGFyZWQgZHVyaW5nIGFnZW50IHNldHVwLlxuICAgKiBWYWx1ZXMgY2FuIGJlIG51bWJlcnMsIGJvb2xlYW5zLCBvciBzaG9ydCBzdHJpbmdzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBtZXRyaWNzOiB7XG4gICAqICAgY3VzdG9tZXJfc2F0aXNmYWN0aW9uOiA0LjUsXG4gICAqICAgcmVzb2x1dGlvbl90aW1lX21zOiAyNDUwLFxuICAgKiAgIGVzY2FsYXRlZDogZmFsc2VcbiAgICogfVxuICAgKi9cbiAgbWV0cmljcz86IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IGJvb2xlYW4gfCBzdHJpbmc+O1xuICAvKipcbiAgICogUmVxdWVzdCBldmFsdWF0aW9uIHdoZW4gdHJhY2UgaXMgaW5nZXN0ZWQuXG4gICAqIE92ZXJyaWRlcyBhZ2VudCdzIGF1dG9fZXZhbHVhdGUgc2V0dGluZyBmb3IgdGhpcyB0cmFjZS5cbiAgICpcbiAgICogLSB0cnVlOiBGb3JjZSBldmFsdWF0aW9uIG9uIHRoaXMgdHJhY2VcbiAgICogLSBmYWxzZTogU2tpcCBldmFsdWF0aW9uIGV2ZW4gaWYgYWdlbnQgaGFzIGF1dG9fZXZhbHVhdGUgZW5hYmxlZFxuICAgKiAtIHVuZGVmaW5lZDogVXNlIGFnZW50J3MgYXV0b19ldmFsdWF0ZSBzZXR0aW5nIChkZWZhdWx0KVxuICAgKi9cbiAgcnVuRXZhbHVhdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BhbkRhdGEge1xuICBpZD86IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAnbGxtJyB8ICd0b29sJyB8ICdyZXRyaWV2YWwnIHwgJ2VtYmVkZGluZycgfCAnY2hhaW4nIHwgJ2N1c3RvbSc7XG4gIHN0YXJ0VGltZT86IERhdGU7XG4gIGVuZFRpbWU/OiBEYXRlO1xuICBkdXJhdGlvbk1zPzogbnVtYmVyO1xuICBzdGF0dXM/OiAnb2snIHwgJ2Vycm9yJyB8ICd0aW1lb3V0JztcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIGlucHV0PzogdW5rbm93bjtcbiAgb3V0cHV0PzogdW5rbm93bjtcbiAgLy8gTExNLXNwZWNpZmljXG4gIG1vZGVsPzogc3RyaW5nO1xuICBwcm92aWRlcj86IHN0cmluZztcbiAgcHJvbXB0VG9rZW5zPzogbnVtYmVyO1xuICBjb21wbGV0aW9uVG9rZW5zPzogbnVtYmVyO1xuICAvLyBUb29sLXNwZWNpZmljXG4gIHRvb2xOYW1lPzogc3RyaW5nO1xuICB0b29sUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBSZXRyaWV2YWwtc3BlY2lmaWNcbiAgcXVlcnk/OiBzdHJpbmc7XG4gIGRvY3VtZW50Q291bnQ/OiBudW1iZXI7XG4gIHRvcFNjb3JlPzogbnVtYmVyO1xuICBzb3VyY2VzPzogc3RyaW5nW107XG4gIC8vIENoaWxkcmVuXG4gIGNoaWxkcmVuPzogU3BhbkRhdGFbXTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ3VzdG9tZXJDb250ZXh0U25hcHNob3QgaW5zdGVhZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzQ29udGV4dCB7XG4gIC8qKiBDdXN0b21lciBJRCAqL1xuICBjdXN0b21lcklkPzogc3RyaW5nO1xuICAvKiogVHJhbnNhY3Rpb24gdmFsdWUgaW4gZG9sbGFycyAqL1xuICB0cmFuc2FjdGlvblZhbHVlPzogbnVtYmVyO1xuICAvKiogUHJpb3JpdHkgbGV2ZWwgKi9cbiAgcHJpb3JpdHk/OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJztcbiAgLyoqIERlcGFydG1lbnQgKi9cbiAgZGVwYXJ0bWVudD86IHN0cmluZztcbiAgLyoqIEluZHVzdHJ5IHZlcnRpY2FsICovXG4gIGluZHVzdHJ5Pzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIGZpZWxkcyAqL1xuICBjdXN0b20/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ0xBSU0gVFlQRVMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEEgY2xhaW0gYWJvdXQgYSBydW4gKGZhY3QgdnMgaW5mZXJlbmNlKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsYWltIHtcbiAgaWQ6IHN0cmluZztcbiAgYW5hbHlzaXNJZDogc3RyaW5nO1xuICAvKiogVHlwZSBvZiBjbGFpbSAqL1xuICBjbGFpbVR5cGU6IENsYWltVHlwZTtcbiAgLyoqIENhdGVnb3J5IG9mIHRoZSBjbGFpbSAqL1xuICBjbGFpbUNhdGVnb3J5OiBDbGFpbUNhdGVnb3J5O1xuICAvKiogVGhlIGNsYWltIHRleHQgKi9cbiAgY2xhaW1UZXh0OiBzdHJpbmc7XG4gIC8qKiBDb25maWRlbmNlIGluIHRoaXMgY2xhaW0gKDAtMSkgKi9cbiAgY29uZmlkZW5jZTogbnVtYmVyO1xuICAvKiogSG93IHdlbGwgY2FsaWJyYXRlZCBpcyB0aGlzIGNvbmZpZGVuY2UgKi9cbiAgY29uZmlkZW5jZUNhbGlicmF0aW9uOiBDb25maWRlbmNlQ2FsaWJyYXRpb247XG4gIC8qKiBFdmlkZW5jZSBzdXBwb3J0aW5nIHRoaXMgY2xhaW0gKi9cbiAgZXZpZGVuY2U6IEV2aWRlbmNlUmVmZXJlbmNlW107XG4gIC8qKiBJcyB0aGlzIGNsYWltIGV4cGxhaW5hYmxlIHRvIGVuZCB1c2VycyAqL1xuICBpc0V4cGxhaW5hYmxlOiBib29sZWFuO1xuICAvKiogUHJvYmFiaWxpdHkgdmFsdWUgZm9yIHByb2JhYmlsaXR5IGNsYWltcyAqL1xuICBwcm9iYWJpbGl0eVZhbHVlPzogbnVtYmVyO1xuICAvKiogSHVtYW4tYXNzaWduZWQgdmVyaWZpY2F0aW9uIHN0YXR1cyAqL1xuICBodW1hblZlcmlmaWVkPzogYm9vbGVhbjtcbiAgLyoqIEh1bWFuIHZlcmlmaWNhdGlvbiB2ZXJkaWN0ICovXG4gIGh1bWFuVmVyZGljdD86ICdjb25maXJtZWQnIHwgJ3JlamVjdGVkJyB8ICdtb2RpZmllZCc7XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2xhaW1UeXBlID0gJ29ic2VydmVkJyB8ICdpbmZlcnJlZCcgfCAnY29tcHV0ZWQnO1xuZXhwb3J0IHR5cGUgQ2xhaW1DYXRlZ29yeSA9XG4gIHwgJ291dGNvbWUnXG4gIHwgJ3Jvb3RfY2F1c2UnXG4gIHwgJ2N1c3RvbWVyX2ltcGFjdCdcbiAgfCAnY2h1cm5fcmlzaydcbiAgfCAncmV2ZW51ZV9pbXBhY3QnXG4gIHwgJ3F1YWxpdHknXG4gIHwgJ290aGVyJztcbmV4cG9ydCB0eXBlIENvbmZpZGVuY2VDYWxpYnJhdGlvbiA9ICdjYWxpYnJhdGVkJyB8ICd1bmNhbGlicmF0ZWQnIHwgJ25lZWRzX21vcmVfZGF0YSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZpZGVuY2VSZWZlcmVuY2Uge1xuICAvKiogVHlwZSBvZiBldmlkZW5jZSAqL1xuICB0eXBlOiAnc3BhbicgfCAnbWVzc2FnZScgfCAndG9vbF9jYWxsJyB8ICdleHRlcm5hbCcgfCAnY29tcHV0ZWQnO1xuICAvKiogSUQgb2YgdGhlIHJlZmVyZW5jZWQgaXRlbSAqL1xuICByZWZlcmVuY2VJZDogc3RyaW5nO1xuICAvKiogSG93IHJlbGV2YW50IGlzIHRoaXMgZXZpZGVuY2UgKi9cbiAgcmVsZXZhbmNlOiBzdHJpbmc7XG4gIC8qKiBDb25maWRlbmNlIGluIHRoaXMgZXZpZGVuY2UgKi9cbiAgY29uZmlkZW5jZTogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBTkFMWVNJUyBSRVNVTFQgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuYWx5c2lzUmVzdWx0IHtcbiAgaWQ6IHN0cmluZztcbiAgcnVuSWQ6IHN0cmluZztcbiAgYW5hbHlzaXNWZXJzaW9uOiBzdHJpbmc7XG4gIG1vZGVsVXNlZDogc3RyaW5nO1xuICAvKiogT3ZlcmFsbCBvdXRjb21lIHZlcmRpY3QgKi9cbiAgb3V0Y29tZVZlcmRpY3Q6ICdzdWNjZXNzJyB8ICdwYXJ0aWFsX3N1Y2Nlc3MnIHwgJ2ZhaWx1cmUnO1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGUgdmVyZGljdCAoMC0xKSAqL1xuICBvdXRjb21lQ29uZmlkZW5jZTogbnVtYmVyO1xuICAvKiogUm9vdCBjYXVzZSBjYXRlZ29yeSBpZiBmYWlsdXJlICovXG4gIHJvb3RDYXVzZUNhdGVnb3J5Pzogc3RyaW5nO1xuICAvKiogQ29uZmlkZW5jZSBpbiByb290IGNhdXNlICgwLTEpICovXG4gIHJvb3RDYXVzZUNvbmZpZGVuY2U/OiBudW1iZXI7XG4gIC8qKiBJcyB0aGlzIHRoZSBjdXJyZW50IGFuYWx5c2lzICovXG4gIGlzQ3VycmVudDogYm9vbGVhbjtcbiAgLyoqIElEIG9mIGFuYWx5c2lzIHRoYXQgc3VwZXJzZWRlZCB0aGlzIG9uZSAqL1xuICBzdXBlcnNlZGVkQnk/OiBzdHJpbmc7XG4gIC8qKiBDbGFpbXMgZnJvbSB0aGlzIGFuYWx5c2lzICovXG4gIGNsYWltczogQ2xhaW1bXTtcbiAgYW5hbHl6ZWRBdD86IHN0cmluZztcbiAgY3JlYXRlZEF0Pzogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDQUxJQlJBVElPTiBUWVBFUyAodjMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsaWJyYXRpb25TdGF0dXMge1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIHByZWRpY3Rpb25UeXBlOiBQcmVkaWN0aW9uVHlwZTtcbiAgLyoqIEJyaWVyIHNjb3JlIChsb3dlciBpcyBiZXR0ZXIsIDwwLjEgaXMgZ29vZCkgKi9cbiAgYnJpZXJTY29yZTogbnVtYmVyO1xuICAvKiogRXhwZWN0ZWQgQ2FsaWJyYXRpb24gRXJyb3IgKi9cbiAgZWNlOiBudW1iZXI7XG4gIC8qKiBTYW1wbGUgY291bnQgKi9cbiAgc2FtcGxlQ291bnQ6IG51bWJlcjtcbiAgLyoqIElzIHRoZSBtb2RlbCB3ZWxsLWNhbGlicmF0ZWQgKi9cbiAgaXNDYWxpYnJhdGVkOiBib29sZWFuO1xuICAvKiogQ2FsaWJyYXRpb24gYnkgY29uZmlkZW5jZSBidWNrZXQgKi9cbiAgYnVja2V0czogQ2FsaWJyYXRpb25CdWNrZXRbXTtcbiAgbGFzdFVwZGF0ZWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFByZWRpY3Rpb25UeXBlID1cbiAgfCAnb3V0Y29tZSdcbiAgfCAnY2h1cm5fcmlzaydcbiAgfCAnZXNjYWxhdGlvbl9yaXNrJ1xuICB8ICdyZXNvbHV0aW9uX3RpbWUnXG4gIHwgJ2N1c3RvbWVyX3NhdGlzZmFjdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsaWJyYXRpb25CdWNrZXQge1xuICBidWNrZXRTdGFydDogbnVtYmVyO1xuICBidWNrZXRFbmQ6IG51bWJlcjtcbiAgcHJlZGljdGVkUHJvYmFiaWxpdHk6IG51bWJlcjtcbiAgYWN0dWFsRnJlcXVlbmN5OiBudW1iZXI7XG4gIHNhbXBsZUNvdW50OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJPSSBUWVBFUyAodjMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9pQ29uZmlnIHtcbiAgLyoqIENvc3QgcGVyIHN1cHBvcnQgdGlja2V0IGRlZmxlY3RlZCAqL1xuICB0aWNrZXREZWZsZWN0aW9uVmFsdWU6IG51bWJlcjtcbiAgLyoqIENvc3QgcGVyIGVzY2FsYXRpb24gKi9cbiAgZXNjYWxhdGlvbkNvc3Q6IG51bWJlcjtcbiAgLyoqIENvc3QgcGVyIGhvdXIgb2YgYWdlbnQgdGltZSAqL1xuICBhZ2VudEhvdXJseUNvc3Q6IG51bWJlcjtcbiAgLyoqIEF2ZXJhZ2UgcmVzb2x1dGlvbiB0aW1lIChtaW51dGVzKSAqL1xuICBhdmdSZXNvbHV0aW9uTWludXRlczogbnVtYmVyO1xuICAvKiogQ1NBVCBpbXBhY3QgbXVsdGlwbGllciAqL1xuICBjc2F0SW1wYWN0TXVsdGlwbGllcjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvaVN1bW1hcnkge1xuICBwZXJpb2Q6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH07XG4gIC8qKiBUb3RhbCBlc3RpbWF0ZWQgc2F2aW5ncyAqL1xuICB0b3RhbFNhdmluZ3M6IG51bWJlcjtcbiAgLyoqIEJyZWFrZG93biBieSBjYXRlZ29yeSAqL1xuICBicmVha2Rvd246IHtcbiAgICB0aWNrZXREZWZsZWN0aW9uOiBudW1iZXI7XG4gICAgZXNjYWxhdGlvblByZXZlbnRpb246IG51bWJlcjtcbiAgICB0aW1lVG9SZXNvbHV0aW9uOiBudW1iZXI7XG4gICAgY2h1cm5QcmV2ZW50aW9uOiBudW1iZXI7XG4gIH07XG4gIC8qKiBDb25maWRlbmNlIGluIHRoZXNlIGVzdGltYXRlcyAqL1xuICBjb25maWRlbmNlOiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnO1xuICAvKiogTWV0aG9kb2xvZ3kgdXNlZCAqL1xuICBtZXRob2RvbG9neTogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFWFBMQUlOQUJJTElUWSBSRVNVTFQgKHYyIGNvbXBhdGliaWxpdHkpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFuYWx5c2lzUmVzdWx0IGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluYWJpbGl0eVJlc3VsdCB7XG4gIHRyYWNlSWQ6IHN0cmluZztcbiAgZXhwbGFpbmFiaWxpdHlJZDogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIG91dGNvbWU6IHtcbiAgICB2ZXJkaWN0OiAnc3VjY2VzcycgfCAncGFydGlhbF9zdWNjZXNzJyB8ICdmYWlsdXJlJztcbiAgICBjb25maWRlbmNlOiBudW1iZXI7XG4gICAgcmVhc29uaW5nOiBzdHJpbmc7XG4gIH07XG4gIGJ1c2luZXNzSW1wYWN0OiB7XG4gICAgaW1wYWN0U2NvcmU6IG51bWJlcjtcbiAgICBjdXN0b21lclNhdGlzZmFjdGlvbjogbnVtYmVyO1xuICAgIHJldmVudWVSaXNrOiBzdHJpbmc7XG4gIH07XG4gIHJlY29tbWVuZGF0aW9uczogQXJyYXk8e1xuICAgIHByaW9yaXR5OiBzdHJpbmc7XG4gICAgY2F0ZWdvcnk6IHN0cmluZztcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICBleHBlY3RlZEltcGFjdDogc3RyaW5nO1xuICB9PjtcbiAgcmFnRXZhbHVhdGlvbj86IHtcbiAgICBncm91bmRlZG5lc3M6IG51bWJlcjtcbiAgICBmYWl0aGZ1bG5lc3M6IG51bWJlcjtcbiAgICBhbnN3ZXJSZWxldmFuY2U6IG51bWJlcjtcbiAgfTtcbiAgaGFsbHVjaW5hdGlvblJlcG9ydD86IHtcbiAgICBkZXRlY3RlZDogYm9vbGVhbjtcbiAgICB0eXBlczogc3RyaW5nW107XG4gICAgc2V2ZXJpdHk6IHN0cmluZztcbiAgfTtcbiAgcHJvY2Vzc2luZ1RpbWVNczogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBUEkgUkVTUE9OU0UgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlSZXNwb25zZTxUPiB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE/OiBUO1xuICBlcnJvcj86IHtcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGRldGFpbHM/OiB1bmtub3duO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlZFJlc3BvbnNlPFQ+IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZGF0YToge1xuICAgIGl0ZW1zOiBUW107XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICBvZmZzZXQ6IG51bWJlcjtcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1blJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgY29tcGFueUlkOiBzdHJpbmc7XG4gIGFnZW50SWQ6IHN0cmluZztcbiAgdGlja2V0SWQ/OiBzdHJpbmc7XG4gIGN1c3RvbWVyQWNjb3VudElkPzogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICBlbmRlZEF0Pzogc3RyaW5nO1xuICBkdXJhdGlvbk1zPzogbnVtYmVyO1xuICBvdXRjb21lPzogUnVuT3V0Y29tZTtcbiAgb3V0Y29tZVJlYXNvbj86IHN0cmluZztcbiAgY29udmVyc2F0aW9uTWVzc2FnZXM6IENvbnZlcnNhdGlvbk1lc3NhZ2VbXTtcbiAgbW9kZWxJZD86IHN0cmluZztcbiAgcHJvbXB0VmVyc2lvbj86IHN0cmluZztcbiAgY3VzdG9tZXJDb250ZXh0U25hcHNob3Q/OiBDdXN0b21lckNvbnRleHRTbmFwc2hvdDtcbiAgemVuZGVza01hcmtlcj86IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xufVxuIl19