@campxdev/server-shared 2.1.39 → 2.1.40

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 (74) hide show
  1. package/dist/common/filters/unhandled-exception.filter.d.ts +12 -0
  2. package/dist/common/filters/unhandled-exception.filter.d.ts.map +1 -0
  3. package/dist/common/filters/unhandled-exception.filter.js +46 -0
  4. package/dist/common/filters/unhandled-exception.filter.js.map +1 -0
  5. package/dist/common/guards/guard.d.ts +0 -2
  6. package/dist/common/guards/guard.d.ts.map +1 -1
  7. package/dist/common/guards/guard.js +1 -6
  8. package/dist/common/guards/guard.js.map +1 -1
  9. package/dist/common/index.d.ts +1 -0
  10. package/dist/common/index.d.ts.map +1 -1
  11. package/dist/common/index.js +1 -0
  12. package/dist/common/index.js.map +1 -1
  13. package/dist/common/interceptors/request.interceptor.d.ts +0 -2
  14. package/dist/common/interceptors/request.interceptor.d.ts.map +1 -1
  15. package/dist/common/interceptors/request.interceptor.js +0 -20
  16. package/dist/common/interceptors/request.interceptor.js.map +1 -1
  17. package/dist/common/interfaces/context.interface.d.ts +0 -1
  18. package/dist/common/interfaces/context.interface.d.ts.map +1 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/microsoft/services/teams-meetings-graph.service.d.ts.map +1 -1
  24. package/dist/microsoft/services/teams-meetings-graph.service.js +1 -0
  25. package/dist/microsoft/services/teams-meetings-graph.service.js.map +1 -1
  26. package/dist/modules-handler/types/exams.types.d.ts +0 -2
  27. package/dist/modules-handler/types/exams.types.d.ts.map +1 -1
  28. package/dist/observability/index.d.ts +5 -0
  29. package/dist/observability/index.d.ts.map +1 -0
  30. package/dist/{sentry → observability}/index.js +4 -5
  31. package/dist/observability/index.js.map +1 -0
  32. package/dist/observability/telemetry.module.d.ts +4 -0
  33. package/dist/observability/telemetry.module.d.ts.map +1 -0
  34. package/dist/observability/telemetry.module.js +33 -0
  35. package/dist/observability/telemetry.module.js.map +1 -0
  36. package/dist/observability/telemetry.service.d.ts +10 -0
  37. package/dist/observability/telemetry.service.d.ts.map +1 -0
  38. package/dist/{sentry/sentry.service.js → observability/telemetry.service.js} +26 -45
  39. package/dist/observability/telemetry.service.js.map +1 -0
  40. package/dist/observability/traced.decorator.d.ts +6 -0
  41. package/dist/observability/traced.decorator.d.ts.map +1 -0
  42. package/dist/observability/traced.decorator.js +51 -0
  43. package/dist/observability/traced.decorator.js.map +1 -0
  44. package/dist/observability/tracing.interceptor.d.ts +14 -0
  45. package/dist/observability/tracing.interceptor.d.ts.map +1 -0
  46. package/dist/observability/tracing.interceptor.js +119 -0
  47. package/dist/observability/tracing.interceptor.js.map +1 -0
  48. package/dist/otel-sdk.d.ts +10 -0
  49. package/dist/otel-sdk.d.ts.map +1 -0
  50. package/dist/otel-sdk.js +154 -0
  51. package/dist/otel-sdk.js.map +1 -0
  52. package/package.json +1 -1
  53. package/dist/sentry/index.d.ts +0 -6
  54. package/dist/sentry/index.d.ts.map +0 -1
  55. package/dist/sentry/index.js.map +0 -1
  56. package/dist/sentry/sentry-http.filter.d.ts +0 -6
  57. package/dist/sentry/sentry-http.filter.d.ts.map +0 -1
  58. package/dist/sentry/sentry-http.filter.js +0 -89
  59. package/dist/sentry/sentry-http.filter.js.map +0 -1
  60. package/dist/sentry/sentry-rpc.filter.d.ts +0 -5
  61. package/dist/sentry/sentry-rpc.filter.d.ts.map +0 -1
  62. package/dist/sentry/sentry-rpc.filter.js +0 -79
  63. package/dist/sentry/sentry-rpc.filter.js.map +0 -1
  64. package/dist/sentry/sentry-sqs.util.d.ts +0 -8
  65. package/dist/sentry/sentry-sqs.util.d.ts.map +0 -1
  66. package/dist/sentry/sentry-sqs.util.js +0 -67
  67. package/dist/sentry/sentry-sqs.util.js.map +0 -1
  68. package/dist/sentry/sentry.module.d.ts +0 -21
  69. package/dist/sentry/sentry.module.d.ts.map +0 -1
  70. package/dist/sentry/sentry.module.js +0 -103
  71. package/dist/sentry/sentry.module.js.map +0 -1
  72. package/dist/sentry/sentry.service.d.ts +0 -21
  73. package/dist/sentry/sentry.service.d.ts.map +0 -1
  74. package/dist/sentry/sentry.service.js.map +0 -1
