@trentapps/manager-protocol 1.1.1
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.
- package/LICENSE +21 -0
- package/README.md +446 -0
- package/dist/analyzers/ArchitectureDetector.d.ts +44 -0
- package/dist/analyzers/ArchitectureDetector.d.ts.map +1 -0
- package/dist/analyzers/ArchitectureDetector.js +218 -0
- package/dist/analyzers/ArchitectureDetector.js.map +1 -0
- package/dist/analyzers/CSSAnalyzer.d.ts +104 -0
- package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/CSSAnalyzer.js +578 -0
- package/dist/analyzers/CSSAnalyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +5 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +5 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -0
- package/dist/cli.js.map +1 -0
- package/dist/design-system/index.d.ts +6 -0
- package/dist/design-system/index.d.ts.map +1 -0
- package/dist/design-system/index.js +6 -0
- package/dist/design-system/index.js.map +1 -0
- package/dist/design-system/tokens.d.ts +106 -0
- package/dist/design-system/tokens.d.ts.map +1 -0
- package/dist/design-system/tokens.js +554 -0
- package/dist/design-system/tokens.js.map +1 -0
- package/dist/engine/AppMonitor.d.ts +162 -0
- package/dist/engine/AppMonitor.d.ts.map +1 -0
- package/dist/engine/AppMonitor.js +754 -0
- package/dist/engine/AppMonitor.js.map +1 -0
- package/dist/engine/AuditLogger.d.ts +138 -0
- package/dist/engine/AuditLogger.d.ts.map +1 -0
- package/dist/engine/AuditLogger.js +448 -0
- package/dist/engine/AuditLogger.js.map +1 -0
- package/dist/engine/GitHubApprovalManager.d.ts +106 -0
- package/dist/engine/GitHubApprovalManager.d.ts.map +1 -0
- package/dist/engine/GitHubApprovalManager.js +315 -0
- package/dist/engine/GitHubApprovalManager.js.map +1 -0
- package/dist/engine/RateLimiter.d.ts +79 -0
- package/dist/engine/RateLimiter.d.ts.map +1 -0
- package/dist/engine/RateLimiter.js +232 -0
- package/dist/engine/RateLimiter.js.map +1 -0
- package/dist/engine/RulesEngine.d.ts +77 -0
- package/dist/engine/RulesEngine.d.ts.map +1 -0
- package/dist/engine/RulesEngine.js +400 -0
- package/dist/engine/RulesEngine.js.map +1 -0
- package/dist/engine/TaskManager.d.ts +173 -0
- package/dist/engine/TaskManager.d.ts.map +1 -0
- package/dist/engine/TaskManager.js +678 -0
- package/dist/engine/TaskManager.js.map +1 -0
- package/dist/engine/index.d.ts +9 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +9 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/architecture.d.ts +9 -0
- package/dist/rules/architecture.d.ts.map +1 -0
- package/dist/rules/architecture.js +322 -0
- package/dist/rules/architecture.js.map +1 -0
- package/dist/rules/azure.d.ts +7 -0
- package/dist/rules/azure.d.ts.map +1 -0
- package/dist/rules/azure.js +138 -0
- package/dist/rules/azure.js.map +1 -0
- package/dist/rules/compliance.d.ts +9 -0
- package/dist/rules/compliance.d.ts.map +1 -0
- package/dist/rules/compliance.js +304 -0
- package/dist/rules/compliance.js.map +1 -0
- package/dist/rules/css.d.ts +10 -0
- package/dist/rules/css.d.ts.map +1 -0
- package/dist/rules/css.js +1239 -0
- package/dist/rules/css.js.map +1 -0
- package/dist/rules/flask.d.ts +7 -0
- package/dist/rules/flask.d.ts.map +1 -0
- package/dist/rules/flask.js +155 -0
- package/dist/rules/flask.js.map +1 -0
- package/dist/rules/index.d.ts +607 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +401 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/ml-ai.d.ts +7 -0
- package/dist/rules/ml-ai.d.ts.map +1 -0
- package/dist/rules/ml-ai.js +150 -0
- package/dist/rules/ml-ai.js.map +1 -0
- package/dist/rules/operational.d.ts +9 -0
- package/dist/rules/operational.d.ts.map +1 -0
- package/dist/rules/operational.js +318 -0
- package/dist/rules/operational.js.map +1 -0
- package/dist/rules/security.d.ts +9 -0
- package/dist/rules/security.d.ts.map +1 -0
- package/dist/rules/security.js +287 -0
- package/dist/rules/security.js.map +1 -0
- package/dist/rules/storage.d.ts +7 -0
- package/dist/rules/storage.d.ts.map +1 -0
- package/dist/rules/storage.js +134 -0
- package/dist/rules/storage.js.map +1 -0
- package/dist/rules/stripe.d.ts +7 -0
- package/dist/rules/stripe.d.ts.map +1 -0
- package/dist/rules/stripe.js +140 -0
- package/dist/rules/stripe.js.map +1 -0
- package/dist/rules/testing.d.ts +7 -0
- package/dist/rules/testing.d.ts.map +1 -0
- package/dist/rules/testing.js +135 -0
- package/dist/rules/testing.js.map +1 -0
- package/dist/rules/ux.d.ts +9 -0
- package/dist/rules/ux.d.ts.map +1 -0
- package/dist/rules/ux.js +280 -0
- package/dist/rules/ux.js.map +1 -0
- package/dist/rules/websocket.d.ts +7 -0
- package/dist/rules/websocket.d.ts.map +1 -0
- package/dist/rules/websocket.js +136 -0
- package/dist/rules/websocket.js.map +1 -0
- package/dist/server.d.ts +49 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2330 -0
- package/dist/server.js.map +1 -0
- package/dist/supervisor/AgentSupervisor.d.ts +235 -0
- package/dist/supervisor/AgentSupervisor.d.ts.map +1 -0
- package/dist/supervisor/AgentSupervisor.js +596 -0
- package/dist/supervisor/AgentSupervisor.js.map +1 -0
- package/dist/supervisor/ManagedServerRegistry.d.ts +48 -0
- package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -0
- package/dist/supervisor/ManagedServerRegistry.js +145 -0
- package/dist/supervisor/ManagedServerRegistry.js.map +1 -0
- package/dist/supervisor/ProjectTracker.d.ts +188 -0
- package/dist/supervisor/ProjectTracker.d.ts.map +1 -0
- package/dist/supervisor/ProjectTracker.js +617 -0
- package/dist/supervisor/ProjectTracker.js.map +1 -0
- package/dist/supervisor/index.d.ts +6 -0
- package/dist/supervisor/index.d.ts.map +1 -0
- package/dist/supervisor/index.js +6 -0
- package/dist/supervisor/index.js.map +1 -0
- package/dist/types/index.d.ts +1176 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +391 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/errors.d.ts +86 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +171 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/shell.d.ts +22 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +29 -0
- package/dist/utils/shell.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Agent Supervisor - Rate Limiter
|
|
3
|
+
*
|
|
4
|
+
* Token bucket rate limiting with multiple scopes and configurations.
|
|
5
|
+
*/
|
|
6
|
+
export class RateLimiter {
|
|
7
|
+
configs = new Map();
|
|
8
|
+
buckets = new Map();
|
|
9
|
+
lastCleanup = Date.now();
|
|
10
|
+
cleanupIntervalMs = 5 * 60 * 1000; // Cleanup every 5 minutes
|
|
11
|
+
/**
|
|
12
|
+
* Register a rate limit configuration
|
|
13
|
+
*/
|
|
14
|
+
registerLimit(config) {
|
|
15
|
+
this.configs.set(config.id, config);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Register multiple rate limit configurations
|
|
19
|
+
*/
|
|
20
|
+
registerLimits(configs) {
|
|
21
|
+
for (const config of configs) {
|
|
22
|
+
this.registerLimit(config);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Remove a rate limit configuration
|
|
27
|
+
*/
|
|
28
|
+
removeLimit(configId) {
|
|
29
|
+
return this.configs.delete(configId);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if an action should be rate limited
|
|
33
|
+
*/
|
|
34
|
+
checkLimit(params) {
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
// Periodically clean up expired buckets to prevent memory leaks
|
|
37
|
+
this.cleanupExpiredBuckets(now);
|
|
38
|
+
for (const [configId, config] of this.configs) {
|
|
39
|
+
if (!config.enabled)
|
|
40
|
+
continue;
|
|
41
|
+
// Check if action category matches (if specified)
|
|
42
|
+
if (config.actionCategories && params.actionCategory) {
|
|
43
|
+
if (!config.actionCategories.includes(params.actionCategory)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Build bucket key based on scope
|
|
48
|
+
const bucketKey = this.buildBucketKey(configId, config.scope, params);
|
|
49
|
+
const bucket = this.getOrCreateBucket(bucketKey, now, config.windowMs);
|
|
50
|
+
// Check if within window
|
|
51
|
+
if (now - bucket.windowStart >= config.windowMs) {
|
|
52
|
+
// Reset window
|
|
53
|
+
bucket.count = 0;
|
|
54
|
+
bucket.windowStart = now;
|
|
55
|
+
bucket.burstCount = 0;
|
|
56
|
+
}
|
|
57
|
+
// Check limits
|
|
58
|
+
if (bucket.count >= config.maxRequests) {
|
|
59
|
+
const resetAt = new Date(bucket.windowStart + config.windowMs);
|
|
60
|
+
return {
|
|
61
|
+
allowed: false,
|
|
62
|
+
limitId: configId,
|
|
63
|
+
state: {
|
|
64
|
+
key: bucketKey,
|
|
65
|
+
count: bucket.count,
|
|
66
|
+
windowStart: bucket.windowStart,
|
|
67
|
+
remaining: 0,
|
|
68
|
+
resetAt: resetAt.toISOString()
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// Check burst limit if configured
|
|
73
|
+
if (config.burstLimit && bucket.burstCount >= config.burstLimit) {
|
|
74
|
+
const resetAt = new Date(bucket.windowStart + config.windowMs);
|
|
75
|
+
return {
|
|
76
|
+
allowed: false,
|
|
77
|
+
limitId: configId,
|
|
78
|
+
state: {
|
|
79
|
+
key: bucketKey,
|
|
80
|
+
count: bucket.count,
|
|
81
|
+
windowStart: bucket.windowStart,
|
|
82
|
+
remaining: 0,
|
|
83
|
+
resetAt: resetAt.toISOString()
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return { allowed: true };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Record a request (consume from bucket)
|
|
92
|
+
*/
|
|
93
|
+
recordRequest(params) {
|
|
94
|
+
const now = Date.now();
|
|
95
|
+
for (const [configId, config] of this.configs) {
|
|
96
|
+
if (!config.enabled)
|
|
97
|
+
continue;
|
|
98
|
+
if (config.actionCategories && params.actionCategory) {
|
|
99
|
+
if (!config.actionCategories.includes(params.actionCategory)) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const bucketKey = this.buildBucketKey(configId, config.scope, params);
|
|
104
|
+
const bucket = this.getOrCreateBucket(bucketKey, now, config.windowMs);
|
|
105
|
+
// Reset if window expired
|
|
106
|
+
if (now - bucket.windowStart >= config.windowMs) {
|
|
107
|
+
bucket.count = 0;
|
|
108
|
+
bucket.windowStart = now;
|
|
109
|
+
bucket.burstCount = 0;
|
|
110
|
+
}
|
|
111
|
+
bucket.count++;
|
|
112
|
+
bucket.burstCount++;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get current state for a specific limit
|
|
117
|
+
*/
|
|
118
|
+
getState(configId, params) {
|
|
119
|
+
const config = this.configs.get(configId);
|
|
120
|
+
if (!config)
|
|
121
|
+
return null;
|
|
122
|
+
const now = Date.now();
|
|
123
|
+
const bucketKey = this.buildBucketKey(configId, config.scope, params);
|
|
124
|
+
const bucket = this.buckets.get(bucketKey);
|
|
125
|
+
if (!bucket) {
|
|
126
|
+
return {
|
|
127
|
+
key: bucketKey,
|
|
128
|
+
count: 0,
|
|
129
|
+
windowStart: now,
|
|
130
|
+
remaining: config.maxRequests,
|
|
131
|
+
resetAt: new Date(now + config.windowMs).toISOString()
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// Check if window has expired
|
|
135
|
+
if (now - bucket.windowStart >= config.windowMs) {
|
|
136
|
+
return {
|
|
137
|
+
key: bucketKey,
|
|
138
|
+
count: 0,
|
|
139
|
+
windowStart: now,
|
|
140
|
+
remaining: config.maxRequests,
|
|
141
|
+
resetAt: new Date(now + config.windowMs).toISOString()
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
key: bucketKey,
|
|
146
|
+
count: bucket.count,
|
|
147
|
+
windowStart: bucket.windowStart,
|
|
148
|
+
remaining: Math.max(0, config.maxRequests - bucket.count),
|
|
149
|
+
resetAt: new Date(bucket.windowStart + config.windowMs).toISOString()
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get all registered configurations
|
|
154
|
+
*/
|
|
155
|
+
getConfigs() {
|
|
156
|
+
return Array.from(this.configs.values());
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Clear all buckets (useful for testing)
|
|
160
|
+
*/
|
|
161
|
+
clearBuckets() {
|
|
162
|
+
this.buckets.clear();
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Build a bucket key based on scope
|
|
166
|
+
*/
|
|
167
|
+
buildBucketKey(configId, scope, params) {
|
|
168
|
+
switch (scope) {
|
|
169
|
+
case 'global':
|
|
170
|
+
return `${configId}:global`;
|
|
171
|
+
case 'agent':
|
|
172
|
+
return `${configId}:agent:${params.agentId || 'unknown'}`;
|
|
173
|
+
case 'session':
|
|
174
|
+
return `${configId}:session:${params.sessionId || 'unknown'}`;
|
|
175
|
+
case 'user':
|
|
176
|
+
return `${configId}:user:${params.userId || 'unknown'}`;
|
|
177
|
+
case 'action_type':
|
|
178
|
+
return `${configId}:action:${params.actionType || 'unknown'}`;
|
|
179
|
+
default:
|
|
180
|
+
return `${configId}:unknown`;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get or create a bucket
|
|
185
|
+
*/
|
|
186
|
+
getOrCreateBucket(key, now, _windowMs) {
|
|
187
|
+
let bucket = this.buckets.get(key);
|
|
188
|
+
if (!bucket) {
|
|
189
|
+
bucket = {
|
|
190
|
+
count: 0,
|
|
191
|
+
windowStart: now,
|
|
192
|
+
burstCount: 0
|
|
193
|
+
};
|
|
194
|
+
this.buckets.set(key, bucket);
|
|
195
|
+
}
|
|
196
|
+
return bucket;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Clean up expired buckets to prevent memory leaks
|
|
200
|
+
* Removes buckets that are older than their window duration
|
|
201
|
+
*/
|
|
202
|
+
cleanupExpiredBuckets(now) {
|
|
203
|
+
// Only cleanup every cleanupIntervalMs to avoid excessive work
|
|
204
|
+
if (now - this.lastCleanup < this.cleanupIntervalMs) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
this.lastCleanup = now;
|
|
208
|
+
// Find the maximum window duration across all configs
|
|
209
|
+
let maxWindowMs = 60000; // Default 1 minute
|
|
210
|
+
for (const config of this.configs.values()) {
|
|
211
|
+
if (config.windowMs > maxWindowMs) {
|
|
212
|
+
maxWindowMs = config.windowMs;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Remove buckets that are older than the maximum window
|
|
216
|
+
// (bucket is expired if now - windowStart > maxWindowMs)
|
|
217
|
+
const expireThreshold = now - maxWindowMs * 2; // 2x window for safety margin
|
|
218
|
+
let removedCount = 0;
|
|
219
|
+
for (const [key, bucket] of this.buckets.entries()) {
|
|
220
|
+
if (bucket.windowStart < expireThreshold) {
|
|
221
|
+
this.buckets.delete(key);
|
|
222
|
+
removedCount++;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (removedCount > 0) {
|
|
226
|
+
console.log(`[RateLimiter] Cleaned up ${removedCount} expired buckets`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Export singleton instance
|
|
231
|
+
export const rateLimiter = new RateLimiter();
|
|
232
|
+
//# sourceMappingURL=RateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../src/engine/RateLimiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Agent Supervisor - Rules Engine Core
|
|
3
|
+
*
|
|
4
|
+
* The heart of the governance system that evaluates actions against business rules.
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentAction, BusinessRule, BusinessContext, RuleCondition, EvaluationResult, BusinessRulesResult } from '../types/index.js';
|
|
7
|
+
export declare class RulesEngine {
|
|
8
|
+
private rules;
|
|
9
|
+
private customEvaluators;
|
|
10
|
+
constructor();
|
|
11
|
+
/**
|
|
12
|
+
* Register a business rule
|
|
13
|
+
*/
|
|
14
|
+
registerRule(rule: BusinessRule): void;
|
|
15
|
+
/**
|
|
16
|
+
* Register multiple business rules
|
|
17
|
+
*/
|
|
18
|
+
registerRules(rules: BusinessRule[]): void;
|
|
19
|
+
/**
|
|
20
|
+
* Unregister a rule by ID
|
|
21
|
+
*/
|
|
22
|
+
unregisterRule(ruleId: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Get all registered rules
|
|
25
|
+
*/
|
|
26
|
+
getRules(): BusinessRule[];
|
|
27
|
+
/**
|
|
28
|
+
* Get enabled rules sorted by priority (higher priority first)
|
|
29
|
+
*/
|
|
30
|
+
getActiveRules(): BusinessRule[];
|
|
31
|
+
/**
|
|
32
|
+
* Register a custom condition evaluator
|
|
33
|
+
*/
|
|
34
|
+
registerCustomEvaluator(name: string, evaluator: (context: Record<string, unknown>, condition: RuleCondition) => boolean): void;
|
|
35
|
+
/**
|
|
36
|
+
* Evaluate an agent action against all active rules
|
|
37
|
+
*/
|
|
38
|
+
evaluateAction(action: AgentAction, context?: BusinessContext): EvaluationResult;
|
|
39
|
+
/**
|
|
40
|
+
* Apply business rules to a context and return recommendations
|
|
41
|
+
*/
|
|
42
|
+
applyBusinessRules(context: BusinessContext): BusinessRulesResult;
|
|
43
|
+
/**
|
|
44
|
+
* Build evaluation context from action and business context
|
|
45
|
+
*/
|
|
46
|
+
private buildEvaluationContext;
|
|
47
|
+
/**
|
|
48
|
+
* Evaluate if all/any conditions of a rule match
|
|
49
|
+
*/
|
|
50
|
+
private evaluateRuleConditions;
|
|
51
|
+
/**
|
|
52
|
+
* Evaluate a single condition
|
|
53
|
+
*/
|
|
54
|
+
private evaluateCondition;
|
|
55
|
+
/**
|
|
56
|
+
* Get nested value from object using dot notation
|
|
57
|
+
*/
|
|
58
|
+
private getNestedValue;
|
|
59
|
+
/**
|
|
60
|
+
* Calculate risk level from score
|
|
61
|
+
*/
|
|
62
|
+
private calculateRiskLevel;
|
|
63
|
+
/**
|
|
64
|
+
* Get severity level from a rule
|
|
65
|
+
*/
|
|
66
|
+
private getRuleSeverity;
|
|
67
|
+
/**
|
|
68
|
+
* Generate recommendation based on rule and action
|
|
69
|
+
*/
|
|
70
|
+
private getRecommendation;
|
|
71
|
+
/**
|
|
72
|
+
* Register default custom evaluators
|
|
73
|
+
*/
|
|
74
|
+
private registerDefaultEvaluators;
|
|
75
|
+
}
|
|
76
|
+
export declare const rulesEngine: RulesEngine;
|
|
77
|
+
//# sourceMappingURL=RulesEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RulesEngine.d.ts","sourceRoot":"","sources":["../../src/engine/RulesEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,EACb,gBAAgB,EAIhB,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,gBAAgB,CAAmG;;IAM3H;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAItC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAM1C;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,QAAQ,IAAI,YAAY,EAAE;IAI1B;;OAEG;IACH,cAAc,IAAI,YAAY,EAAE;IAMhC;;OAEG;IACH,uBAAuB,CACrB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,aAAa,KAAK,OAAO,GACjF,IAAI;IAIP;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,gBAAgB;IAuGhF;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,mBAAmB;IA4DjE;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkFzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAwBlC;AAGD,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|