@semiont/core 0.1.0-build.2

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 (91) hide show
  1. package/README.md +265 -0
  2. package/dist/annotation-history-utils.d.ts +42 -0
  3. package/dist/annotation-history-utils.d.ts.map +1 -0
  4. package/dist/annotation-history-utils.js +258 -0
  5. package/dist/annotation-history-utils.js.map +1 -0
  6. package/dist/annotation-types.d.ts +15 -0
  7. package/dist/annotation-types.d.ts.map +1 -0
  8. package/dist/annotation-types.js +6 -0
  9. package/dist/annotation-types.js.map +1 -0
  10. package/dist/annotation-utils.d.ts +18 -0
  11. package/dist/annotation-utils.d.ts.map +1 -0
  12. package/dist/annotation-utils.js +70 -0
  13. package/dist/annotation-utils.js.map +1 -0
  14. package/dist/auth-types.d.ts +8 -0
  15. package/dist/auth-types.d.ts.map +1 -0
  16. package/dist/auth-types.js +6 -0
  17. package/dist/auth-types.js.map +1 -0
  18. package/dist/config/config-validator.d.ts +25 -0
  19. package/dist/config/config-validator.d.ts.map +1 -0
  20. package/dist/config/config-validator.js +112 -0
  21. package/dist/config/config-validator.js.map +1 -0
  22. package/dist/config/config.schema.json +678 -0
  23. package/dist/config/config.types.d.ts +574 -0
  24. package/dist/config/config.types.d.ts.map +1 -0
  25. package/dist/config/config.types.js +4 -0
  26. package/dist/config/config.types.js.map +1 -0
  27. package/dist/config/configuration-error.d.ts +17 -0
  28. package/dist/config/configuration-error.d.ts.map +1 -0
  29. package/dist/config/configuration-error.js +36 -0
  30. package/dist/config/configuration-error.js.map +1 -0
  31. package/dist/config/environment-loader.d.ts +98 -0
  32. package/dist/config/environment-loader.d.ts.map +1 -0
  33. package/dist/config/environment-loader.js +229 -0
  34. package/dist/config/environment-loader.js.map +1 -0
  35. package/dist/config/environment-validator.d.ts +22 -0
  36. package/dist/config/environment-validator.d.ts.map +1 -0
  37. package/dist/config/environment-validator.js +50 -0
  38. package/dist/config/environment-validator.js.map +1 -0
  39. package/dist/config/platform-types.d.ts +26 -0
  40. package/dist/config/platform-types.d.ts.map +1 -0
  41. package/dist/config/platform-types.js +28 -0
  42. package/dist/config/platform-types.js.map +1 -0
  43. package/dist/config/project-discovery.d.ts +35 -0
  44. package/dist/config/project-discovery.d.ts.map +1 -0
  45. package/dist/config/project-discovery.js +99 -0
  46. package/dist/config/project-discovery.js.map +1 -0
  47. package/dist/creation-methods.d.ts +19 -0
  48. package/dist/creation-methods.d.ts.map +1 -0
  49. package/dist/creation-methods.js +18 -0
  50. package/dist/creation-methods.js.map +1 -0
  51. package/dist/crypto.d.ts +32 -0
  52. package/dist/crypto.d.ts.map +1 -0
  53. package/dist/crypto.js +52 -0
  54. package/dist/crypto.js.map +1 -0
  55. package/dist/did-utils.d.ts +51 -0
  56. package/dist/did-utils.d.ts.map +1 -0
  57. package/dist/did-utils.js +62 -0
  58. package/dist/did-utils.js.map +1 -0
  59. package/dist/errors.d.ts +51 -0
  60. package/dist/errors.d.ts.map +1 -0
  61. package/dist/errors.js +89 -0
  62. package/dist/errors.js.map +1 -0
  63. package/dist/events.d.ts +223 -0
  64. package/dist/events.d.ts.map +1 -0
  65. package/dist/events.js +45 -0
  66. package/dist/events.js.map +1 -0
  67. package/dist/graph.d.ts +31 -0
  68. package/dist/graph.d.ts.map +1 -0
  69. package/dist/graph.js +6 -0
  70. package/dist/graph.js.map +1 -0
  71. package/dist/http-client.d.ts +32 -0
  72. package/dist/http-client.d.ts.map +1 -0
  73. package/dist/http-client.js +56 -0
  74. package/dist/http-client.js.map +1 -0
  75. package/dist/identifiers.d.ts +24 -0
  76. package/dist/identifiers.d.ts.map +1 -0
  77. package/dist/identifiers.js +40 -0
  78. package/dist/identifiers.js.map +1 -0
  79. package/dist/index.d.ts +33 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +80 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/resource-types.d.ts +15 -0
  84. package/dist/resource-types.d.ts.map +1 -0
  85. package/dist/resource-types.js +6 -0
  86. package/dist/resource-types.js.map +1 -0
  87. package/dist/type-guards.d.ts +44 -0
  88. package/dist/type-guards.d.ts.map +1 -0
  89. package/dist/type-guards.js +76 -0
  90. package/dist/type-guards.js.map +1 -0
  91. package/package.json +49 -0
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * Backend-specific annotation utility functions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.bodyItemsMatch = bodyItemsMatch;
7
+ exports.findBodyItem = findBodyItem;
8
+ /**
9
+ * Check if two body items match (for remove/replace operations)
10
+ * Matches by type, value/source, and purpose fields
11
+ */
12
+ function bodyItemsMatch(item1, item2) {
13
+ // Type must match
14
+ if (item1.type !== item2.type) {
15
+ return false;
16
+ }
17
+ // Purpose must match
18
+ if (item1.purpose !== item2.purpose) {
19
+ return false;
20
+ }
21
+ // For TextualBody, match by value
22
+ if (item1.type === 'TextualBody' && item2.type === 'TextualBody') {
23
+ return item1.value === item2.value;
24
+ }
25
+ // For SpecificResource, match by source
26
+ if (item1.type === 'SpecificResource' && item2.type === 'SpecificResource') {
27
+ return item1.source === item2.source;
28
+ }
29
+ return false;
30
+ }
31
+ /**
32
+ * Find a body item in an array
33
+ * Returns the index of the first matching item, or -1 if not found
34
+ */
35
+ function findBodyItem(body, targetItem) {
36
+ if (!Array.isArray(body)) {
37
+ return -1;
38
+ }
39
+ for (let i = 0; i < body.length; i++) {
40
+ const item = body[i];
41
+ // Check if this is a valid body item that can be matched
42
+ if (typeof item === 'object' &&
43
+ item !== null &&
44
+ 'type' in item &&
45
+ 'purpose' in item) {
46
+ const itemType = item.type;
47
+ const itemPurpose = item.purpose;
48
+ // Type and purpose must match
49
+ if (itemType !== targetItem.type || itemPurpose !== targetItem.purpose) {
50
+ continue;
51
+ }
52
+ // For TextualBody, match by value
53
+ if (targetItem.type === 'TextualBody' && 'value' in item) {
54
+ const itemValue = item.value;
55
+ if (itemValue === targetItem.value) {
56
+ return i;
57
+ }
58
+ }
59
+ // For SpecificResource, match by source
60
+ if (targetItem.type === 'SpecificResource' && 'source' in item) {
61
+ const itemSource = item.source;
62
+ if (itemSource === targetItem.source) {
63
+ return i;
64
+ }
65
+ }
66
+ }
67
+ }
68
+ return -1;
69
+ }
70
+ //# sourceMappingURL=annotation-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-utils.js","sourceRoot":"","sources":["../src/annotation-utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAWH,wCAsBC;AAMD,oCA0CC;AA1ED;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAAe,EAAE,KAAe;IAC7D,kBAAkB;IAClB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kCAAkC;IAClC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjE,OAAO,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;IACrC,CAAC;IAED,wCAAwC;IACxC,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,IAAwB,EAAE,UAAoB;IACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAErB,yDAAyD;QACzD,IACE,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,MAAM,IAAI,IAAI;YACd,SAAS,IAAI,IAAI,EACjB,CAAC;YACD,MAAM,QAAQ,GAAI,IAA0B,CAAC,IAAI,CAAC;YAClD,MAAM,WAAW,GAAI,IAA6B,CAAC,OAAO,CAAC;YAE3D,8BAA8B;YAC9B,IAAI,QAAQ,KAAK,UAAU,CAAC,IAAI,IAAI,WAAW,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvE,SAAS;YACX,CAAC;YAED,kCAAkC;YAClC,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACzD,MAAM,SAAS,GAAI,IAA2B,CAAC,KAAK,CAAC;gBACrD,IAAI,SAAS,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnC,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;YAED,wCAAwC;YACxC,IAAI,UAAU,CAAC,IAAI,KAAK,kBAAkB,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAI,IAA4B,CAAC,MAAM,CAAC;gBACxD,IAAI,UAAU,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;oBACrC,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Auth types
3
+ */
4
+ export interface GoogleAuthRequest {
5
+ credential: string;
6
+ termsAccepted: boolean;
7
+ }
8
+ //# sourceMappingURL=auth-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-types.d.ts","sourceRoot":"","sources":["../src/auth-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Auth types
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=auth-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-types.js","sourceRoot":"","sources":["../src/auth-types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Config Schema Validator
3
+ *
4
+ * Validates configuration data against JSON Schema using Ajv (JSON Schema validator).
5
+ * Provides runtime validation for semiont.json and environment config files.
6
+ */
7
+ import { type ErrorObject } from 'ajv';
8
+ export interface ValidationResult {
9
+ valid: boolean;
10
+ errors: ErrorObject[] | null;
11
+ errorMessage?: string;
12
+ }
13
+ /**
14
+ * Validate semiont.json config
15
+ */
16
+ export declare function validateSemiontConfig(data: unknown): ValidationResult;
17
+ /**
18
+ * Validate environment config (environments/*.json)
19
+ */
20
+ export declare function validateEnvironmentConfig(data: unknown): ValidationResult;
21
+ /**
22
+ * Validate site config
23
+ */
24
+ export declare function validateSiteConfig(data: unknown): ValidationResult;
25
+ //# sourceMappingURL=config-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-validator.d.ts","sourceRoot":"","sources":["../../src/config/config-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAY,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAmB5C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAiBrE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAiBzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAiBlE"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * Config Schema Validator
4
+ *
5
+ * Validates configuration data against JSON Schema using Ajv (JSON Schema validator).
6
+ * Provides runtime validation for semiont.json and environment config files.
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.validateSemiontConfig = validateSemiontConfig;
13
+ exports.validateEnvironmentConfig = validateEnvironmentConfig;
14
+ exports.validateSiteConfig = validateSiteConfig;
15
+ const ajv_1 = __importDefault(require("ajv"));
16
+ const ajv_formats_1 = __importDefault(require("ajv-formats"));
17
+ const config_schema_json_1 = __importDefault(require("./config.schema.json"));
18
+ // Initialize Ajv with config-compatible settings
19
+ const ajv = new ajv_1.default({
20
+ allErrors: true, // Return all errors, not just the first one
21
+ coerceTypes: true, // Coerce types (e.g., "123" -> 123)
22
+ removeAdditional: false, // Don't remove additional properties
23
+ useDefaults: true, // Apply default values from schema
24
+ strict: false
25
+ });
26
+ // Add format validators (email, uri, date-time, etc.)
27
+ (0, ajv_formats_1.default)(ajv);
28
+ // Load schema
29
+ ajv.addSchema(config_schema_json_1.default, 'config');
30
+ /**
31
+ * Validate semiont.json config
32
+ */
33
+ function validateSemiontConfig(data) {
34
+ const validate = ajv.getSchema('config#/definitions/SemiontConfig');
35
+ if (!validate) {
36
+ throw new Error('SemiontConfig schema not found');
37
+ }
38
+ const valid = validate(data);
39
+ if (!valid) {
40
+ return {
41
+ valid: false,
42
+ errors: validate.errors || null,
43
+ errorMessage: formatErrors(validate.errors || [])
44
+ };
45
+ }
46
+ return { valid: true, errors: null };
47
+ }
48
+ /**
49
+ * Validate environment config (environments/*.json)
50
+ */
51
+ function validateEnvironmentConfig(data) {
52
+ const validate = ajv.getSchema('config#/definitions/EnvironmentConfig');
53
+ if (!validate) {
54
+ throw new Error('EnvironmentConfig schema not found');
55
+ }
56
+ const valid = validate(data);
57
+ if (!valid) {
58
+ return {
59
+ valid: false,
60
+ errors: validate.errors || null,
61
+ errorMessage: formatErrors(validate.errors || [])
62
+ };
63
+ }
64
+ return { valid: true, errors: null };
65
+ }
66
+ /**
67
+ * Validate site config
68
+ */
69
+ function validateSiteConfig(data) {
70
+ const validate = ajv.getSchema('config#/definitions/SiteConfig');
71
+ if (!validate) {
72
+ throw new Error('SiteConfig schema not found');
73
+ }
74
+ const valid = validate(data);
75
+ if (!valid) {
76
+ return {
77
+ valid: false,
78
+ errors: validate.errors || null,
79
+ errorMessage: formatErrors(validate.errors || [])
80
+ };
81
+ }
82
+ return { valid: true, errors: null };
83
+ }
84
+ /**
85
+ * Format validation errors into human-readable message
86
+ */
87
+ function formatErrors(errors) {
88
+ if (errors.length === 0)
89
+ return 'Validation failed';
90
+ const messages = errors.map(err => {
91
+ const path = err.instancePath || 'root';
92
+ const message = err.message || 'validation error';
93
+ if (err.keyword === 'required' && 'missingProperty' in err.params) {
94
+ return `Missing required property: ${err.params.missingProperty}`;
95
+ }
96
+ if (err.keyword === 'type' && 'type' in err.params) {
97
+ return `${path}: ${message} (expected ${err.params.type})`;
98
+ }
99
+ if (err.keyword === 'enum' && 'allowedValues' in err.params) {
100
+ return `${path}: must be one of [${err.params.allowedValues.join(', ')}]`;
101
+ }
102
+ if (err.keyword === 'format') {
103
+ return `${path}: invalid format (${message})`;
104
+ }
105
+ if (err.keyword === 'minLength' || err.keyword === 'minItems') {
106
+ return `${path}: ${message}`;
107
+ }
108
+ return `${path}: ${message}`;
109
+ });
110
+ return messages.join('; ');
111
+ }
112
+ //# sourceMappingURL=config-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../src/config/config-validator.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AA8BH,sDAiBC;AAKD,8DAiBC;AAKD,gDAiBC;AAzFD,8CAA4C;AAC5C,8DAAqC;AACrC,8EAAgD;AAEhD,iDAAiD;AACjD,MAAM,GAAG,GAAG,IAAI,aAAG,CAAC;IAClB,SAAS,EAAE,IAAI,EAAO,4CAA4C;IAClE,WAAW,EAAE,IAAI,EAAK,oCAAoC;IAC1D,gBAAgB,EAAE,KAAK,EAAE,qCAAqC;IAC9D,WAAW,EAAE,IAAI,EAAK,mCAAmC;IACzD,MAAM,EAAE,KAAK;CACd,CAAC,CAAC;AAEH,sDAAsD;AACtD,IAAA,qBAAU,EAAC,GAAG,CAAC,CAAC;AAEhB,cAAc;AACd,GAAG,CAAC,SAAS,CAAC,4BAAY,EAAE,QAAQ,CAAC,CAAC;AAQtC;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAAa;IACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;IACpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;YAC/B,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,IAAa;IACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAC;IACxE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;YAC/B,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,IAAa;IAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;IACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;YAC/B,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,MAAqB;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,mBAAmB,CAAC;IAEpD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,kBAAkB,CAAC;QAElD,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,IAAI,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAClE,OAAO,8BAA8B,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QACpE,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACnD,OAAO,GAAG,IAAI,KAAK,OAAO,cAAc,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;QAC7D,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,IAAI,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC5D,OAAO,GAAG,IAAI,qBAAsB,GAAG,CAAC,MAAM,CAAC,aAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1F,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,GAAG,IAAI,qBAAqB,OAAO,GAAG,CAAC;QAChD,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,KAAK,WAAW,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAC9D,OAAO,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC;QAC/B,CAAC;QAED,OAAO,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}