@@ -1,67 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.withSentrySqs = withSentrySqs;
37
- const Sentry = __importStar(require("@sentry/nestjs"));
38
- /**
39
- * Utility to wrap SQS message handlers with Sentry error capture.
40
- * @param queueName - The name of the SQS queue.
41
- * @param handler - The message processing logic.
42
- * @returns A wrapped handler.
43
- */
44
- function withSentrySqs(queueName, handler) {
45
- return async (...args) => {
46
- try {
47
- Sentry.addBreadcrumb({
48
- category: 'sqs',
49
- message: `Processing message from queue: ${queueName}`,
50
- level: 'info',
51
- });
52
- return await handler(...args);
53
- }
54
- catch (error) {
55
- Sentry.withScope((scope) => {
56
- scope.setTag('queue.name', queueName);
57
- scope.setContext('sqs.message', {
58
- queue: queueName,
59
- payload: args[0], // Assumes message body is the first argument
60
- });
61
- Sentry.captureException(error);
62
- });
63
- throw error; // Re-throw so SQS can handle the retry/DLQ
64
- }
65
- };
66
- }
67
- //# sourceMappingURL=sentry-sqs.util.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sentry-sqs.util.js","sourceRoot":"","sources":["../../src/sentry/sentry-sqs.util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,sCAwBC;AAhCD,uDAAyC;AAEzC;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,SAAiB,EAAE,OAAyC;IACxF,OAAO,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,CAAC,aAAa,CAAC;gBACnB,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,kCAAkC,SAAS,EAAE;gBACtD,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YAEH,OAAO,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzB,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBACtC,KAAK,CAAC,UAAU,CAAC,aAAa,EAAE;oBAC9B,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,6CAA6C;iBAChE,CAAC,CAAC;gBAEH,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,CAAC,2CAA2C;QAC1D,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,21 +0,0 @@
1
- import { DynamicModule } from '@nestjs/common';
2
- export interface SentryModuleOptions {
3
- dsn: string;
4
- environment: string;
5
- release?: string;
6
- tracesSampleRate?: number;
7
- }
8
- export interface SentryModuleAsyncOptions {
9
- imports?: any[];
10
- inject?: any[];
11
- useFactory: (...args: any[]) => Promise<SentryModuleOptions> | SentryModuleOptions;
12
- }
13
- /**
14
- * Early initialization function to be called in instrument.ts
15
- */
16
- export declare function initSentry(options: SentryModuleOptions): void;
17
- export declare class SentryModule {
18
- static forRoot(options: SentryModuleOptions): DynamicModule;
19
- static forRootAsync(options: SentryModuleAsyncOptions): DynamicModule;
20
- }
21
- //# sourceMappingURL=sentry.module.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sentry.module.d.ts","sourceRoot":"","sources":["../../src/sentry/sentry.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4B,MAAM,gBAAgB,CAAC;AAKzE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;CACpF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,mBAAmB,QAYtD;AAED,qBAKa,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa;IAc3D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,GAAG,aAAa;CAiBtE"}
@@ -1,103 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
- return c > 3 && r && Object.defineProperty(target, key, r), r;
23
- };
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- var SentryModule_1;
42
- Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.SentryModule = void 0;
44
- exports.initSentry = initSentry;
45
- const common_1 = require("@nestjs/common");
46
- const Sentry = __importStar(require("@sentry/nestjs"));
47
- const profiling_node_1 = require("@sentry/profiling-node");
48
- const sentry_service_1 = require("./sentry.service");
49
- /**
50
- * Early initialization function to be called in instrument.ts
51
- */
52
- function initSentry(options) {
53
- console.log(`[Sentry] Initializing with DSN: ${options.dsn ? 'FOUND' : 'MISSING'} in environment: ${options.environment}`);
54
- if (!options.dsn)
55
- return;
56
- Sentry.init({
57
- dsn: options.dsn,
58
- environment: options.environment,
59
- release: options.release,
60
- tracesSampleRate: options.tracesSampleRate ?? (options.environment === 'production' ? 0.05 : 1.0),
61
- integrations: [(0, profiling_node_1.nodeProfilingIntegration)()],
62
- profilesSampleRate: 1.0,
63
- });
64
- }
65
- let SentryModule = SentryModule_1 = class SentryModule {
66
- static forRoot(options) {
67
- initSentry(options);
68
- return {
69
- module: SentryModule_1,
70
- providers: [
71
- {
72
- provide: 'SENTRY_OPTIONS',
73
- useValue: options,
74
- },
75
- ],
76
- };
77
- }
78
- static forRootAsync(options) {
79
- const provider = {
80
- provide: 'SENTRY_OPTIONS',
81
- useFactory: async (...args) => {
82
- const config = await options.useFactory(...args);
83
- initSentry(config);
84
- return config;
85
- },
86
- inject: options.inject || [],
87
- };
88
- return {
89
- module: SentryModule_1,
90
- imports: options.imports || [],
91
- providers: [provider],
92
- };
93
- }
94
- };
95
- exports.SentryModule = SentryModule;
96
- exports.SentryModule = SentryModule = SentryModule_1 = __decorate([
97
- (0, common_1.Global)(),
98
- (0, common_1.Module)({
99
- providers: [sentry_service_1.SentryService],
100
- exports: [sentry_service_1.SentryService],
101
- })
102
- ], SentryModule);
103
- //# sourceMappingURL=sentry.module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sentry.module.js","sourceRoot":"","sources":["../../src/sentry/sentry.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,gCAYC;AAjCD,2CAAyE;AACzE,uDAAyC;AACzC,2DAAkE;AAClE,qDAAiD;AAejD;;GAEG;AACH,SAAgB,UAAU,CAAC,OAA4B;IACrD,OAAO,CAAC,GAAG,CAAC,mCAAmC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,oBAAoB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3H,IAAI,CAAC,OAAO,CAAC,GAAG;QAAE,OAAO;IAEzB,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACjG,YAAY,EAAE,CAAC,IAAA,yCAAwB,GAAE,CAAC;QAC1C,kBAAkB,EAAE,GAAG;KACxB,CAAC,CAAC;AACL,CAAC;AAOM,IAAM,YAAY,oBAAlB,MAAM,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,OAA4B;QACzC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEpB,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,gBAAgB;oBACzB,QAAQ,EAAE,OAAO;iBAClB;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAiC;QACnD,MAAM,QAAQ,GAAa;YACzB,OAAO,EAAE,gBAAgB;YACzB,UAAU,EAAE,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;gBACjD,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;SAC7B,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC;IACJ,CAAC;CACF,CAAA;AAhCY,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,YAAY,CAgCxB"}
@@ -1,21 +0,0 @@
1
- import * as Sentry from '@sentry/nestjs';
2
- export declare class SentryService {
3
- private readonly logger;
4
- /**
5
- * Capture an exception to Sentry
6
- */
7
- captureException(exception: any, context?: string): void;
8
- /**
9
- * Add a breadcrumb to the current Sentry scope
10
- */
11
- addBreadcrumb(message: string, data?: Record<string, any>, level?: Sentry.SeverityLevel): void;
12
- /**
13
- * Manually set user context for the current scope
14
- */
15
- setUserContext(userId: string | number, tenantId?: string): void;
16
- /**
17
- * Set additional tags for the current scope
18
- */
19
- setTags(tags: Record<string, string>): void;
20
- }
21
- //# sourceMappingURL=sentry.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sentry.service.d.ts","sourceRoot":"","sources":["../../src/sentry/sentry.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAEzC,qBACa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IAEzD;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAWxD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAE,MAAM,CAAC,aAAsB,GAAG,IAAI;IAQtG;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAOhE;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;CAG5C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sentry.service.js","sourceRoot":"","sources":["../../src/sentry/sentry.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,uDAAyC;AAGlC,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACP,MAAM,GAAG,IAAI,eAAM,CAAC,eAAa,CAAC,IAAI,CAAC,CAAC;IAEzD;;OAEG;IACH,gBAAgB,CAAC,SAAc,EAAE,OAAgB;QAC/C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzB,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACjC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAe,EAAE,IAA0B,EAAE,QAA8B,MAAM;QAC7F,MAAM,CAAC,aAAa,CAAC;YACnB,OAAO;YACP,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAAuB,EAAE,QAAiB;QACvD,MAAM,CAAC,OAAO,CAAC;YACb,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;YAClB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAA4B;QAClC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;CACF,CAAA;AA5CY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;GACA,aAAa,CA4CzB"}