couchloop-eq-mcp 1.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.
Files changed (222) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +358 -0
  3. package/assets/logo/README.md +12 -0
  4. package/assets/logo/couchloop_EQ-IconLogo.png +0 -0
  5. package/dist/auth/middleware.d.ts +8 -0
  6. package/dist/auth/middleware.d.ts.map +1 -0
  7. package/dist/auth/middleware.js +59 -0
  8. package/dist/auth/middleware.js.map +1 -0
  9. package/dist/clients/shrinkChatClient.d.ts +195 -0
  10. package/dist/clients/shrinkChatClient.d.ts.map +1 -0
  11. package/dist/clients/shrinkChatClient.js +349 -0
  12. package/dist/clients/shrinkChatClient.js.map +1 -0
  13. package/dist/db/client.d.ts +23 -0
  14. package/dist/db/client.d.ts.map +1 -0
  15. package/dist/db/client.js +78 -0
  16. package/dist/db/client.js.map +1 -0
  17. package/dist/db/migrate.d.ts +4 -0
  18. package/dist/db/migrate.d.ts.map +1 -0
  19. package/dist/db/migrate.js +34 -0
  20. package/dist/db/migrate.js.map +1 -0
  21. package/dist/db/migrations/schema.d.ts +1074 -0
  22. package/dist/db/migrations/schema.d.ts.map +1 -0
  23. package/dist/db/migrations/schema.js +160 -0
  24. package/dist/db/migrations/schema.js.map +1 -0
  25. package/dist/db/schema.d.ts +1213 -0
  26. package/dist/db/schema.d.ts.map +1 -0
  27. package/dist/db/schema.js +157 -0
  28. package/dist/db/schema.js.map +1 -0
  29. package/dist/db/seed.d.ts +4 -0
  30. package/dist/db/seed.d.ts.map +1 -0
  31. package/dist/db/seed.js +57 -0
  32. package/dist/db/seed.js.map +1 -0
  33. package/dist/db/seedOAuth.d.ts +4 -0
  34. package/dist/db/seedOAuth.d.ts.map +1 -0
  35. package/dist/db/seedOAuth.js +76 -0
  36. package/dist/db/seedOAuth.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +93 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/resources/index.d.ts +11 -0
  42. package/dist/resources/index.d.ts.map +1 -0
  43. package/dist/resources/index.js +56 -0
  44. package/dist/resources/index.js.map +1 -0
  45. package/dist/resources/journey-status.d.ts +2 -0
  46. package/dist/resources/journey-status.d.ts.map +1 -0
  47. package/dist/resources/journey-status.js +42 -0
  48. package/dist/resources/journey-status.js.map +1 -0
  49. package/dist/resources/session-summary.d.ts +2 -0
  50. package/dist/resources/session-summary.d.ts.map +1 -0
  51. package/dist/resources/session-summary.js +85 -0
  52. package/dist/resources/session-summary.js.map +1 -0
  53. package/dist/resources/user-context.d.ts +2 -0
  54. package/dist/resources/user-context.d.ts.map +1 -0
  55. package/dist/resources/user-context.js +79 -0
  56. package/dist/resources/user-context.js.map +1 -0
  57. package/dist/server/index.d.ts +3 -0
  58. package/dist/server/index.d.ts.map +1 -0
  59. package/dist/server/index.js +385 -0
  60. package/dist/server/index.js.map +1 -0
  61. package/dist/server/middleware/auth.d.ts +30 -0
  62. package/dist/server/middleware/auth.d.ts.map +1 -0
  63. package/dist/server/middleware/auth.js +157 -0
  64. package/dist/server/middleware/auth.js.map +1 -0
  65. package/dist/server/oauth/anomalyDetection.d.ts +146 -0
  66. package/dist/server/oauth/anomalyDetection.d.ts.map +1 -0
  67. package/dist/server/oauth/anomalyDetection.js +405 -0
  68. package/dist/server/oauth/anomalyDetection.js.map +1 -0
  69. package/dist/server/oauth/authServer.d.ts +61 -0
  70. package/dist/server/oauth/authServer.d.ts.map +1 -0
  71. package/dist/server/oauth/authServer.js +283 -0
  72. package/dist/server/oauth/authServer.js.map +1 -0
  73. package/dist/server/oauth/dpop.d.ts +135 -0
  74. package/dist/server/oauth/dpop.d.ts.map +1 -0
  75. package/dist/server/oauth/dpop.js +338 -0
  76. package/dist/server/oauth/dpop.js.map +1 -0
  77. package/dist/server/oauth/gdpr/consent.d.ts +173 -0
  78. package/dist/server/oauth/gdpr/consent.d.ts.map +1 -0
  79. package/dist/server/oauth/gdpr/consent.js +388 -0
  80. package/dist/server/oauth/gdpr/consent.js.map +1 -0
  81. package/dist/server/oauth/gdpr/dataPortability.d.ts +214 -0
  82. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +1 -0
  83. package/dist/server/oauth/gdpr/dataPortability.js +486 -0
  84. package/dist/server/oauth/gdpr/dataPortability.js.map +1 -0
  85. package/dist/server/oauth/gdpr/index.d.ts +103 -0
  86. package/dist/server/oauth/gdpr/index.d.ts.map +1 -0
  87. package/dist/server/oauth/gdpr/index.js +273 -0
  88. package/dist/server/oauth/gdpr/index.js.map +1 -0
  89. package/dist/server/oauth/gdpr/rightToErasure.d.ts +184 -0
  90. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +1 -0
  91. package/dist/server/oauth/gdpr/rightToErasure.js +527 -0
  92. package/dist/server/oauth/gdpr/rightToErasure.js.map +1 -0
  93. package/dist/server/oauth/monitoring/securityMonitor.d.ts +218 -0
  94. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +1 -0
  95. package/dist/server/oauth/monitoring/securityMonitor.js +615 -0
  96. package/dist/server/oauth/monitoring/securityMonitor.js.map +1 -0
  97. package/dist/server/oauth/pkce.d.ts +61 -0
  98. package/dist/server/oauth/pkce.d.ts.map +1 -0
  99. package/dist/server/oauth/pkce.js +157 -0
  100. package/dist/server/oauth/pkce.js.map +1 -0
  101. package/dist/server/oauth/providers/base.d.ts +147 -0
  102. package/dist/server/oauth/providers/base.d.ts.map +1 -0
  103. package/dist/server/oauth/providers/base.js +312 -0
  104. package/dist/server/oauth/providers/base.js.map +1 -0
  105. package/dist/server/oauth/providers/github.d.ts +55 -0
  106. package/dist/server/oauth/providers/github.d.ts.map +1 -0
  107. package/dist/server/oauth/providers/github.js +225 -0
  108. package/dist/server/oauth/providers/github.js.map +1 -0
  109. package/dist/server/oauth/providers/google.d.ts +49 -0
  110. package/dist/server/oauth/providers/google.d.ts.map +1 -0
  111. package/dist/server/oauth/providers/google.js +153 -0
  112. package/dist/server/oauth/providers/google.js.map +1 -0
  113. package/dist/server/oauth/providers/index.d.ts +9 -0
  114. package/dist/server/oauth/providers/index.d.ts.map +1 -0
  115. package/dist/server/oauth/providers/index.js +24 -0
  116. package/dist/server/oauth/providers/index.js.map +1 -0
  117. package/dist/server/oauth/refreshTokenRotation.d.ts +114 -0
  118. package/dist/server/oauth/refreshTokenRotation.d.ts.map +1 -0
  119. package/dist/server/oauth/refreshTokenRotation.js +344 -0
  120. package/dist/server/oauth/refreshTokenRotation.js.map +1 -0
  121. package/dist/server/oauth/security.d.ts +101 -0
  122. package/dist/server/oauth/security.d.ts.map +1 -0
  123. package/dist/server/oauth/security.js +268 -0
  124. package/dist/server/oauth/security.js.map +1 -0
  125. package/dist/server/oauth/tokenEncryption.d.ts +80 -0
  126. package/dist/server/oauth/tokenEncryption.d.ts.map +1 -0
  127. package/dist/server/oauth/tokenEncryption.js +218 -0
  128. package/dist/server/oauth/tokenEncryption.js.map +1 -0
  129. package/dist/tools/checkpoint.d.ts +35 -0
  130. package/dist/tools/checkpoint.d.ts.map +1 -0
  131. package/dist/tools/checkpoint.js +125 -0
  132. package/dist/tools/checkpoint.js.map +1 -0
  133. package/dist/tools/index.d.ts +412 -0
  134. package/dist/tools/index.d.ts.map +1 -0
  135. package/dist/tools/index.js +262 -0
  136. package/dist/tools/index.js.map +1 -0
  137. package/dist/tools/insight.d.ts +65 -0
  138. package/dist/tools/insight.d.ts.map +1 -0
  139. package/dist/tools/insight.js +190 -0
  140. package/dist/tools/insight.js.map +1 -0
  141. package/dist/tools/journey.d.ts +45 -0
  142. package/dist/tools/journey.d.ts.map +1 -0
  143. package/dist/tools/journey.js +115 -0
  144. package/dist/tools/journey.js.map +1 -0
  145. package/dist/tools/sendMessage.d.ts +6 -0
  146. package/dist/tools/sendMessage.d.ts.map +1 -0
  147. package/dist/tools/sendMessage.js +278 -0
  148. package/dist/tools/sendMessage.js.map +1 -0
  149. package/dist/tools/session.d.ts +106 -0
  150. package/dist/tools/session.d.ts.map +1 -0
  151. package/dist/tools/session.js +161 -0
  152. package/dist/tools/session.js.map +1 -0
  153. package/dist/types/auth.d.ts +37 -0
  154. package/dist/types/auth.d.ts.map +1 -0
  155. package/dist/types/auth.js +44 -0
  156. package/dist/types/auth.js.map +1 -0
  157. package/dist/types/checkpoint.d.ts +25 -0
  158. package/dist/types/checkpoint.d.ts.map +1 -0
  159. package/dist/types/checkpoint.js +8 -0
  160. package/dist/types/checkpoint.js.map +1 -0
  161. package/dist/types/insight.d.ts +83 -0
  162. package/dist/types/insight.d.ts.map +1 -0
  163. package/dist/types/insight.js +14 -0
  164. package/dist/types/insight.js.map +1 -0
  165. package/dist/types/journey.d.ts +155 -0
  166. package/dist/types/journey.d.ts.map +1 -0
  167. package/dist/types/journey.js +29 -0
  168. package/dist/types/journey.js.map +1 -0
  169. package/dist/types/session.d.ts +82 -0
  170. package/dist/types/session.d.ts.map +1 -0
  171. package/dist/types/session.js +13 -0
  172. package/dist/types/session.js.map +1 -0
  173. package/dist/utils/circuitBreaker.d.ts +86 -0
  174. package/dist/utils/circuitBreaker.d.ts.map +1 -0
  175. package/dist/utils/circuitBreaker.js +234 -0
  176. package/dist/utils/circuitBreaker.js.map +1 -0
  177. package/dist/utils/errorHandler.d.ts +101 -0
  178. package/dist/utils/errorHandler.d.ts.map +1 -0
  179. package/dist/utils/errorHandler.js +348 -0
  180. package/dist/utils/errorHandler.js.map +1 -0
  181. package/dist/utils/errors.d.ts +36 -0
  182. package/dist/utils/errors.d.ts.map +1 -0
  183. package/dist/utils/errors.js +77 -0
  184. package/dist/utils/errors.js.map +1 -0
  185. package/dist/utils/logger.d.ts +13 -0
  186. package/dist/utils/logger.d.ts.map +1 -0
  187. package/dist/utils/logger.js +49 -0
  188. package/dist/utils/logger.js.map +1 -0
  189. package/dist/utils/performanceMonitor.d.ts +106 -0
  190. package/dist/utils/performanceMonitor.d.ts.map +1 -0
  191. package/dist/utils/performanceMonitor.js +312 -0
  192. package/dist/utils/performanceMonitor.js.map +1 -0
  193. package/dist/utils/responseCache.d.ts +88 -0
  194. package/dist/utils/responseCache.d.ts.map +1 -0
  195. package/dist/utils/responseCache.js +245 -0
  196. package/dist/utils/responseCache.js.map +1 -0
  197. package/dist/utils/retryStrategy.d.ts +49 -0
  198. package/dist/utils/retryStrategy.d.ts.map +1 -0
  199. package/dist/utils/retryStrategy.js +167 -0
  200. package/dist/utils/retryStrategy.js.map +1 -0
  201. package/dist/workflows/definitions/daily-reflection.d.ts +3 -0
  202. package/dist/workflows/definitions/daily-reflection.d.ts.map +1 -0
  203. package/dist/workflows/definitions/daily-reflection.js +52 -0
  204. package/dist/workflows/definitions/daily-reflection.js.map +1 -0
  205. package/dist/workflows/definitions/gratitude-practice.d.ts +3 -0
  206. package/dist/workflows/definitions/gratitude-practice.d.ts.map +1 -0
  207. package/dist/workflows/definitions/gratitude-practice.js +52 -0
  208. package/dist/workflows/definitions/gratitude-practice.js.map +1 -0
  209. package/dist/workflows/definitions/weekly-review.d.ts +3 -0
  210. package/dist/workflows/definitions/weekly-review.d.ts.map +1 -0
  211. package/dist/workflows/definitions/weekly-review.js +74 -0
  212. package/dist/workflows/definitions/weekly-review.js.map +1 -0
  213. package/dist/workflows/engine.d.ts +21 -0
  214. package/dist/workflows/engine.d.ts.map +1 -0
  215. package/dist/workflows/engine.js +149 -0
  216. package/dist/workflows/engine.js.map +1 -0
  217. package/dist/workflows/index.d.ts +26 -0
  218. package/dist/workflows/index.d.ts.map +1 -0
  219. package/dist/workflows/index.js +14 -0
  220. package/dist/workflows/index.js.map +1 -0
  221. package/package.json +98 -0
  222. package/run-mcp-server.sh +16 -0
