bitbadgesjs-sdk 0.29.2 → 0.29.3

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 (75) hide show
  1. package/dist/cjs/core/misc.spec.d.ts +2 -0
  2. package/dist/cjs/core/misc.spec.d.ts.map +1 -0
  3. package/dist/cjs/core/misc.spec.js +363 -0
  4. package/dist/cjs/core/misc.spec.js.map +1 -0
  5. package/dist/cjs/core/overlaps.spec.d.ts +2 -0
  6. package/dist/cjs/core/overlaps.spec.d.ts.map +1 -0
  7. package/dist/cjs/core/overlaps.spec.js +398 -0
  8. package/dist/cjs/core/overlaps.spec.js.map +1 -0
  9. package/dist/cjs/transactions/precompile/abi-data.d.ts +333 -0
  10. package/dist/cjs/transactions/precompile/abi-data.d.ts.map +1 -1
  11. package/dist/cjs/transactions/precompile/abi-data.js +202 -1
  12. package/dist/cjs/transactions/precompile/abi-data.js.map +1 -1
  13. package/dist/cjs/transactions/precompile/abi.d.ts +2 -0
  14. package/dist/cjs/transactions/precompile/abi.d.ts.map +1 -1
  15. package/dist/cjs/transactions/precompile/abi.js +3 -1
  16. package/dist/cjs/transactions/precompile/abi.js.map +1 -1
  17. package/dist/cjs/transactions/precompile/data-converter.d.ts +19 -0
  18. package/dist/cjs/transactions/precompile/data-converter.d.ts.map +1 -1
  19. package/dist/cjs/transactions/precompile/data-converter.js +118 -0
  20. package/dist/cjs/transactions/precompile/data-converter.js.map +1 -1
  21. package/dist/cjs/transactions/precompile/function-mapper.d.ts +7 -1
  22. package/dist/cjs/transactions/precompile/function-mapper.d.ts.map +1 -1
  23. package/dist/cjs/transactions/precompile/function-mapper.js +13 -1
  24. package/dist/cjs/transactions/precompile/function-mapper.js.map +1 -1
  25. package/dist/cjs/transactions/precompile/index.d.ts +4 -3
  26. package/dist/cjs/transactions/precompile/index.d.ts.map +1 -1
  27. package/dist/cjs/transactions/precompile/index.js +15 -1
  28. package/dist/cjs/transactions/precompile/index.js.map +1 -1
  29. package/dist/cjs/transactions/precompile/type-detector.d.ts +13 -1
  30. package/dist/cjs/transactions/precompile/type-detector.d.ts.map +1 -1
  31. package/dist/cjs/transactions/precompile/type-detector.js +73 -0
  32. package/dist/cjs/transactions/precompile/type-detector.js.map +1 -1
  33. package/dist/cjs/transactions/precompile/utils.d.ts +4 -2
  34. package/dist/cjs/transactions/precompile/utils.d.ts.map +1 -1
  35. package/dist/cjs/transactions/precompile/utils.js +113 -2
  36. package/dist/cjs/transactions/precompile/utils.js.map +1 -1
  37. package/dist/cjs/tsconfig.build.tsbuildinfo +1 -1
  38. package/dist/esm/core/misc.spec.d.ts +2 -0
  39. package/dist/esm/core/misc.spec.d.ts.map +1 -0
  40. package/dist/esm/core/misc.spec.js +361 -0
  41. package/dist/esm/core/misc.spec.js.map +1 -0
  42. package/dist/esm/core/overlaps.spec.d.ts +2 -0
  43. package/dist/esm/core/overlaps.spec.d.ts.map +1 -0
  44. package/dist/esm/core/overlaps.spec.js +396 -0
  45. package/dist/esm/core/overlaps.spec.js.map +1 -0
  46. package/dist/esm/transactions/precompile/abi-data.d.ts +333 -0
  47. package/dist/esm/transactions/precompile/abi-data.d.ts.map +1 -1
  48. package/dist/esm/transactions/precompile/abi-data.js +201 -0
  49. package/dist/esm/transactions/precompile/abi-data.js.map +1 -1
  50. package/dist/esm/transactions/precompile/abi.d.ts +2 -0
  51. package/dist/esm/transactions/precompile/abi.d.ts.map +1 -1
  52. package/dist/esm/transactions/precompile/abi.js +2 -0
  53. package/dist/esm/transactions/precompile/abi.js.map +1 -1
  54. package/dist/esm/transactions/precompile/data-converter.d.ts +19 -0
  55. package/dist/esm/transactions/precompile/data-converter.d.ts.map +1 -1
  56. package/dist/esm/transactions/precompile/data-converter.js +112 -0
  57. package/dist/esm/transactions/precompile/data-converter.js.map +1 -1
  58. package/dist/esm/transactions/precompile/function-mapper.d.ts +7 -1
  59. package/dist/esm/transactions/precompile/function-mapper.d.ts.map +1 -1
  60. package/dist/esm/transactions/precompile/function-mapper.js +13 -1
  61. package/dist/esm/transactions/precompile/function-mapper.js.map +1 -1
  62. package/dist/esm/transactions/precompile/index.d.ts +4 -3
  63. package/dist/esm/transactions/precompile/index.d.ts.map +1 -1
  64. package/dist/esm/transactions/precompile/index.js +3 -2
  65. package/dist/esm/transactions/precompile/index.js.map +1 -1
  66. package/dist/esm/transactions/precompile/type-detector.d.ts +13 -1
  67. package/dist/esm/transactions/precompile/type-detector.d.ts.map +1 -1
  68. package/dist/esm/transactions/precompile/type-detector.js +67 -0
  69. package/dist/esm/transactions/precompile/type-detector.js.map +1 -1
  70. package/dist/esm/transactions/precompile/utils.d.ts +4 -2
  71. package/dist/esm/transactions/precompile/utils.d.ts.map +1 -1
  72. package/dist/esm/transactions/precompile/utils.js +111 -4
  73. package/dist/esm/transactions/precompile/utils.js.map +1 -1
  74. package/dist/esm/tsconfig-esm.build.tsbuildinfo +1 -1
  75. package/package.json +1 -1
