@peerbit/shared-log 13.2.32 → 13.2.34
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/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +613 -123
- package/dist/src/index.js.map +1 -1
- package/dist/src/replication-info-v2-binding.d.ts +16 -0
- package/dist/src/replication-info-v2-binding.d.ts.map +1 -0
- package/dist/src/replication-info-v2-binding.js +30 -0
- package/dist/src/replication-info-v2-binding.js.map +1 -0
- package/dist/src/replication-info-v2-receive.d.ts +250 -0
- package/dist/src/replication-info-v2-receive.d.ts.map +1 -0
- package/dist/src/replication-info-v2-receive.js +1089 -0
- package/dist/src/replication-info-v2-receive.js.map +1 -0
- package/dist/src/replication-info-v2-send.d.ts +25 -17
- package/dist/src/replication-info-v2-send.d.ts.map +1 -1
- package/dist/src/replication-info-v2-send.js +170 -86
- package/dist/src/replication-info-v2-send.js.map +1 -1
- package/package.json +8 -8
- package/src/index.ts +897 -260
- package/src/replication-info-v2-binding.ts +44 -0
- package/src/replication-info-v2-receive.ts +1577 -0
- package/src/replication-info-v2-send.ts +223 -109
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type PublicSignKey } from "@peerbit/crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Derive the token echoed by V2 data frames. Delivery recipients are unsigned,
|
|
4
|
+
* so the receiver's nonce alone is not a destination binding. Folding both
|
|
5
|
+
* authenticated identities and signed transport sessions into the 32-byte
|
|
6
|
+
* field prevents a copied request nonce from creating an interchangeable
|
|
7
|
+
* stream for another receiver.
|
|
8
|
+
*/
|
|
9
|
+
export declare const deriveReplicationInfoV2ReceiverBinding: (properties: {
|
|
10
|
+
receiverChallenge: Uint8Array;
|
|
11
|
+
receiver: PublicSignKey;
|
|
12
|
+
receiverTransportSession: bigint;
|
|
13
|
+
sender: PublicSignKey;
|
|
14
|
+
senderTransportSession: bigint;
|
|
15
|
+
}) => Uint8Array;
|
|
16
|
+
//# sourceMappingURL=replication-info-v2-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-info-v2-binding.d.ts","sourceRoot":"","sources":["../../src/replication-info-v2-binding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,iBAAiB,CAAC;AAmBjE;;;;;;GAMG;AACH,eAAO,MAAM,sCAAsC,GAAI,YAAY;IAClE,iBAAiB,EAAE,UAAU,CAAC;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,wBAAwB,EAAE,MAAM,CAAC;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;CAC/B,KAAG,UAUF,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { serialize } from "@dao-xyz/borsh";
|
|
2
|
+
import { sha256Sync } from "@peerbit/crypto";
|
|
3
|
+
import { concat, fromString } from "uint8arrays";
|
|
4
|
+
const RECEIVER_BINDING_DOMAIN = fromString("peerbit/shared-log/replication-info-v2/receiver-binding/v1");
|
|
5
|
+
const lengthPrefixed = (bytes) => {
|
|
6
|
+
const length = new Uint8Array(4);
|
|
7
|
+
new DataView(length.buffer).setUint32(0, bytes.byteLength, true);
|
|
8
|
+
return concat([length, bytes]);
|
|
9
|
+
};
|
|
10
|
+
const u64LittleEndian = (value) => {
|
|
11
|
+
const bytes = new Uint8Array(8);
|
|
12
|
+
new DataView(bytes.buffer).setBigUint64(0, value, true);
|
|
13
|
+
return bytes;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Derive the token echoed by V2 data frames. Delivery recipients are unsigned,
|
|
17
|
+
* so the receiver's nonce alone is not a destination binding. Folding both
|
|
18
|
+
* authenticated identities and signed transport sessions into the 32-byte
|
|
19
|
+
* field prevents a copied request nonce from creating an interchangeable
|
|
20
|
+
* stream for another receiver.
|
|
21
|
+
*/
|
|
22
|
+
export const deriveReplicationInfoV2ReceiverBinding = (properties) => sha256Sync(concat([
|
|
23
|
+
lengthPrefixed(RECEIVER_BINDING_DOMAIN),
|
|
24
|
+
lengthPrefixed(properties.receiverChallenge),
|
|
25
|
+
lengthPrefixed(serialize(properties.receiver)),
|
|
26
|
+
u64LittleEndian(properties.receiverTransportSession),
|
|
27
|
+
lengthPrefixed(serialize(properties.sender)),
|
|
28
|
+
u64LittleEndian(properties.senderTransportSession),
|
|
29
|
+
]));
|
|
30
|
+
//# sourceMappingURL=replication-info-v2-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-info-v2-binding.js","sourceRoot":"","sources":["../../src/replication-info-v2-binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAsB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,uBAAuB,GAAG,UAAU,CACzC,4DAA4D,CAC5D,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAc,EAAE;IACxD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAa,EAAc,EAAE;IACrD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,UAMtD,EAAc,EAAE,CAChB,UAAU,CACT,MAAM,CAAC;IACN,cAAc,CAAC,uBAAuB,CAAC;IACvC,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC;IAC5C,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9C,eAAe,CAAC,UAAU,CAAC,wBAAwB,CAAC;IACpD,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5C,eAAe,CAAC,UAAU,CAAC,sBAAsB,CAAC;CAClD,CAAC,CACF,CAAC"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { type PublicSignKey } from "@peerbit/crypto";
|
|
2
|
+
import { AddedReplicationSegmentMessage, AllReplicatingSegmentsMessage, type ReplicationInfoV2Message, RequestReplicationInfoV2Message, StoppedReplicating } from "./replication.js";
|
|
3
|
+
type LegacyReplicationInfoMessage = AllReplicatingSegmentsMessage | AddedReplicationSegmentMessage | StoppedReplicating;
|
|
4
|
+
export type ReplicationInfoV2ReceivePhase = "awaiting-full" | "active" | "resync";
|
|
5
|
+
type LocalCapabilityReady = {
|
|
6
|
+
peerHash: string;
|
|
7
|
+
receiveEpoch: object | null;
|
|
8
|
+
receiverTransportSession: bigint;
|
|
9
|
+
/**
|
|
10
|
+
* The local capability envelope and the later RequestV2 envelope use the
|
|
11
|
+
* same millisecond clock. The sender deliberately requires the request to
|
|
12
|
+
* be strictly newer, so never construct it in this captured millisecond.
|
|
13
|
+
*/
|
|
14
|
+
requestNotBeforeMs: number;
|
|
15
|
+
advertisement?: ReplicationInfoV2LocalCapabilityAdvertisement;
|
|
16
|
+
};
|
|
17
|
+
type LocalCapabilityReadyProperties = {
|
|
18
|
+
peerHash: string;
|
|
19
|
+
peerSession: object;
|
|
20
|
+
receiveEpoch: object | null;
|
|
21
|
+
receiverTransportSession: bigint;
|
|
22
|
+
requestNotBeforeMs: number;
|
|
23
|
+
};
|
|
24
|
+
export type ReplicationInfoV2LocalCapabilityAdvertisementHandle = {
|
|
25
|
+
firstAttempt: Promise<void>;
|
|
26
|
+
releaseLegacyBarrier(): void;
|
|
27
|
+
};
|
|
28
|
+
export type ReplicationInfoV2LocalCapabilityContext = {
|
|
29
|
+
peerHash: string;
|
|
30
|
+
target: PublicSignKey;
|
|
31
|
+
lifecycleSignal: AbortSignal;
|
|
32
|
+
legacyBarrierReleased: boolean;
|
|
33
|
+
};
|
|
34
|
+
export type ReplicationInfoV2LocalCapabilityAdvertisement = {
|
|
35
|
+
peerHash: string;
|
|
36
|
+
target: PublicSignKey;
|
|
37
|
+
peerSession: object;
|
|
38
|
+
receiveEpoch: object | null;
|
|
39
|
+
lifecycleSignal: AbortSignal;
|
|
40
|
+
onLifecycleAbort: () => void;
|
|
41
|
+
controller: AbortController;
|
|
42
|
+
context: ReplicationInfoV2LocalCapabilityContext;
|
|
43
|
+
attempts: number;
|
|
44
|
+
ready: boolean;
|
|
45
|
+
acknowledgedReady?: LocalCapabilityReady;
|
|
46
|
+
receiverTransportSession?: bigint;
|
|
47
|
+
timer?: ReturnType<typeof setTimeout>;
|
|
48
|
+
inFlight?: Promise<void>;
|
|
49
|
+
firstAttempt?: Promise<void>;
|
|
50
|
+
};
|
|
51
|
+
export type ReplicationInfoV2LocalCapabilityRefresh = {
|
|
52
|
+
receiverTransportSession: bigint;
|
|
53
|
+
requestNotBeforeMs: number;
|
|
54
|
+
};
|
|
55
|
+
export type ReplicationInfoV2ReceiveState = {
|
|
56
|
+
peerHash: string;
|
|
57
|
+
target: PublicSignKey;
|
|
58
|
+
peerSession: object;
|
|
59
|
+
receiveEpoch: object | null;
|
|
60
|
+
capabilities: number;
|
|
61
|
+
capabilityTimestamp: bigint;
|
|
62
|
+
senderTransportSession: bigint;
|
|
63
|
+
receiverTransportSession?: bigint;
|
|
64
|
+
receiverRequestChallenge: Uint8Array;
|
|
65
|
+
receiverBinding?: Uint8Array;
|
|
66
|
+
senderEpoch?: Uint8Array;
|
|
67
|
+
lastSequence?: bigint;
|
|
68
|
+
phase: ReplicationInfoV2ReceivePhase;
|
|
69
|
+
version: number;
|
|
70
|
+
controller: AbortController;
|
|
71
|
+
requestTimer?: ReturnType<typeof setTimeout>;
|
|
72
|
+
requestInFlight?: Promise<void>;
|
|
73
|
+
requestAttempts: number;
|
|
74
|
+
requestsSinceCapabilityRefresh: number;
|
|
75
|
+
requestParked: boolean;
|
|
76
|
+
capabilityRefreshRequired: boolean;
|
|
77
|
+
legacyFallbackTimer?: ReturnType<typeof setTimeout>;
|
|
78
|
+
legacyFallbackFingerprint?: Uint8Array;
|
|
79
|
+
legacyFallbackTimestamp?: bigint;
|
|
80
|
+
legacyFallbackAmbiguous: boolean;
|
|
81
|
+
lastCommittedTransportTimestamp?: bigint;
|
|
82
|
+
recentCommittedPayloads: Array<{
|
|
83
|
+
fingerprint: Uint8Array;
|
|
84
|
+
transportTimestamp: bigint;
|
|
85
|
+
}>;
|
|
86
|
+
lastLegacyObservationTimestamp?: bigint;
|
|
87
|
+
lastLegacyObservationFingerprint?: Uint8Array;
|
|
88
|
+
lastLegacyObservationAmbiguous: boolean;
|
|
89
|
+
reservedAdmission?: ReplicationInfoV2ReceiveAdmission;
|
|
90
|
+
};
|
|
91
|
+
export type ReplicationInfoV2ReceiveAdmission = {
|
|
92
|
+
state: ReplicationInfoV2ReceiveState;
|
|
93
|
+
version: number;
|
|
94
|
+
receiveEpoch: object | null;
|
|
95
|
+
message: ReplicationInfoV2Message;
|
|
96
|
+
kind: "full" | "added" | "stopped";
|
|
97
|
+
payloadFingerprint: Uint8Array;
|
|
98
|
+
transportTimestamp: bigint;
|
|
99
|
+
committed: boolean;
|
|
100
|
+
resyncAfterRelease?: boolean;
|
|
101
|
+
};
|
|
102
|
+
export type ReplicationInfoV2ReceiveDeps = {
|
|
103
|
+
getSelfKey: () => PublicSignKey;
|
|
104
|
+
getReceiverTransportSession: () => bigint;
|
|
105
|
+
isClosed: () => boolean;
|
|
106
|
+
isPeerSessionCurrent: (peerHash: string, peerSession: object) => boolean;
|
|
107
|
+
isReceiveEpochCurrent: (peerHash: string, receiveEpoch: object | null) => boolean;
|
|
108
|
+
isPeerStateCurrent: (peerHash: string, peerSession: object, receiveEpoch: object | null) => boolean;
|
|
109
|
+
isSenderTransportSessionCurrent: (peerHash: string, senderTransportSession: bigint) => boolean;
|
|
110
|
+
sendRequest: (request: RequestReplicationInfoV2Message, target: PublicSignKey, signal: AbortSignal) => Promise<void>;
|
|
111
|
+
refreshLocalCapability: (properties: {
|
|
112
|
+
peerHash: string;
|
|
113
|
+
target: PublicSignKey;
|
|
114
|
+
peerSession: object;
|
|
115
|
+
receiveEpoch: object | null;
|
|
116
|
+
signal: AbortSignal;
|
|
117
|
+
}) => Promise<ReplicationInfoV2LocalCapabilityRefresh | undefined>;
|
|
118
|
+
onRequestError?: (error: unknown) => void;
|
|
119
|
+
onLocalCapabilityError?: (error: unknown) => void;
|
|
120
|
+
now?: () => number;
|
|
121
|
+
requestRetryMs?: number;
|
|
122
|
+
maxRequestRetryMs?: number;
|
|
123
|
+
requestMaxAttempts?: number;
|
|
124
|
+
legacyFallbackDelayMs?: number;
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Authenticated receive grants and sender-authoritative ordering for
|
|
128
|
+
* replication-info V2. State is bounded to one entry per subscribed peer and
|
|
129
|
+
* is always scoped to the exact PeerSession object.
|
|
130
|
+
*/
|
|
131
|
+
export declare class ReplicationInfoV2ReceiveCoordinator {
|
|
132
|
+
private readonly deps;
|
|
133
|
+
_receiveStates: Map<string, ReplicationInfoV2ReceiveState>;
|
|
134
|
+
_cutoverPeerSessions: WeakSet<object>;
|
|
135
|
+
_localCapabilityReadyBySession: WeakMap<object, LocalCapabilityReady>;
|
|
136
|
+
_localCapabilityContextBySession: WeakMap<object, ReplicationInfoV2LocalCapabilityContext>;
|
|
137
|
+
_localCapabilityAdvertisementsByPeer: Map<string, ReplicationInfoV2LocalCapabilityAdvertisement>;
|
|
138
|
+
_reservedAdmissionsByPeer: Map<string, ReplicationInfoV2ReceiveAdmission>;
|
|
139
|
+
private readonly now;
|
|
140
|
+
private readonly requestRetryMs;
|
|
141
|
+
private readonly maxRequestRetryMs;
|
|
142
|
+
private readonly requestMaxAttempts;
|
|
143
|
+
private readonly legacyFallbackDelayMs;
|
|
144
|
+
constructor(deps: ReplicationInfoV2ReceiveDeps);
|
|
145
|
+
resetForOpen(): void;
|
|
146
|
+
clearForClose(): void;
|
|
147
|
+
clearPeer(peerHash: string, expectedSession?: object): void;
|
|
148
|
+
/** Revoke an unauthenticated or downgraded capability generation. */
|
|
149
|
+
revokePeerCapability(peerHash: string, reopenLegacy?: boolean): void;
|
|
150
|
+
private clearState;
|
|
151
|
+
private clearLocalCapabilityAdvertisement;
|
|
152
|
+
private isLocalCapabilityAdvertisementOwnerCurrent;
|
|
153
|
+
private isLocalCapabilityAdvertisementGenerationCurrent;
|
|
154
|
+
private isLocalCapabilityAdvertisementReadyOpen;
|
|
155
|
+
private localCapabilityRetryDelay;
|
|
156
|
+
private armLocalCapabilityAdvertisement;
|
|
157
|
+
private runLocalCapabilityAdvertisement;
|
|
158
|
+
/**
|
|
159
|
+
* Start local authenticated-apply advertisement independently of the legacy
|
|
160
|
+
* join path. ACK and legacy publication are a two-phase barrier: the first
|
|
161
|
+
* attempt always settles independently, while readiness is promoted only
|
|
162
|
+
* after the host releases the legacy barrier. Failed attempts leave one
|
|
163
|
+
* exact-session worker retrying with capped exponential backoff.
|
|
164
|
+
*/
|
|
165
|
+
advertiseLocalCapability(properties: {
|
|
166
|
+
target: PublicSignKey;
|
|
167
|
+
peerSession: object;
|
|
168
|
+
receiveEpoch: object | null;
|
|
169
|
+
signal: AbortSignal;
|
|
170
|
+
}): ReplicationInfoV2LocalCapabilityAdvertisementHandle;
|
|
171
|
+
private releaseLocalCapabilityLegacyBarrier;
|
|
172
|
+
private promoteLocalCapabilityAdvertisement;
|
|
173
|
+
/**
|
|
174
|
+
* Re-advertise one exact current recovery epoch from the stable membership
|
|
175
|
+
* context captured during opening. The opening handle owns barrier release;
|
|
176
|
+
* recovery never bypasses a legacy snapshot or role publication still in
|
|
177
|
+
* progress.
|
|
178
|
+
*/
|
|
179
|
+
reAdvertiseLocalCapabilityForRecovery(properties: {
|
|
180
|
+
peerHash: string;
|
|
181
|
+
peerSession: object;
|
|
182
|
+
receiveEpoch: object | null;
|
|
183
|
+
}): boolean;
|
|
184
|
+
/** Record success of this session's ACKed local APPLY advertisement. */
|
|
185
|
+
markLocalCapabilityReady(properties: LocalCapabilityReadyProperties): boolean;
|
|
186
|
+
private recordLocalCapabilityReady;
|
|
187
|
+
/**
|
|
188
|
+
* Promote one signed capability generation after the opening barrier has
|
|
189
|
+
* committed. Repeated same-session advertisements refresh freshness only;
|
|
190
|
+
* they never reset sequence state.
|
|
191
|
+
*/
|
|
192
|
+
observeCapability(properties: {
|
|
193
|
+
peerHash: string;
|
|
194
|
+
target: PublicSignKey;
|
|
195
|
+
peerSession: object;
|
|
196
|
+
receiveEpoch: object | null;
|
|
197
|
+
capabilities: number;
|
|
198
|
+
senderTransportSession: bigint;
|
|
199
|
+
capabilityTimestamp: bigint;
|
|
200
|
+
}): boolean;
|
|
201
|
+
private bindLocalCapability;
|
|
202
|
+
/** Require a fresh capability-bound grant and authoritative Full. */
|
|
203
|
+
advanceRecovery(properties: {
|
|
204
|
+
peerHash: string;
|
|
205
|
+
peerSession: object;
|
|
206
|
+
receiveEpoch: object | null;
|
|
207
|
+
}): boolean;
|
|
208
|
+
private transitionToResync;
|
|
209
|
+
isLegacyCutover(peerSession: object | null): boolean;
|
|
210
|
+
prepare(message: ReplicationInfoV2Message, properties: {
|
|
211
|
+
from: PublicSignKey;
|
|
212
|
+
peerSession: object;
|
|
213
|
+
receiveEpoch: object | null;
|
|
214
|
+
senderTransportSession: bigint;
|
|
215
|
+
transportTimestamp: bigint;
|
|
216
|
+
}): ReplicationInfoV2ReceiveAdmission | undefined;
|
|
217
|
+
/** Reserve at most one decoded V2 frame per peer ahead of the apply lane. */
|
|
218
|
+
reserve(message: ReplicationInfoV2Message, properties: {
|
|
219
|
+
from: PublicSignKey;
|
|
220
|
+
peerSession: object;
|
|
221
|
+
receiveEpoch: object | null;
|
|
222
|
+
senderTransportSession: bigint;
|
|
223
|
+
transportTimestamp: bigint;
|
|
224
|
+
}): ReplicationInfoV2ReceiveAdmission | undefined;
|
|
225
|
+
release(admission: ReplicationInfoV2ReceiveAdmission): void;
|
|
226
|
+
/**
|
|
227
|
+
* B9 can lose its sender grant while keeping the topic session open. Its
|
|
228
|
+
* unmatched legacy sidecar is the compatibility signal to re-handshake; a
|
|
229
|
+
* matching V2 payload before or after the legacy copy suppresses the timer.
|
|
230
|
+
*/
|
|
231
|
+
noteLegacyAnnouncement(properties: {
|
|
232
|
+
peerHash: string;
|
|
233
|
+
peerSession: object;
|
|
234
|
+
receiveEpoch: object | null;
|
|
235
|
+
senderTransportSession: bigint;
|
|
236
|
+
transportTimestamp: bigint;
|
|
237
|
+
message: LegacyReplicationInfoMessage;
|
|
238
|
+
}): boolean;
|
|
239
|
+
private clearLegacyFallback;
|
|
240
|
+
isAdmissionCurrent(admission: ReplicationInfoV2ReceiveAdmission): boolean;
|
|
241
|
+
commit(admission: ReplicationInfoV2ReceiveAdmission): boolean;
|
|
242
|
+
requireFullAfterFailure(admission: ReplicationInfoV2ReceiveAdmission): boolean;
|
|
243
|
+
private isStateCurrent;
|
|
244
|
+
private armRequest;
|
|
245
|
+
private requestRetryDelay;
|
|
246
|
+
private refreshGrant;
|
|
247
|
+
private runRequest;
|
|
248
|
+
}
|
|
249
|
+
export {};
|
|
250
|
+
//# sourceMappingURL=replication-info-v2-receive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-info-v2-receive.d.ts","sourceRoot":"","sources":["../../src/replication-info-v2-receive.ts"],"names":[],"mappings":"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"}
|