@@ -0,0 +1,157 @@
1
+ import { oauthServer } from '../oauth/authServer.js';
2
+ import { logger } from '../../utils/logger.js';
3
+ /**
4
+ * Middleware to validate OAuth access token
5
+ */
6
+ export async function validateToken(req, res, next) {
7
+ try {
8
+ const authHeader = req.headers.authorization;
9
+ if (!authHeader) {
10
+ res.status(401).json({
11
+ error: 'unauthorized',
12
+ message: 'Missing authorization header',
13
+ });
14
+ return;
15
+ }
16
+ if (!authHeader.startsWith('Bearer ')) {
17
+ res.status(401).json({
18
+ error: 'unauthorized',
19
+ message: 'Invalid authorization format. Use Bearer token',
20
+ });
21
+ return;
22
+ }
23
+ const token = authHeader.substring(7);
24
+ // Validate token
25
+ const tokenPayload = await oauthServer.validateAccessToken(token);
26
+ if (!tokenPayload) {
27
+ res.status(401).json({
28
+ error: 'unauthorized',
29
+ message: 'Invalid or expired access token',
30
+ });
31
+ return;
32
+ }
33
+ // Attach user context to request
34
+ req.user = {
35
+ userId: tokenPayload.sub,
36
+ clientId: tokenPayload.client_id,
37
+ scope: tokenPayload.scope,
38
+ };
39
+ logger.debug(`Authenticated user ${tokenPayload.sub} from client ${tokenPayload.client_id}`);
40
+ next();
41
+ }
42
+ catch (error) {
43
+ logger.error('Token validation error:', error);
44
+ res.status(500).json({
45
+ error: 'internal_error',
46
+ message: 'Failed to validate token',
47
+ });
48
+ }
49
+ }
50
+ /**
51
+ * Middleware to check required scopes
52
+ */
53
+ export function requireScope(...requiredScopes) {
54
+ return (req, res, next) => {
55
+ if (!req.user) {
56
+ res.status(401).json({
57
+ error: 'unauthorized',
58
+ message: 'Authentication required',
59
+ });
60
+ return;
61
+ }
62
+ const userScopes = req.user.scope.split(' ');
63
+ const hasRequiredScope = requiredScopes.some(scope => userScopes.includes(scope));
64
+ if (!hasRequiredScope) {
65
+ res.status(403).json({
66
+ error: 'forbidden',
67
+ message: `Insufficient scope. Required: ${requiredScopes.join(' or ')}`,
68
+ });
69
+ return;
70
+ }
71
+ next();
72
+ };
73
+ }
74
+ /**
75
+ * Optional authentication - sets user if token present but doesn't require it
76
+ */
77
+ export async function optionalAuth(req, _res, next) {
78
+ try {
79
+ const authHeader = req.headers.authorization;
80
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
81
+ // No token, continue without user context
82
+ next();
83
+ return;
84
+ }
85
+ const token = authHeader.substring(7);
86
+ const tokenPayload = await oauthServer.validateAccessToken(token);
87
+ if (tokenPayload) {
88
+ req.user = {
89
+ userId: tokenPayload.sub,
90
+ clientId: tokenPayload.client_id,
91
+ scope: tokenPayload.scope,
92
+ };
93
+ }
94
+ next();
95
+ }
96
+ catch (error) {
97
+ // Log error but continue without auth
98
+ logger.debug('Optional auth error (continuing):', error);
99
+ next();
100
+ }
101
+ }
102
+ /**
103
+ * Rate limiting per user/client
104
+ */
105
+ const rateLimitMap = new Map();
106
+ export function rateLimit(maxRequests = 100, windowMs = 60000 // 1 minute
107
+ ) {
108
+ return (req, res, next) => {
109
+ const key = req.user
110
+ ? `user:${req.user.userId}`
111
+ : `ip:${req.ip}`;
112
+ const now = Date.now();
113
+ const limit = rateLimitMap.get(key);
114
+ if (!limit || now > limit.resetAt) {
115
+ // New window
116
+ rateLimitMap.set(key, {
117
+ count: 1,
118
+ resetAt: now + windowMs,
119
+ });
120
+ next();
121
+ return;
122
+ }
123
+ if (limit.count >= maxRequests) {
124
+ res.status(429).json({
125
+ error: 'rate_limit_exceeded',
126
+ message: 'Too many requests',
127
+ retryAfter: Math.ceil((limit.resetAt - now) / 1000),
128
+ });
129
+ return;
130
+ }
131
+ limit.count++;
132
+ next();
133
+ };
134
+ }
135
+ /**
136
+ * CORS middleware for OAuth endpoints
137
+ */
138
+ export function oauthCors(req, res, next) {
139
+ const allowedOrigins = [
140
+ 'https://chat.openai.com',
141
+ 'http://localhost:3000',
142
+ 'http://localhost:3001',
143
+ ];
144
+ const origin = req.headers.origin;
145
+ if (origin && allowedOrigins.includes(origin)) {
146
+ res.setHeader('Access-Control-Allow-Origin', origin);
147
+ }
148
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
149
+ res.setHeader('Access-Control-Allow-Headers', 'Authorization, Content-Type');
150
+ res.setHeader('Access-Control-Allow-Credentials', 'true');
151
+ if (req.method === 'OPTIONS') {
152
+ res.status(204).end();
153
+ return;
154
+ }
155
+ next();
156
+ }
157
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/server/middleware/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Authentication request context
3
+ */
4
+ export interface AuthRequest {
5
+ userId?: string;
6
+ clientId: string;
7
+ ip: string;
8
+ userAgent?: string;
9
+ fingerprint?: string;
10
+ timestamp: Date;
11
+ method: 'login' | 'refresh' | 'logout' | 'register';
12
+ success: boolean;
13
+ metadata?: {
14
+ country?: string;
15
+ city?: string;
16
+ asn?: string;
17
+ isp?: string;
18
+ deviceType?: string;
19
+ browser?: string;
20
+ os?: string;
21
+ };
22
+ }
23
+ /**
24
+ * Anomaly score and action
25
+ */
26
+ export interface AnomalyScore {
27
+ composite: number;
28
+ details: {
29
+ ip: number;
30
+ geo: number;
31
+ device: number;
32
+ time: number;
33
+ velocity: number;
34
+ pattern: number;
35
+ };
36
+ action: 'allow' | 'challenge' | 'deny';
37
+ reasons: string[];
38
+ }
39
+ /**
40
+ * Risk factors configuration
41
+ */
42
+ export interface RiskFactors {
43
+ vpnWeight: number;
44
+ torWeight: number;
45
+ proxyWeight: number;
46
+ newDeviceWeight: number;
47
+ newLocationWeight: number;
48
+ impossibleTravelWeight: number;
49
+ bruteForceWeight: number;
50
+ timeAnomalyWeight: number;
51
+ }
52
+ /**
53
+ * Anomaly Detection System
54
+ * Detects suspicious authentication patterns and potential attacks
55
+ */
56
+ export declare class AnomalyDetector {
57
+ private userProfiles;
58
+ private ipReputation;
59
+ private readonly MAX_FAILED_ATTEMPTS;
60
+ private readonly IMPOSSIBLE_TRAVEL_SPEED;
61
+ private readonly TIME_WINDOW;
62
+ private readonly riskFactors;
63
+ /**
64
+ * Analyze authentication request for anomalies
65
+ */
66
+ detectAnomalies(request: AuthRequest): Promise<AnomalyScore>;
67
+ /**
68
+ * Check IP reputation
69
+ */
70
+ private checkIPReputation;
71
+ /**
72
+ * Check geolocation anomaly
73
+ */
74
+ private checkGeoAnomaly;
75
+ /**
76
+ * Check device anomaly
77
+ */
78
+ private checkDeviceAnomaly;
79
+ /**
80
+ * Check time-based anomaly
81
+ */
82
+ private checkTimeAnomaly;
83
+ /**
84
+ * Check request velocity
85
+ */
86
+ private checkVelocity;
87
+ /**
88
+ * Check behavioral patterns
89
+ */
90
+ private checkBehavioralPattern;
91
+ /**
92
+ * Determine action based on score and context
93
+ */
94
+ private determineAction;
95
+ /**
96
+ * Query threat intelligence feeds
97
+ */
98
+ private queryThreatIntelligence;
99
+ /**
100
+ * Check if IP is in private range
101
+ */
102
+ private isPrivateIP;
103
+ /**
104
+ * Calculate distance between two coordinates (Haversine formula)
105
+ */
106
+ private calculateDistance;
107
+ private toRad;
108
+ /**
109
+ * Calculate request entropy (randomness)
110
+ */
111
+ private calculateRequestEntropy;
112
+ /**
113
+ * Get or create user profile
114
+ */
115
+ private getUserProfile;
116
+ /**
117
+ * Update user profile with successful authentication
118
+ */
119
+ private updateUserProfile;
120
+ /**
121
+ * Count recent requests from IP
122
+ */
123
+ private countRecentRequests;
124
+ /**
125
+ * Log anomaly to database
126
+ */
127
+ private logAnomaly;
128
+ /**
129
+ * Get risk score for a user
130
+ */
131
+ getUserRiskScore(userId: string): Promise<number>;
132
+ /**
133
+ * Reset user profile (after password reset, etc.)
134
+ */
135
+ resetUserProfile(userId: string): void;
136
+ /**
137
+ * Get statistics
138
+ */
139
+ getStats(): {
140
+ totalProfiles: number;
141
+ totalIPs: number;
142
+ highRiskUsers: number;
143
+ };
144
+ }
145
+ export declare const anomalyDetector: AnomalyDetector;
146
+ //# sourceMappingURL=anomalyDetection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anomalyDetection.d.ts","sourceRoot":"","sources":["../../../src/server/oauth/anomalyDetection.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAkBD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IACzC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAO;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAW;IAEvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAS1B;IAEF;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4ElE;;OAEG;YACW,iBAAiB;IAwC/B;;OAEG;YACW,eAAe;IAoC7B;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;YACW,aAAa;IAuB3B;;OAEG;YACW,sBAAsB;IA6BpC;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;YACW,uBAAuB;IA2BrC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;YACW,iBAAiB;IA2B/B;;OAEG;YACW,mBAAmB;IAMjC;;OAEG;YACW,UAAU;IASxB;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvD;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKtC;;OAEG;IACH,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB;CAUF;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}