@@ -0,0 +1,396 @@
1
+ import { AddressList } from './addressLists.js';
2
+ import { ActionPermissionUsedFlags, ApprovalPermissionUsedFlags, GetFirstMatchOnly, GetListWithOptions, GetUintRangesWithOptions, MergeUniversalPermissionDetails, TimedUpdatePermissionUsedFlags, ValidateUniversalPermissionUpdate, getOverlapsAndNonOverlaps, universalRemoveOverlapFromValues, universalRemoveOverlaps } from './overlaps.js';
3
+ import { UintRange, UintRangeArray } from './uintRanges.js';
4
+ const alice = 'bb1e0w5t53nrq7p66fye6c8p0ynyhf6y24lke5430';
5
+ const bob = 'bb1jmjfq0tplp9tmx4v9uemw72y4d2wa5nrjmmk3q';
6
+ const charlie = 'bb1xyxs3skf3f4jfqeuv89yyaqvjc6lffav9altme';
7
+ function createPermissionDetails(tokenIdRange, timelineTimeRange, transferTimeRange, ownershipTimeRange, toList, fromList, initiatedByList, approvalIdList = { addresses: [], whitelist: false }) {
8
+ return {
9
+ tokenId: new UintRange(tokenIdRange),
10
+ timelineTime: new UintRange(timelineTimeRange),
11
+ transferTime: new UintRange(transferTimeRange),
12
+ ownershipTime: new UintRange(ownershipTimeRange),
13
+ toList: new AddressList({
14
+ listId: '',
15
+ addresses: toList.addresses,
16
+ whitelist: toList.whitelist,
17
+ uri: '',
18
+ customData: ''
19
+ }),
20
+ fromList: new AddressList({
21
+ listId: '',
22
+ addresses: fromList.addresses,
23
+ whitelist: fromList.whitelist,
24
+ uri: '',
25
+ customData: ''
26
+ }),
27
+ initiatedByList: new AddressList({
28
+ listId: '',
29
+ addresses: initiatedByList.addresses,
30
+ whitelist: initiatedByList.whitelist,
31
+ uri: '',
32
+ customData: ''
33
+ }),
34
+ approvalIdList: new AddressList({
35
+ listId: '',
36
+ addresses: approvalIdList.addresses,
37
+ whitelist: approvalIdList.whitelist,
38
+ uri: '',
39
+ customData: ''
40
+ }),
41
+ permanentlyPermittedTimes: UintRangeArray.From([]),
42
+ permanentlyForbiddenTimes: UintRangeArray.From([]),
43
+ arbitraryValue: {}
44
+ };
45
+ }
46
+ describe('overlaps', () => {
47
+ describe('universalRemoveOverlaps', () => {
48
+ test('should remove exact overlap (single point from range)', () => {
49
+ const handled = createPermissionDetails({ start: 5n, end: 5n }, { start: 5n, end: 5n }, { start: 5n, end: 5n }, { start: 5n, end: 5n }, { addresses: [alice, bob, charlie], whitelist: true }, { addresses: [alice, bob, charlie], whitelist: true }, { addresses: [alice, bob, charlie], whitelist: true });
50
+ const valueToCheck = createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 10n }, { start: 1n, end: 10n }, { start: 1n, end: 10n }, { addresses: [alice, bob, charlie], whitelist: true }, { addresses: [alice, bob, charlie], whitelist: true }, { addresses: [alice, bob, charlie], whitelist: true });
51
+ const [remaining, removed] = universalRemoveOverlaps(handled, valueToCheck);
52
+ expect(remaining.length).toBe(8);
53
+ expect(removed.length).toBe(1);
54
+ expect(remaining[0].timelineTime.start).toBe(1n);
55
+ expect(remaining[0].timelineTime.end).toBe(4n);
56
+ expect(remaining[0].tokenId.start).toBe(1n);
57
+ expect(remaining[0].tokenId.end).toBe(10n);
58
+ expect(remaining[1].timelineTime.start).toBe(6n);
59
+ expect(remaining[1].timelineTime.end).toBe(10n);
60
+ expect(removed[0].timelineTime.start).toBe(5n);
61
+ expect(removed[0].timelineTime.end).toBe(5n);
62
+ expect(removed[0].tokenId.start).toBe(5n);
63
+ expect(removed[0].tokenId.end).toBe(5n);
64
+ });
65
+ test('should handle no overlap (disjoint ranges)', () => {
66
+ const handled = createPermissionDetails({ start: 100n, end: 200n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
67
+ const valueToCheck = createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
68
+ const [remaining, removed] = universalRemoveOverlaps(handled, valueToCheck);
69
+ expect(remaining.length).toBe(1);
70
+ expect(removed.length).toBe(0);
71
+ expect(remaining[0].tokenId.start).toBe(1n);
72
+ expect(remaining[0].tokenId.end).toBe(10n);
73
+ });
74
+ test('should handle full overlap (handled contains entire valueToCheck)', () => {
75
+ const handled = createPermissionDetails({ start: 1n, end: 100n }, { start: 1n, end: 100n }, { start: 1n, end: 100n }, { start: 1n, end: 100n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
76
+ const valueToCheck = createPermissionDetails({ start: 10n, end: 20n }, { start: 10n, end: 20n }, { start: 10n, end: 20n }, { start: 10n, end: 20n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
77
+ const [remaining, removed] = universalRemoveOverlaps(handled, valueToCheck);
78
+ expect(remaining.length).toBe(0);
79
+ expect(removed.length).toBe(1);
80
+ expect(removed[0].tokenId.start).toBe(10n);
81
+ expect(removed[0].tokenId.end).toBe(20n);
82
+ });
83
+ test('should handle address list overlap removal', () => {
84
+ const handled = createPermissionDetails({ start: 5n, end: 5n }, { start: 5n, end: 5n }, { start: 5n, end: 5n }, { start: 5n, end: 5n }, { addresses: [alice], whitelist: true }, { addresses: [alice], whitelist: true }, { addresses: [alice], whitelist: true });
85
+ const valueToCheck = createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 10n }, { start: 1n, end: 10n }, { start: 1n, end: 10n }, { addresses: [alice, bob, charlie], whitelist: true }, { addresses: [alice, bob, charlie], whitelist: true }, { addresses: [alice, bob, charlie], whitelist: true });
86
+ const [remaining, removed] = universalRemoveOverlaps(handled, valueToCheck);
87
+ expect(remaining.length).toBeGreaterThan(0);
88
+ expect(removed.length).toBeGreaterThan(0);
89
+ });
90
+ });
91
+ describe('universalRemoveOverlapFromValues', () => {
92
+ test('should remove overlap from array of values', () => {
93
+ const handled = createPermissionDetails({ start: 5n, end: 5n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
94
+ const valuesToCheck = [
95
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }),
96
+ createPermissionDetails({ start: 20n, end: 30n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
97
+ ];
98
+ const [newValues, removed] = universalRemoveOverlapFromValues(handled, valuesToCheck);
99
+ expect(newValues.length).toBeGreaterThan(1);
100
+ expect(removed.length).toBe(1);
101
+ const hasSecondValue = newValues.some((v) => v.tokenId.start === 20n && v.tokenId.end === 30n);
102
+ expect(hasSecondValue).toBe(true);
103
+ });
104
+ });
105
+ describe('getOverlapsAndNonOverlaps', () => {
106
+ test('should correctly identify overlaps between two permission sets', () => {
107
+ const firstDetails = [
108
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
109
+ ];
110
+ const secondDetails = [
111
+ createPermissionDetails({ start: 5n, end: 15n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
112
+ ];
113
+ const [allOverlaps, inOldButNotNew, inNewButNotOld] = getOverlapsAndNonOverlaps(firstDetails, secondDetails);
114
+ expect(allOverlaps.length).toBe(1);
115
+ expect(allOverlaps[0].overlap.tokenId.start).toBe(5n);
116
+ expect(allOverlaps[0].overlap.tokenId.end).toBe(10n);
117
+ expect(inOldButNotNew.length).toBe(1);
118
+ expect(inOldButNotNew[0].tokenId.start).toBe(1n);
119
+ expect(inOldButNotNew[0].tokenId.end).toBe(4n);
120
+ expect(inNewButNotOld.length).toBe(1);
121
+ expect(inNewButNotOld[0].tokenId.start).toBe(11n);
122
+ expect(inNewButNotOld[0].tokenId.end).toBe(15n);
123
+ });
124
+ test('should handle identical permission sets', () => {
125
+ const details = [
126
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
127
+ ];
128
+ const [allOverlaps, inOldButNotNew, inNewButNotOld] = getOverlapsAndNonOverlaps(details, details);
129
+ expect(allOverlaps.length).toBe(1);
130
+ expect(inOldButNotNew.length).toBe(0);
131
+ expect(inNewButNotOld.length).toBe(0);
132
+ });
133
+ test('should handle disjoint permission sets', () => {
134
+ const firstDetails = [
135
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
136
+ ];
137
+ const secondDetails = [
138
+ createPermissionDetails({ start: 20n, end: 30n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
139
+ ];
140
+ const [allOverlaps, inOldButNotNew, inNewButNotOld] = getOverlapsAndNonOverlaps(firstDetails, secondDetails);
141
+ expect(allOverlaps.length).toBe(0);
142
+ expect(inOldButNotNew.length).toBe(1);
143
+ expect(inNewButNotOld.length).toBe(1);
144
+ });
145
+ test('should handle empty input arrays', () => {
146
+ const [allOverlaps1, inOldButNotNew1, inNewButNotOld1] = getOverlapsAndNonOverlaps([], []);
147
+ expect(allOverlaps1.length).toBe(0);
148
+ expect(inOldButNotNew1.length).toBe(0);
149
+ expect(inNewButNotOld1.length).toBe(0);
150
+ const nonEmpty = [
151
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
152
+ ];
153
+ const [allOverlaps2, inOldButNotNew2, inNewButNotOld2] = getOverlapsAndNonOverlaps(nonEmpty, []);
154
+ expect(allOverlaps2.length).toBe(0);
155
+ expect(inOldButNotNew2.length).toBe(1);
156
+ expect(inNewButNotOld2.length).toBe(0);
157
+ });
158
+ });
159
+ describe('GetUintRangesWithOptions', () => {
160
+ test('should return original ranges when uses is true', () => {
161
+ const ranges = UintRangeArray.From([
162
+ { start: 1n, end: 10n },
163
+ { start: 20n, end: 30n }
164
+ ]);
165
+ const result = GetUintRangesWithOptions(ranges, true);
166
+ expect(result.length).toBe(2);
167
+ expect(result[0].start).toBe(1n);
168
+ expect(result[0].end).toBe(10n);
169
+ expect(result[1].start).toBe(20n);
170
+ expect(result[1].end).toBe(30n);
171
+ });
172
+ test('should return dummy range when uses is false', () => {
173
+ const ranges = UintRangeArray.From([
174
+ { start: 1n, end: 10n },
175
+ { start: 20n, end: 30n }
176
+ ]);
177
+ const result = GetUintRangesWithOptions(ranges, false);
178
+ expect(result.length).toBe(1);
179
+ expect(result[0].start).toBe(1n);
180
+ expect(result[0].end).toBe(1n);
181
+ });
182
+ });
183
+ describe('GetListWithOptions', () => {
184
+ test('should return original list when uses is true', () => {
185
+ const list = new AddressList({
186
+ listId: 'test',
187
+ addresses: [alice, bob],
188
+ whitelist: true,
189
+ uri: '',
190
+ customData: ''
191
+ });
192
+ const result = GetListWithOptions(list, true);
193
+ expect(result.addresses).toEqual([alice, bob]);
194
+ expect(result.whitelist).toBe(true);
195
+ });
196
+ test('should return empty non-whitelist when uses is false', () => {
197
+ const list = new AddressList({
198
+ listId: 'test',
199
+ addresses: [alice, bob],
200
+ whitelist: true,
201
+ uri: '',
202
+ customData: ''
203
+ });
204
+ const result = GetListWithOptions(list, false);
205
+ expect(result.addresses).toEqual([]);
206
+ expect(result.whitelist).toBe(false);
207
+ });
208
+ });
209
+ describe('GetFirstMatchOnly', () => {
210
+ test('should return first match for each unique combination', () => {
211
+ const permission1 = {
212
+ tokenIds: UintRangeArray.From([{ start: 1n, end: 10n }]),
213
+ timelineTimes: UintRangeArray.From([{ start: 1n, end: 1n }]),
214
+ transferTimes: UintRangeArray.From([{ start: 1n, end: 1n }]),
215
+ ownershipTimes: UintRangeArray.From([{ start: 1n, end: 1n }]),
216
+ toList: AddressList.AllAddresses(),
217
+ fromList: AddressList.AllAddresses(),
218
+ initiatedByList: AddressList.AllAddresses(),
219
+ approvalIdList: new AddressList({ listId: '', addresses: [], whitelist: false, uri: '', customData: '' }),
220
+ permanentlyPermittedTimes: UintRangeArray.From([{ start: 1n, end: 100n }]),
221
+ permanentlyForbiddenTimes: UintRangeArray.From([]),
222
+ usesTokenIds: true,
223
+ usesTimelineTimes: false,
224
+ usesTransferTimes: false,
225
+ usesToList: false,
226
+ usesFromList: false,
227
+ usesInitiatedByList: false,
228
+ usesOwnershipTimes: false,
229
+ usesApprovalIdList: false,
230
+ arbitraryValue: { id: 'first' }
231
+ };
232
+ const permission2 = {
233
+ ...permission1,
234
+ tokenIds: UintRangeArray.From([{ start: 5n, end: 15n }]),
235
+ permanentlyPermittedTimes: UintRangeArray.From([{ start: 200n, end: 300n }]),
236
+ arbitraryValue: { id: 'second' }
237
+ };
238
+ const result = GetFirstMatchOnly([permission1, permission2]);
239
+ expect(result.length).toBe(2);
240
+ const first = result.find((r) => r.tokenId.start === 1n && r.tokenId.end === 10n);
241
+ expect(first).toBeDefined();
242
+ expect(first.permanentlyPermittedTimes[0].start).toBe(1n);
243
+ expect(first.permanentlyPermittedTimes[0].end).toBe(100n);
244
+ const second = result.find((r) => r.tokenId.start === 11n && r.tokenId.end === 15n);
245
+ expect(second).toBeDefined();
246
+ expect(second.permanentlyPermittedTimes[0].start).toBe(200n);
247
+ expect(second.permanentlyPermittedTimes[0].end).toBe(300n);
248
+ });
249
+ test('should handle empty permissions array', () => {
250
+ const result = GetFirstMatchOnly([]);
251
+ expect(result.length).toBe(0);
252
+ });
253
+ test('should work with handleAllPossibleCombinations flag', () => {
254
+ const permission = {
255
+ tokenIds: UintRangeArray.From([{ start: 1n, end: 10n }]),
256
+ timelineTimes: UintRangeArray.From([{ start: 1n, end: 1n }]),
257
+ transferTimes: UintRangeArray.From([{ start: 1n, end: 1n }]),
258
+ ownershipTimes: UintRangeArray.From([{ start: 1n, end: 1n }]),
259
+ toList: AddressList.AllAddresses(),
260
+ fromList: AddressList.AllAddresses(),
261
+ initiatedByList: AddressList.AllAddresses(),
262
+ approvalIdList: new AddressList({ listId: '', addresses: [], whitelist: false, uri: '', customData: '' }),
263
+ permanentlyPermittedTimes: UintRangeArray.From([{ start: 1n, end: 100n }]),
264
+ permanentlyForbiddenTimes: UintRangeArray.From([]),
265
+ usesTokenIds: true,
266
+ usesTimelineTimes: false,
267
+ usesTransferTimes: false,
268
+ usesToList: false,
269
+ usesFromList: false,
270
+ usesInitiatedByList: false,
271
+ usesOwnershipTimes: false,
272
+ usesApprovalIdList: false,
273
+ arbitraryValue: {}
274
+ };
275
+ const result = GetFirstMatchOnly([permission], true, ActionPermissionUsedFlags);
276
+ expect(result.length).toBeGreaterThanOrEqual(1);
277
+ });
278
+ test('should throw when handleAllPossibleCombinations is true but usesFlags is undefined', () => {
279
+ expect(() => {
280
+ GetFirstMatchOnly([], true, undefined);
281
+ }).toThrow('handleAllPossibleCombinations is true but usesFlags is null');
282
+ });
283
+ });
284
+ describe('MergeUniversalPermissionDetails', () => {
285
+ test('should convert permissions to merged format', () => {
286
+ const permissions = [
287
+ createPermissionDetails({ start: 1n, end: 5n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }),
288
+ createPermissionDetails({ start: 6n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
289
+ ];
290
+ const result = MergeUniversalPermissionDetails(permissions);
291
+ expect(result.length).toBeGreaterThanOrEqual(1);
292
+ expect(Array.isArray(result[0].tokenIds)).toBe(true);
293
+ expect(result[0].tokenIds.length).toBeGreaterThanOrEqual(1);
294
+ });
295
+ test('should not merge when doNotMerge is true', () => {
296
+ const permissions = [
297
+ createPermissionDetails({ start: 1n, end: 5n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }),
298
+ createPermissionDetails({ start: 6n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
299
+ ];
300
+ const result = MergeUniversalPermissionDetails(permissions, true);
301
+ expect(result.length).toBe(2);
302
+ });
303
+ test('should handle empty input', () => {
304
+ const result = MergeUniversalPermissionDetails([]);
305
+ expect(result.length).toBe(0);
306
+ });
307
+ test('should not merge permissions with different properties', () => {
308
+ const permissions = [
309
+ createPermissionDetails({ start: 1n, end: 5n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [alice], whitelist: true }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }),
310
+ createPermissionDetails({ start: 6n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [bob], whitelist: true }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
311
+ ];
312
+ const result = MergeUniversalPermissionDetails(permissions);
313
+ expect(result.length).toBe(2);
314
+ });
315
+ });
316
+ describe('ValidateUniversalPermissionUpdate', () => {
317
+ test('should return null for valid update (adding new permissions)', () => {
318
+ const oldPermissions = [
319
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
320
+ ];
321
+ oldPermissions[0].permanentlyPermittedTimes = UintRangeArray.From([{ start: 1n, end: 100n }]);
322
+ const newPermissions = [
323
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
324
+ ];
325
+ newPermissions[0].permanentlyPermittedTimes = UintRangeArray.From([
326
+ { start: 1n, end: 100n },
327
+ { start: 200n, end: 300n }
328
+ ]);
329
+ const error = ValidateUniversalPermissionUpdate(oldPermissions, newPermissions);
330
+ expect(error).toBeNull();
331
+ });
332
+ test('should return error when removing old permissions', () => {
333
+ const oldPermissions = [
334
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
335
+ ];
336
+ const newPermissions = [
337
+ createPermissionDetails({ start: 1n, end: 5n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
338
+ ];
339
+ const error = ValidateUniversalPermissionUpdate(oldPermissions, newPermissions);
340
+ expect(error).not.toBeNull();
341
+ expect(error.message).toContain('found in old permissions but not in new permissions');
342
+ });
343
+ test('should return error when revoking previously permitted times', () => {
344
+ const oldPermissions = [
345
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
346
+ ];
347
+ oldPermissions[0].permanentlyPermittedTimes = UintRangeArray.From([{ start: 1n, end: 100n }]);
348
+ const newPermissions = [
349
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
350
+ ];
351
+ newPermissions[0].permanentlyPermittedTimes = UintRangeArray.From([{ start: 1n, end: 49n }]);
352
+ const error = ValidateUniversalPermissionUpdate(oldPermissions, newPermissions);
353
+ expect(error).not.toBeNull();
354
+ expect(error.message).toContain('previously explicitly allowed');
355
+ });
356
+ test('should return null for identical permissions', () => {
357
+ const permissions = [
358
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
359
+ ];
360
+ permissions[0].permanentlyPermittedTimes = UintRangeArray.From([{ start: 1n, end: 100n }]);
361
+ const error = ValidateUniversalPermissionUpdate(permissions, permissions);
362
+ expect(error).toBeNull();
363
+ });
364
+ test('should handle empty permission arrays', () => {
365
+ const error = ValidateUniversalPermissionUpdate([], []);
366
+ expect(error).toBeNull();
367
+ });
368
+ });
369
+ describe('UsedFlags constants', () => {
370
+ test('ActionPermissionUsedFlags should have all flags false', () => {
371
+ expect(ActionPermissionUsedFlags.usesTokenIds).toBe(false);
372
+ expect(ActionPermissionUsedFlags.usesTimelineTimes).toBe(false);
373
+ expect(ActionPermissionUsedFlags.usesTransferTimes).toBe(false);
374
+ expect(ActionPermissionUsedFlags.usesToList).toBe(false);
375
+ expect(ActionPermissionUsedFlags.usesFromList).toBe(false);
376
+ expect(ActionPermissionUsedFlags.usesInitiatedByList).toBe(false);
377
+ expect(ActionPermissionUsedFlags.usesOwnershipTimes).toBe(false);
378
+ expect(ActionPermissionUsedFlags.usesApprovalIdList).toBe(false);
379
+ });
380
+ test('TimedUpdatePermissionUsedFlags should only have usesTimelineTimes true', () => {
381
+ expect(TimedUpdatePermissionUsedFlags.usesTokenIds).toBe(false);
382
+ expect(TimedUpdatePermissionUsedFlags.usesTimelineTimes).toBe(true);
383
+ expect(TimedUpdatePermissionUsedFlags.usesTransferTimes).toBe(false);
384
+ });
385
+ test('ApprovalPermissionUsedFlags should have approval-related flags true', () => {
386
+ expect(ApprovalPermissionUsedFlags.usesTokenIds).toBe(true);
387
+ expect(ApprovalPermissionUsedFlags.usesTransferTimes).toBe(true);
388
+ expect(ApprovalPermissionUsedFlags.usesToList).toBe(true);
389
+ expect(ApprovalPermissionUsedFlags.usesFromList).toBe(true);
390
+ expect(ApprovalPermissionUsedFlags.usesInitiatedByList).toBe(true);
391
+ expect(ApprovalPermissionUsedFlags.usesOwnershipTimes).toBe(true);
392
+ expect(ApprovalPermissionUsedFlags.usesApprovalIdList).toBe(true);
393
+ });
394
+ });
395
+ });
396
+ //# sourceMappingURL=overlaps.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlaps.spec.js","sourceRoot":"","sources":["../../../src/core/overlaps.spec.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,+BAA+B,EAC/B,8BAA8B,EAG9B,iCAAiC,EACjC,yBAAyB,EACzB,gCAAgC,EAChC,uBAAuB,EACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAG5D,MAAM,KAAK,GAAG,2CAA2C,CAAC;AAC1D,MAAM,GAAG,GAAG,2CAA2C,CAAC;AACxD,MAAM,OAAO,GAAG,2CAA2C,CAAC;AAG5D,SAAS,uBAAuB,CAC9B,YAA4C,EAC5C,iBAAiD,EACjD,iBAAiD,EACjD,kBAAkD,EAClD,MAAmD,EACnD,QAAqD,EACrD,eAA4D,EAC5D,iBAA8D,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;IAEjG,OAAO;QACL,OAAO,EAAE,IAAI,SAAS,CAAS,YAAY,CAAC;QAC5C,YAAY,EAAE,IAAI,SAAS,CAAS,iBAAiB,CAAC;QACtD,YAAY,EAAE,IAAI,SAAS,CAAS,iBAAiB,CAAC;QACtD,aAAa,EAAE,IAAI,SAAS,CAAS,kBAAkB,CAAC;QACxD,MAAM,EAAE,IAAI,WAAW,CAAC;YACtB,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,GAAG,EAAE,EAAE;YACP,UAAU,EAAE,EAAE;SACf,CAAC;QACF,QAAQ,EAAE,IAAI,WAAW,CAAC;YACxB,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,GAAG,EAAE,EAAE;YACP,UAAU,EAAE,EAAE;SACf,CAAC;QACF,eAAe,EAAE,IAAI,WAAW,CAAC;YAC/B,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,GAAG,EAAE,EAAE;YACP,UAAU,EAAE,EAAE;SACf,CAAC;QACF,cAAc,EAAE,IAAI,WAAW,CAAC;YAC9B,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,cAAc,CAAC,SAAS;YACnC,SAAS,EAAE,cAAc,CAAC,SAAS;YACnC,GAAG,EAAE,EAAE;YACP,UAAU,EAAE,EAAE;SACf,CAAC;QACF,yBAAyB,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,yBAAyB,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,cAAc,EAAE,EAAE;KACnB,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAGjE,MAAM,OAAO,GAAG,uBAAuB,CACrC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EACrD,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EACrD,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CACtD,CAAC;YAEF,MAAM,YAAY,GAAG,uBAAuB,CAC1C,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EACrD,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EACrD,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CACtD,CAAC;YAEF,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAG5E,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEjC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAG/B,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAG3C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAGhD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACtD,MAAM,OAAO,GAAG,uBAAuB,CACrC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1B,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC,CAAC;YAEF,MAAM,YAAY,GAAG,uBAAuB,CAC1C,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC,CAAC;YAEF,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAG5E,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAC7E,MAAM,OAAO,GAAG,uBAAuB,CACrC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EACxB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EACxB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EACxB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EACxB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC,CAAC;YAEF,MAAM,YAAY,GAAG,uBAAuB,CAC1C,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACxB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACxB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACxB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACxB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC,CAAC;YAEF,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAG5E,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;YAGtD,MAAM,OAAO,GAAG,uBAAuB,CACrC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EACvC,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EACvC,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CACxC,CAAC;YAEF,MAAM,YAAY,GAAG,uBAAuB,CAC1C,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EACrD,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EACrD,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CACtD,CAAC;YAEF,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAG5E,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACtD,MAAM,OAAO,GAAG,uBAAuB,CACrC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC,CAAC;YAEF,MAAM,aAAa,GAAG;gBACpB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;gBACD,uBAAuB,CACrB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACxB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,gCAAgC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAGtF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAG/B,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAC/F,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;YAC1E,MAAM,YAAY,GAAG;gBACnB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,aAAa,GAAG;gBACpB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,GAAG,yBAAyB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YAG7G,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtD,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAGrD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAG/C,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACnD,MAAM,OAAO,GAAG;gBACd,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,GAAG,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAGlG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAClD,MAAM,YAAY,GAAG;gBACnB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,aAAa,GAAG;gBACpB,uBAAuB,CACrB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACxB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,GAAG,yBAAyB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YAG7G,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,YAAY,EAAE,eAAe,EAAE,eAAe,CAAC,GAAG,yBAAyB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3F,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEvC,MAAM,QAAQ,GAAG;gBACf,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,CAAC,YAAY,EAAE,eAAe,EAAE,eAAe,CAAC,GAAG,yBAAyB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACjG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;YAC3D,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAS;gBACzC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;gBACvB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;aACzB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACxD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAS;gBACzC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;gBACvB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;aACzB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAEvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACzD,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC;gBAC3B,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC;gBACvB,SAAS,EAAE,IAAI;gBACf,GAAG,EAAE,EAAE;gBACP,UAAU,EAAE,EAAE;aACf,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAChE,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC;gBAC3B,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC;gBACvB,SAAS,EAAE,IAAI;gBACf,GAAG,EAAE,EAAE;gBACP,UAAU,EAAE,EAAE;aACf,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAE/C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;YACjE,MAAM,WAAW,GAAwB;gBACvC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;gBACxD,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5D,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5D,cAAc,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7D,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE;gBAClC,QAAQ,EAAE,WAAW,CAAC,YAAY,EAAE;gBACpC,eAAe,EAAE,WAAW,CAAC,YAAY,EAAE;gBAC3C,cAAc,EAAE,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;gBACzG,yBAAyB,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1E,yBAAyB,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,YAAY,EAAE,IAAI;gBAClB,iBAAiB,EAAE,KAAK;gBACxB,iBAAiB,EAAE,KAAK;gBACxB,UAAU,EAAE,KAAK;gBACjB,YAAY,EAAE,KAAK;gBACnB,mBAAmB,EAAE,KAAK;gBAC1B,kBAAkB,EAAE,KAAK;gBACzB,kBAAkB,EAAE,KAAK;gBACzB,cAAc,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;aAChC,CAAC;YAEF,MAAM,WAAW,GAAwB;gBACvC,GAAG,WAAW;gBACd,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;gBACxD,yBAAyB,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5E,cAAc,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;aACjC,CAAC;YAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YAI7D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAG9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAClF,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAG3D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACpF,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;YACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC/D,MAAM,UAAU,GAAwB;gBACtC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;gBACxD,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5D,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5D,cAAc,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7D,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE;gBAClC,QAAQ,EAAE,WAAW,CAAC,YAAY,EAAE;gBACpC,eAAe,EAAE,WAAW,CAAC,YAAY,EAAE;gBAC3C,cAAc,EAAE,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;gBACzG,yBAAyB,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1E,yBAAyB,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,YAAY,EAAE,IAAI;gBAClB,iBAAiB,EAAE,KAAK;gBACxB,iBAAiB,EAAE,KAAK;gBACxB,UAAU,EAAE,KAAK;gBACjB,YAAY,EAAE,KAAK;gBACnB,mBAAmB,EAAE,KAAK;gBAC1B,kBAAkB,EAAE,KAAK;gBACzB,kBAAkB,EAAE,KAAK;gBACzB,cAAc,EAAE,EAAE;aACnB,CAAC;YAKF,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,CAAC;YAIhF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oFAAoF,EAAE,GAAG,EAAE;YAC9F,MAAM,CAAC,GAAG,EAAE;gBACV,iBAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC/C,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;YAGvD,MAAM,WAAW,GAAG;gBAClB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;gBACD,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,+BAA+B,CAAC,WAAW,CAAC,CAAC;YAG5D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAEhD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;YACpD,MAAM,WAAW,GAAG;gBAClB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;gBACD,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,+BAA+B,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAGlE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,+BAA+B,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAClE,MAAM,WAAW,GAAG;gBAClB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EACvC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;gBACD,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EACrC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,+BAA+B,CAAC,WAAW,CAAC,CAAC;YAG5D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACjD,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACxE,MAAM,cAAc,GAAG;gBACrB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YACF,cAAc,CAAC,CAAC,CAAC,CAAC,yBAAyB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAE9F,MAAM,cAAc,GAAG;gBACrB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,cAAc,CAAC,CAAC,CAAC,CAAC,yBAAyB,GAAG,cAAc,CAAC,IAAI,CAAC;gBAChE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;gBACxB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;aAC3B,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,iCAAiC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;YAChF,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC7D,MAAM,cAAc,GAAG;gBACrB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,MAAM,KAAK,GAAG,iCAAiC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;YAChF,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,KAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qDAAqD,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACxE,MAAM,cAAc,GAAG;gBACrB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YACF,cAAc,CAAC,CAAC,CAAC,CAAC,yBAAyB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAE9F,MAAM,cAAc,GAAG;gBACrB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YAEF,cAAc,CAAC,CAAC,CAAC,CAAC,yBAAyB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAE7F,MAAM,KAAK,GAAG,iCAAiC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;YAChF,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,KAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACxD,MAAM,WAAW,GAAG;gBAClB,uBAAuB,CACrB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EACvB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EACtB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACnC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CACpC;aACF,CAAC;YACF,WAAW,CAAC,CAAC,CAAC,CAAC,yBAAyB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAE3F,MAAM,KAAK,GAAG,iCAAiC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAC1E,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;YACjD,MAAM,KAAK,GAAG,iCAAiC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;YACjE,MAAM,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3D,MAAM,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,MAAM,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3D,MAAM,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClE,MAAM,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE;YAClF,MAAM,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,MAAM,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpE,MAAM,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC/E,MAAM,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,2BAA2B,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,2BAA2B,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,MAAM,CAAC,2BAA2B,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClE,MAAM,CAAC,2BAA2B,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}