@optimystic/db-p2p 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +52 -0
- package/dist/index.min.js.map +7 -0
- package/dist/src/cluster/client.d.ts +12 -0
- package/dist/src/cluster/client.d.ts.map +1 -0
- package/dist/src/cluster/client.js +65 -0
- package/dist/src/cluster/client.js.map +1 -0
- package/dist/src/cluster/cluster-repo.d.ts +79 -0
- package/dist/src/cluster/cluster-repo.d.ts.map +1 -0
- package/dist/src/cluster/cluster-repo.js +613 -0
- package/dist/src/cluster/cluster-repo.js.map +1 -0
- package/dist/src/cluster/partition-detector.d.ts +59 -0
- package/dist/src/cluster/partition-detector.d.ts.map +1 -0
- package/dist/src/cluster/partition-detector.js +129 -0
- package/dist/src/cluster/partition-detector.js.map +1 -0
- package/dist/src/cluster/service.d.ts +49 -0
- package/dist/src/cluster/service.d.ts.map +1 -0
- package/dist/src/cluster/service.js +107 -0
- package/dist/src/cluster/service.js.map +1 -0
- package/dist/src/index.d.ts +29 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +29 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/it-utility.d.ts +4 -0
- package/dist/src/it-utility.d.ts.map +1 -0
- package/dist/src/it-utility.js +32 -0
- package/dist/src/it-utility.js.map +1 -0
- package/dist/src/libp2p-key-network.d.ts +59 -0
- package/dist/src/libp2p-key-network.d.ts.map +1 -0
- package/dist/src/libp2p-key-network.js +278 -0
- package/dist/src/libp2p-key-network.js.map +1 -0
- package/dist/src/libp2p-node.d.ts +28 -0
- package/dist/src/libp2p-node.d.ts.map +1 -0
- package/dist/src/libp2p-node.js +270 -0
- package/dist/src/libp2p-node.js.map +1 -0
- package/dist/src/logger.d.ts +3 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +6 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/network/get-network-manager.d.ts +4 -0
- package/dist/src/network/get-network-manager.d.ts.map +1 -0
- package/dist/src/network/get-network-manager.js +17 -0
- package/dist/src/network/get-network-manager.js.map +1 -0
- package/dist/src/network/network-manager-service.d.ts +82 -0
- package/dist/src/network/network-manager-service.d.ts.map +1 -0
- package/dist/src/network/network-manager-service.js +283 -0
- package/dist/src/network/network-manager-service.js.map +1 -0
- package/dist/src/peer-utils.d.ts +2 -0
- package/dist/src/peer-utils.d.ts.map +1 -0
- package/dist/src/peer-utils.js +28 -0
- package/dist/src/peer-utils.js.map +1 -0
- package/dist/src/protocol-client.d.ts +12 -0
- package/dist/src/protocol-client.d.ts.map +1 -0
- package/dist/src/protocol-client.js +34 -0
- package/dist/src/protocol-client.js.map +1 -0
- package/dist/src/repo/client.d.ts +17 -0
- package/dist/src/repo/client.d.ts.map +1 -0
- package/dist/src/repo/client.js +82 -0
- package/dist/src/repo/client.js.map +1 -0
- package/dist/src/repo/cluster-coordinator.d.ts +59 -0
- package/dist/src/repo/cluster-coordinator.d.ts.map +1 -0
- package/dist/src/repo/cluster-coordinator.js +539 -0
- package/dist/src/repo/cluster-coordinator.js.map +1 -0
- package/dist/src/repo/coordinator-repo.d.ts +29 -0
- package/dist/src/repo/coordinator-repo.d.ts.map +1 -0
- package/dist/src/repo/coordinator-repo.js +102 -0
- package/dist/src/repo/coordinator-repo.js.map +1 -0
- package/dist/src/repo/redirect.d.ts +14 -0
- package/dist/src/repo/redirect.d.ts.map +1 -0
- package/dist/src/repo/redirect.js +9 -0
- package/dist/src/repo/redirect.js.map +1 -0
- package/dist/src/repo/service.d.ts +52 -0
- package/dist/src/repo/service.d.ts.map +1 -0
- package/dist/src/repo/service.js +181 -0
- package/dist/src/repo/service.js.map +1 -0
- package/dist/src/repo/types.d.ts +7 -0
- package/dist/src/repo/types.d.ts.map +1 -0
- package/dist/src/repo/types.js +2 -0
- package/dist/src/repo/types.js.map +1 -0
- package/dist/src/routing/libp2p-known-peers.d.ts +4 -0
- package/dist/src/routing/libp2p-known-peers.d.ts.map +1 -0
- package/dist/src/routing/libp2p-known-peers.js +19 -0
- package/dist/src/routing/libp2p-known-peers.js.map +1 -0
- package/dist/src/routing/responsibility.d.ts +14 -0
- package/dist/src/routing/responsibility.d.ts.map +1 -0
- package/dist/src/routing/responsibility.js +45 -0
- package/dist/src/routing/responsibility.js.map +1 -0
- package/dist/src/routing/simple-cluster-coordinator.d.ts +23 -0
- package/dist/src/routing/simple-cluster-coordinator.d.ts.map +1 -0
- package/dist/src/routing/simple-cluster-coordinator.js +59 -0
- package/dist/src/routing/simple-cluster-coordinator.js.map +1 -0
- package/dist/src/storage/arachnode-fret-adapter.d.ts +65 -0
- package/dist/src/storage/arachnode-fret-adapter.d.ts.map +1 -0
- package/dist/src/storage/arachnode-fret-adapter.js +93 -0
- package/dist/src/storage/arachnode-fret-adapter.js.map +1 -0
- package/dist/src/storage/block-storage.d.ts +31 -0
- package/dist/src/storage/block-storage.d.ts.map +1 -0
- package/dist/src/storage/block-storage.js +154 -0
- package/dist/src/storage/block-storage.js.map +1 -0
- package/dist/src/storage/file-storage.d.ts +30 -0
- package/dist/src/storage/file-storage.d.ts.map +1 -0
- package/dist/src/storage/file-storage.js +127 -0
- package/dist/src/storage/file-storage.js.map +1 -0
- package/dist/src/storage/helpers.d.ts +3 -0
- package/dist/src/storage/helpers.d.ts.map +1 -0
- package/dist/src/storage/helpers.js +28 -0
- package/dist/src/storage/helpers.js.map +1 -0
- package/dist/src/storage/i-block-storage.d.ts +32 -0
- package/dist/src/storage/i-block-storage.d.ts.map +1 -0
- package/dist/src/storage/i-block-storage.js +2 -0
- package/dist/src/storage/i-block-storage.js.map +1 -0
- package/dist/src/storage/i-raw-storage.d.ts +20 -0
- package/dist/src/storage/i-raw-storage.d.ts.map +1 -0
- package/dist/src/storage/i-raw-storage.js +2 -0
- package/dist/src/storage/i-raw-storage.js.map +1 -0
- package/dist/src/storage/memory-storage.d.ts +27 -0
- package/dist/src/storage/memory-storage.d.ts.map +1 -0
- package/dist/src/storage/memory-storage.js +87 -0
- package/dist/src/storage/memory-storage.js.map +1 -0
- package/dist/src/storage/restoration-coordinator-v2.d.ts +63 -0
- package/dist/src/storage/restoration-coordinator-v2.d.ts.map +1 -0
- package/dist/src/storage/restoration-coordinator-v2.js +157 -0
- package/dist/src/storage/restoration-coordinator-v2.js.map +1 -0
- package/dist/src/storage/ring-selector.d.ts +56 -0
- package/dist/src/storage/ring-selector.d.ts.map +1 -0
- package/dist/src/storage/ring-selector.js +118 -0
- package/dist/src/storage/ring-selector.js.map +1 -0
- package/dist/src/storage/storage-monitor.d.ts +23 -0
- package/dist/src/storage/storage-monitor.d.ts.map +1 -0
- package/dist/src/storage/storage-monitor.js +40 -0
- package/dist/src/storage/storage-monitor.js.map +1 -0
- package/dist/src/storage/storage-repo.d.ts +17 -0
- package/dist/src/storage/storage-repo.d.ts.map +1 -0
- package/dist/src/storage/storage-repo.js +267 -0
- package/dist/src/storage/storage-repo.js.map +1 -0
- package/dist/src/storage/struct.d.ts +29 -0
- package/dist/src/storage/struct.d.ts.map +1 -0
- package/dist/src/storage/struct.js +2 -0
- package/dist/src/storage/struct.js.map +1 -0
- package/dist/src/sync/client.d.ts +27 -0
- package/dist/src/sync/client.d.ts.map +1 -0
- package/dist/src/sync/client.js +32 -0
- package/dist/src/sync/client.js.map +1 -0
- package/dist/src/sync/protocol.d.ts +58 -0
- package/dist/src/sync/protocol.d.ts.map +1 -0
- package/dist/src/sync/protocol.js +12 -0
- package/dist/src/sync/protocol.js.map +1 -0
- package/dist/src/sync/service.d.ts +62 -0
- package/dist/src/sync/service.d.ts.map +1 -0
- package/dist/src/sync/service.js +168 -0
- package/dist/src/sync/service.js.map +1 -0
- package/package.json +73 -0
- package/readme.md +497 -0
- package/src/cluster/client.ts +63 -0
- package/src/cluster/cluster-repo.ts +711 -0
- package/src/cluster/partition-detector.ts +158 -0
- package/src/cluster/service.ts +156 -0
- package/src/index.ts +30 -0
- package/src/it-utility.ts +36 -0
- package/src/libp2p-key-network.ts +334 -0
- package/src/libp2p-node.ts +335 -0
- package/src/logger.ts +9 -0
- package/src/network/get-network-manager.ts +17 -0
- package/src/network/network-manager-service.ts +334 -0
- package/src/peer-utils.ts +24 -0
- package/src/protocol-client.ts +54 -0
- package/src/repo/client.ts +112 -0
- package/src/repo/cluster-coordinator.ts +592 -0
- package/src/repo/coordinator-repo.ts +137 -0
- package/src/repo/redirect.ts +17 -0
- package/src/repo/service.ts +219 -0
- package/src/repo/types.ts +7 -0
- package/src/routing/libp2p-known-peers.ts +26 -0
- package/src/routing/responsibility.ts +63 -0
- package/src/routing/simple-cluster-coordinator.ts +70 -0
- package/src/storage/arachnode-fret-adapter.ts +128 -0
- package/src/storage/block-storage.ts +182 -0
- package/src/storage/file-storage.ts +163 -0
- package/src/storage/helpers.ts +29 -0
- package/src/storage/i-block-storage.ts +40 -0
- package/src/storage/i-raw-storage.ts +30 -0
- package/src/storage/memory-storage.ts +108 -0
- package/src/storage/restoration-coordinator-v2.ts +191 -0
- package/src/storage/ring-selector.ts +155 -0
- package/src/storage/storage-monitor.ts +59 -0
- package/src/storage/storage-repo.ts +320 -0
- package/src/storage/struct.ts +34 -0
- package/src/sync/client.ts +42 -0
- package/src/sync/protocol.ts +71 -0
- package/src/sync/service.ts +229 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type PeerId } from '@libp2p/interface';
|
|
2
|
+
import type { IPeerNetwork, ICluster, ClusterRecord } from '@optimystic/db-core';
|
|
3
|
+
import { ProtocolClient } from '../protocol-client.js';
|
|
4
|
+
export declare class ClusterClient extends ProtocolClient implements ICluster {
|
|
5
|
+
readonly protocolPrefix?: string | undefined;
|
|
6
|
+
private constructor();
|
|
7
|
+
/** Create a new client instance */
|
|
8
|
+
static create(peerId: PeerId, peerNetwork: IPeerNetwork, protocolPrefix?: string): ClusterClient;
|
|
9
|
+
update(record: ClusterRecord, hop?: number): Promise<ClusterRecord>;
|
|
10
|
+
private recordCoordinatorForRecordIfSupported;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/cluster/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,qBAAa,aAAc,SAAQ,cAAe,YAAW,QAAQ;IACL,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM;IAA/F,OAAO;IAIP,mCAAmC;WACrB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,aAAa;IAIhG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,GAAE,MAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAiC5E,OAAO,CAAC,qCAAqC;CAc9C"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ProtocolClient } from '../protocol-client.js';
|
|
2
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
3
|
+
export class ClusterClient extends ProtocolClient {
|
|
4
|
+
protocolPrefix;
|
|
5
|
+
constructor(peerId, peerNetwork, protocolPrefix) {
|
|
6
|
+
super(peerId, peerNetwork);
|
|
7
|
+
this.protocolPrefix = protocolPrefix;
|
|
8
|
+
}
|
|
9
|
+
/** Create a new client instance */
|
|
10
|
+
static create(peerId, peerNetwork, protocolPrefix) {
|
|
11
|
+
return new ClusterClient(peerId, peerNetwork, protocolPrefix);
|
|
12
|
+
}
|
|
13
|
+
async update(record, hop = 0) {
|
|
14
|
+
const message = {
|
|
15
|
+
operation: 'update',
|
|
16
|
+
record
|
|
17
|
+
};
|
|
18
|
+
const preferred = (this.protocolPrefix ?? '/db-p2p') + '/cluster/1.0.0';
|
|
19
|
+
let response;
|
|
20
|
+
try {
|
|
21
|
+
response = await this.processMessage(message, preferred);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
if (preferred !== '/db-p2p/cluster/1.0.0') {
|
|
25
|
+
response = await this.processMessage(message, '/db-p2p/cluster/1.0.0');
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (response?.redirect?.peers?.length) {
|
|
32
|
+
if (hop >= 2) {
|
|
33
|
+
throw new Error('Redirect loop detected in ClusterClient (max hops reached)');
|
|
34
|
+
}
|
|
35
|
+
const currentIdStr = this.peerId.toString();
|
|
36
|
+
const next = response.redirect.peers.find((p) => p.id !== currentIdStr) ?? response.redirect.peers[0];
|
|
37
|
+
const nextId = peerIdFromString(next.id);
|
|
38
|
+
if (next.id === currentIdStr) {
|
|
39
|
+
throw new Error('Redirect loop detected in ClusterClient (same peer)');
|
|
40
|
+
}
|
|
41
|
+
this.recordCoordinatorForRecordIfSupported(record, nextId);
|
|
42
|
+
const nextClient = ClusterClient.create(nextId, this.peerNetwork, this.protocolPrefix);
|
|
43
|
+
return await nextClient.update(record, hop + 1);
|
|
44
|
+
}
|
|
45
|
+
return response;
|
|
46
|
+
}
|
|
47
|
+
recordCoordinatorForRecordIfSupported(record, peerId) {
|
|
48
|
+
const rmsg = record?.message;
|
|
49
|
+
let tailId;
|
|
50
|
+
if (rmsg?.commit?.tailId)
|
|
51
|
+
tailId = rmsg.commit.tailId;
|
|
52
|
+
else if (rmsg?.pend?.transforms) {
|
|
53
|
+
const keys = Object.keys(rmsg.pend.transforms);
|
|
54
|
+
if (keys.length > 0)
|
|
55
|
+
tailId = keys[0];
|
|
56
|
+
}
|
|
57
|
+
if (tailId) {
|
|
58
|
+
const kbytes = new TextEncoder().encode(tailId);
|
|
59
|
+
const pn = this.peerNetwork;
|
|
60
|
+
if (typeof pn?.recordCoordinator === 'function')
|
|
61
|
+
pn.recordCoordinator(kbytes, peerId);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/cluster/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { IRepo, ClusterRecord, ITransactionValidator } from "@optimystic/db-core";
|
|
2
|
+
import type { ICluster } from "@optimystic/db-core";
|
|
3
|
+
import type { IPeerNetwork } from "@optimystic/db-core";
|
|
4
|
+
import type { PeerId } from "@libp2p/interface";
|
|
5
|
+
import type { PartitionDetector } from "./partition-detector.js";
|
|
6
|
+
import type { FretService } from "p2p-fret";
|
|
7
|
+
interface ClusterMemberComponents {
|
|
8
|
+
storageRepo: IRepo;
|
|
9
|
+
peerNetwork: IPeerNetwork;
|
|
10
|
+
peerId: PeerId;
|
|
11
|
+
protocolPrefix?: string;
|
|
12
|
+
partitionDetector?: PartitionDetector;
|
|
13
|
+
fretService?: FretService;
|
|
14
|
+
validator?: ITransactionValidator;
|
|
15
|
+
}
|
|
16
|
+
export declare function clusterMember(components: ClusterMemberComponents): ClusterMember;
|
|
17
|
+
/**
|
|
18
|
+
* Handles cluster-side operations, managing promises and commits for cluster updates
|
|
19
|
+
* and coordinating with the local storage repo.
|
|
20
|
+
*/
|
|
21
|
+
export declare class ClusterMember implements ICluster {
|
|
22
|
+
private readonly storageRepo;
|
|
23
|
+
private readonly peerNetwork;
|
|
24
|
+
private readonly peerId;
|
|
25
|
+
private readonly protocolPrefix?;
|
|
26
|
+
private readonly partitionDetector?;
|
|
27
|
+
private readonly fretService?;
|
|
28
|
+
private readonly validator?;
|
|
29
|
+
private activeTransactions;
|
|
30
|
+
private cleanupQueue;
|
|
31
|
+
private pendingUpdates;
|
|
32
|
+
constructor(storageRepo: IRepo, peerNetwork: IPeerNetwork, peerId: PeerId, protocolPrefix?: string | undefined, partitionDetector?: PartitionDetector | undefined, fretService?: FretService | undefined, validator?: ITransactionValidator | undefined);
|
|
33
|
+
/**
|
|
34
|
+
* Handles an incoming cluster update, managing the two-phase commit process
|
|
35
|
+
* and coordinating with the local storage repo
|
|
36
|
+
*/
|
|
37
|
+
update(record: ClusterRecord): Promise<ClusterRecord>;
|
|
38
|
+
private processUpdate;
|
|
39
|
+
/**
|
|
40
|
+
* Merges two records, validating that non-signature fields match
|
|
41
|
+
*/
|
|
42
|
+
private mergeRecords;
|
|
43
|
+
private validateRecord;
|
|
44
|
+
private computeMessageHash;
|
|
45
|
+
private validateSignatures;
|
|
46
|
+
private computePromiseHash;
|
|
47
|
+
private computeCommitHash;
|
|
48
|
+
private verifySignature;
|
|
49
|
+
private getTransactionPhase;
|
|
50
|
+
private hasMajority;
|
|
51
|
+
private handlePromiseNeeded;
|
|
52
|
+
/**
|
|
53
|
+
* Validates pend operations in a cluster record using the transaction validator.
|
|
54
|
+
* Returns success if no validator is configured (backwards compatibility).
|
|
55
|
+
*/
|
|
56
|
+
private validatePendOperations;
|
|
57
|
+
private handleCommitNeeded;
|
|
58
|
+
private handleConsensus;
|
|
59
|
+
private handleRejection;
|
|
60
|
+
private setupTimeouts;
|
|
61
|
+
private hasConflict;
|
|
62
|
+
/**
|
|
63
|
+
* Resolve race between two conflicting transactions.
|
|
64
|
+
* Transaction with more promises wins. If tied, higher hash wins.
|
|
65
|
+
*/
|
|
66
|
+
private resolveRace;
|
|
67
|
+
private operationsConflict;
|
|
68
|
+
private getActionId;
|
|
69
|
+
private getAffectedBlockIds;
|
|
70
|
+
private propagateIfNeeded;
|
|
71
|
+
private handleExpiration;
|
|
72
|
+
private resolveWithPeers;
|
|
73
|
+
private queueExpiredTransactions;
|
|
74
|
+
private processCleanupQueue;
|
|
75
|
+
private hasLocalCommit;
|
|
76
|
+
private clearTransaction;
|
|
77
|
+
}
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=cluster-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster-repo.d.ts","sourceRoot":"","sources":["../../../src/cluster/cluster-repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAA0B,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC/G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAqB5C,UAAU,uBAAuB;IAChC,WAAW,EAAE,KAAK,CAAC;IACnB,WAAW,EAAE,YAAY,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,qBAAqB,CAAC;CAClC;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,uBAAuB,GAAG,aAAa,CAUhF;AAED;;;GAGG;AACH,qBAAa,aAAc,YAAW,QAAQ;IAS5C,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAb5B,OAAO,CAAC,kBAAkB,CAA4C;IAEtE,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,cAAc,CAAkD;gBAGtD,WAAW,EAAE,KAAK,EAClB,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,YAAA,EACvB,iBAAiB,CAAC,EAAE,iBAAiB,YAAA,EACrC,WAAW,CAAC,EAAE,WAAW,YAAA,EACzB,SAAS,CAAC,EAAE,qBAAqB,YAAA;IAQnD;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YAyB7C,aAAa;IAoJ3B;;OAEG;YACW,YAAY;YA2BZ,cAAc;YAad,kBAAkB;YAMlB,kBAAkB;YAkBlB,kBAAkB;YAMlB,iBAAiB;YAMjB,eAAe;YAKf,mBAAmB;IAqCjC,OAAO,CAAC,WAAW;YAIL,mBAAmB;IAwBjC;;;OAGG;YACW,sBAAsB;YAsBtB,kBAAkB;YAkBlB,eAAe;YAmBf,eAAe;IAI7B,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,WAAW;IA4CnB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,mBAAmB;YAmBb,iBAAiB;YAejB,gBAAgB;YA4BhB,gBAAgB;IAM9B,OAAO,CAAC,wBAAwB;YASlB,mBAAmB;IAejC,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;CAkBxB"}
|