@aephia/atlas-kit 0.0.0
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/LICENSE +202 -0
- package/README.md +124 -0
- package/dist/bindings.d.ts +11 -0
- package/dist/bindings.d.ts.map +1 -0
- package/dist/bindings.js +11 -0
- package/dist/bindings.js.map +1 -0
- package/dist/cargo/actions/index.d.ts +122 -0
- package/dist/cargo/actions/index.d.ts.map +1 -0
- package/dist/cargo/actions/index.js +526 -0
- package/dist/cargo/actions/index.js.map +1 -0
- package/dist/cargo/index.d.ts +77 -0
- package/dist/cargo/index.d.ts.map +1 -0
- package/dist/cargo/index.js +102 -0
- package/dist/cargo/index.js.map +1 -0
- package/dist/claim-stakes/index.d.ts +64 -0
- package/dist/claim-stakes/index.d.ts.map +1 -0
- package/dist/claim-stakes/index.js +97 -0
- package/dist/claim-stakes/index.js.map +1 -0
- package/dist/client/context.d.ts +21 -0
- package/dist/client/context.d.ts.map +1 -0
- package/dist/client/context.js +1374 -0
- package/dist/client/context.js.map +1 -0
- package/dist/client/contracts.d.ts +671 -0
- package/dist/client/contracts.d.ts.map +1 -0
- package/dist/client/contracts.js +2 -0
- package/dist/client/contracts.js.map +1 -0
- package/dist/client/deployments.d.ts +3 -0
- package/dist/client/deployments.d.ts.map +1 -0
- package/dist/client/deployments.js +2 -0
- package/dist/client/deployments.js.map +1 -0
- package/dist/client/errors.d.ts +227 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +288 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +5 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/lifecycle.d.ts +4 -0
- package/dist/client/lifecycle.d.ts.map +1 -0
- package/dist/client/lifecycle.js +10 -0
- package/dist/client/lifecycle.js.map +1 -0
- package/dist/client/provider-errors.d.ts +9 -0
- package/dist/client/provider-errors.d.ts.map +1 -0
- package/dist/client/provider-errors.js +12 -0
- package/dist/client/provider-errors.js.map +1 -0
- package/dist/client/reconciliation.d.ts +10 -0
- package/dist/client/reconciliation.d.ts.map +1 -0
- package/dist/client/reconciliation.js +9 -0
- package/dist/client/reconciliation.js.map +1 -0
- package/dist/client/refs.d.ts +23 -0
- package/dist/client/refs.d.ts.map +1 -0
- package/dist/client/refs.js +12 -0
- package/dist/client/refs.js.map +1 -0
- package/dist/combat/index.d.ts +256 -0
- package/dist/combat/index.d.ts.map +1 -0
- package/dist/combat/index.js +222 -0
- package/dist/combat/index.js.map +1 -0
- package/dist/crafting/index.d.ts +308 -0
- package/dist/crafting/index.d.ts.map +1 -0
- package/dist/crafting/index.js +400 -0
- package/dist/crafting/index.js.map +1 -0
- package/dist/factions/index.d.ts +292 -0
- package/dist/factions/index.d.ts.map +1 -0
- package/dist/factions/index.js +334 -0
- package/dist/factions/index.js.map +1 -0
- package/dist/fleets/actions/index.d.ts +200 -0
- package/dist/fleets/actions/index.d.ts.map +1 -0
- package/dist/fleets/actions/index.js +854 -0
- package/dist/fleets/actions/index.js.map +1 -0
- package/dist/fleets/index.d.ts +100 -0
- package/dist/fleets/index.d.ts.map +1 -0
- package/dist/fleets/index.js +124 -0
- package/dist/fleets/index.js.map +1 -0
- package/dist/identity/index.d.ts +225 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +341 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +401 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +519 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/c4/adapter.d.ts +6 -0
- package/dist/internal/c4/adapter.d.ts.map +1 -0
- package/dist/internal/c4/adapter.js +2 -0
- package/dist/internal/c4/adapter.js.map +1 -0
- package/dist/internal/c4/bindings.d.ts +4 -0
- package/dist/internal/c4/bindings.d.ts.map +1 -0
- package/dist/internal/c4/bindings.js +4 -0
- package/dist/internal/c4/bindings.js.map +1 -0
- package/dist/internal/c4/character-modifier.d.ts +5 -0
- package/dist/internal/c4/character-modifier.d.ts.map +1 -0
- package/dist/internal/c4/character-modifier.js +100 -0
- package/dist/internal/c4/character-modifier.js.map +1 -0
- package/dist/internal/c4/claim-stake.d.ts +140 -0
- package/dist/internal/c4/claim-stake.d.ts.map +1 -0
- package/dist/internal/c4/claim-stake.js +205 -0
- package/dist/internal/c4/claim-stake.js.map +1 -0
- package/dist/internal/c4/combat.d.ts +98 -0
- package/dist/internal/c4/combat.d.ts.map +1 -0
- package/dist/internal/c4/combat.js +232 -0
- package/dist/internal/c4/combat.js.map +1 -0
- package/dist/internal/c4/crafting.d.ts +170 -0
- package/dist/internal/c4/crafting.d.ts.map +1 -0
- package/dist/internal/c4/crafting.js +387 -0
- package/dist/internal/c4/crafting.js.map +1 -0
- package/dist/internal/c4/factions.d.ts +248 -0
- package/dist/internal/c4/factions.d.ts.map +1 -0
- package/dist/internal/c4/factions.js +589 -0
- package/dist/internal/c4/factions.js.map +1 -0
- package/dist/internal/c4/fleet-crew-binding.d.ts +12 -0
- package/dist/internal/c4/fleet-crew-binding.d.ts.map +1 -0
- package/dist/internal/c4/fleet-crew-binding.js +51 -0
- package/dist/internal/c4/fleet-crew-binding.js.map +1 -0
- package/dist/internal/c4/fleet.d.ts +310 -0
- package/dist/internal/c4/fleet.d.ts.map +1 -0
- package/dist/internal/c4/fleet.js +393 -0
- package/dist/internal/c4/fleet.js.map +1 -0
- package/dist/internal/c4/game.d.ts +192 -0
- package/dist/internal/c4/game.d.ts.map +1 -0
- package/dist/internal/c4/game.js +396 -0
- package/dist/internal/c4/game.js.map +1 -0
- package/dist/internal/c4/identity.d.ts +193 -0
- package/dist/internal/c4/identity.d.ts.map +1 -0
- package/dist/internal/c4/identity.js +180 -0
- package/dist/internal/c4/identity.js.map +1 -0
- package/dist/internal/c4/loot-layout.d.ts +20 -0
- package/dist/internal/c4/loot-layout.d.ts.map +1 -0
- package/dist/internal/c4/loot-layout.js +29 -0
- package/dist/internal/c4/loot-layout.js.map +1 -0
- package/dist/internal/c4/loyalty.d.ts +102 -0
- package/dist/internal/c4/loyalty.d.ts.map +1 -0
- package/dist/internal/c4/loyalty.js +318 -0
- package/dist/internal/c4/loyalty.js.map +1 -0
- package/dist/internal/c4/market.d.ts +112 -0
- package/dist/internal/c4/market.d.ts.map +1 -0
- package/dist/internal/c4/market.js +247 -0
- package/dist/internal/c4/market.js.map +1 -0
- package/dist/internal/c4/pda.d.ts +6 -0
- package/dist/internal/c4/pda.d.ts.map +1 -0
- package/dist/internal/c4/pda.js +45 -0
- package/dist/internal/c4/pda.js.map +1 -0
- package/dist/internal/c4/profile-faction.d.ts +14 -0
- package/dist/internal/c4/profile-faction.d.ts.map +1 -0
- package/dist/internal/c4/profile-faction.js +69 -0
- package/dist/internal/c4/profile-faction.js.map +1 -0
- package/dist/internal/c4/rewards.d.ts +135 -0
- package/dist/internal/c4/rewards.d.ts.map +1 -0
- package/dist/internal/c4/rewards.js +305 -0
- package/dist/internal/c4/rewards.js.map +1 -0
- package/dist/internal/c4/scanning.d.ts +85 -0
- package/dist/internal/c4/scanning.d.ts.map +1 -0
- package/dist/internal/c4/scanning.js +180 -0
- package/dist/internal/c4/scanning.js.map +1 -0
- package/dist/internal/c4/starbase.d.ts +186 -0
- package/dist/internal/c4/starbase.d.ts.map +1 -0
- package/dist/internal/c4/starbase.js +259 -0
- package/dist/internal/c4/starbase.js.map +1 -0
- package/dist/internal/c4/world.d.ts +294 -0
- package/dist/internal/c4/world.d.ts.map +1 -0
- package/dist/internal/c4/world.js +417 -0
- package/dist/internal/c4/world.js.map +1 -0
- package/dist/internal/cargo.d.ts +65 -0
- package/dist/internal/cargo.d.ts.map +1 -0
- package/dist/internal/cargo.js +46 -0
- package/dist/internal/cargo.js.map +1 -0
- package/dist/internal/claim-stake.d.ts +31 -0
- package/dist/internal/claim-stake.d.ts.map +1 -0
- package/dist/internal/claim-stake.js +20 -0
- package/dist/internal/claim-stake.js.map +1 -0
- package/dist/internal/fleet.d.ts +165 -0
- package/dist/internal/fleet.d.ts.map +1 -0
- package/dist/internal/fleet.js +179 -0
- package/dist/internal/fleet.js.map +1 -0
- package/dist/internal/game-context.d.ts +4 -0
- package/dist/internal/game-context.d.ts.map +1 -0
- package/dist/internal/game-context.js +9 -0
- package/dist/internal/game-context.js.map +1 -0
- package/dist/internal/immutable-tree.d.ts +5 -0
- package/dist/internal/immutable-tree.d.ts.map +1 -0
- package/dist/internal/immutable-tree.js +47 -0
- package/dist/internal/immutable-tree.js.map +1 -0
- package/dist/internal/json.d.ts +7 -0
- package/dist/internal/json.d.ts.map +1 -0
- package/dist/internal/json.js +33 -0
- package/dist/internal/json.js.map +1 -0
- package/dist/internal/planning/authorization-adapter.d.ts +63 -0
- package/dist/internal/planning/authorization-adapter.d.ts.map +1 -0
- package/dist/internal/planning/authorization-adapter.js +222 -0
- package/dist/internal/planning/authorization-adapter.js.map +1 -0
- package/dist/internal/read-meta.d.ts +84 -0
- package/dist/internal/read-meta.d.ts.map +1 -0
- package/dist/internal/read-meta.js +28 -0
- package/dist/internal/read-meta.js.map +1 -0
- package/dist/internal/resolved-snapshot.d.ts +3 -0
- package/dist/internal/resolved-snapshot.d.ts.map +1 -0
- package/dist/internal/resolved-snapshot.js +11 -0
- package/dist/internal/resolved-snapshot.js.map +1 -0
- package/dist/internal/zink/provider.d.ts +9 -0
- package/dist/internal/zink/provider.d.ts.map +1 -0
- package/dist/internal/zink/provider.js +213 -0
- package/dist/internal/zink/provider.js.map +1 -0
- package/dist/loyalty/index.d.ts +195 -0
- package/dist/loyalty/index.d.ts.map +1 -0
- package/dist/loyalty/index.js +289 -0
- package/dist/loyalty/index.js.map +1 -0
- package/dist/markets/index.d.ts +195 -0
- package/dist/markets/index.d.ts.map +1 -0
- package/dist/markets/index.js +232 -0
- package/dist/markets/index.js.map +1 -0
- package/dist/mining/index.d.ts +156 -0
- package/dist/mining/index.d.ts.map +1 -0
- package/dist/mining/index.js +236 -0
- package/dist/mining/index.js.map +1 -0
- package/dist/planning/assembly.d.ts +42 -0
- package/dist/planning/assembly.d.ts.map +1 -0
- package/dist/planning/assembly.js +141 -0
- package/dist/planning/assembly.js.map +1 -0
- package/dist/planning/composition.d.ts +4 -0
- package/dist/planning/composition.d.ts.map +1 -0
- package/dist/planning/composition.js +76 -0
- package/dist/planning/composition.js.map +1 -0
- package/dist/planning/execution.d.ts +93 -0
- package/dist/planning/execution.d.ts.map +1 -0
- package/dist/planning/execution.js +549 -0
- package/dist/planning/execution.js.map +1 -0
- package/dist/planning/index.d.ts +219 -0
- package/dist/planning/index.d.ts.map +1 -0
- package/dist/planning/index.js +375 -0
- package/dist/planning/index.js.map +1 -0
- package/dist/planning/plan-instances.d.ts +3 -0
- package/dist/planning/plan-instances.d.ts.map +1 -0
- package/dist/planning/plan-instances.js +8 -0
- package/dist/planning/plan-instances.js.map +1 -0
- package/dist/planning/plan-sequence-checkpoint.d.ts +154 -0
- package/dist/planning/plan-sequence-checkpoint.d.ts.map +1 -0
- package/dist/planning/plan-sequence-checkpoint.js +449 -0
- package/dist/planning/plan-sequence-checkpoint.js.map +1 -0
- package/dist/planning/plan-sequence-execution.d.ts +72 -0
- package/dist/planning/plan-sequence-execution.d.ts.map +1 -0
- package/dist/planning/plan-sequence-execution.js +410 -0
- package/dist/planning/plan-sequence-execution.js.map +1 -0
- package/dist/planning/plan-sequence.d.ts +244 -0
- package/dist/planning/plan-sequence.d.ts.map +1 -0
- package/dist/planning/plan-sequence.js +264 -0
- package/dist/planning/plan-sequence.js.map +1 -0
- package/dist/planning/simulation.d.ts +50 -0
- package/dist/planning/simulation.d.ts.map +1 -0
- package/dist/planning/simulation.js +69 -0
- package/dist/planning/simulation.js.map +1 -0
- package/dist/registry/combat.d.ts +5 -0
- package/dist/registry/combat.d.ts.map +1 -0
- package/dist/registry/combat.js +7 -0
- package/dist/registry/combat.js.map +1 -0
- package/dist/registry/index.d.ts +138 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +397 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/rewards/index.d.ts +202 -0
- package/dist/rewards/index.d.ts.map +1 -0
- package/dist/rewards/index.js +290 -0
- package/dist/rewards/index.js.map +1 -0
- package/dist/scanning/index.d.ts +185 -0
- package/dist/scanning/index.d.ts.map +1 -0
- package/dist/scanning/index.js +207 -0
- package/dist/scanning/index.js.map +1 -0
- package/dist/starbases/actions/index.d.ts +60 -0
- package/dist/starbases/actions/index.d.ts.map +1 -0
- package/dist/starbases/actions/index.js +245 -0
- package/dist/starbases/actions/index.js.map +1 -0
- package/dist/starbases/index.d.ts +165 -0
- package/dist/starbases/index.d.ts.map +1 -0
- package/dist/starbases/index.js +213 -0
- package/dist/starbases/index.js.map +1 -0
- package/dist/world/index.d.ts +180 -0
- package/dist/world/index.d.ts.map +1 -0
- package/dist/world/index.js +265 -0
- package/dist/world/index.js.map +1 -0
- package/package.json +140 -0
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
import { getAddressEncoder, getBase58Decoder, getBase64EncodedWireTransaction, getSignatureFromTransaction, isAddress, isTransactionModifyingSigner, isTransactionPartialSigner, isTransactionSendingSigner, signAndSendTransactionWithSigners, signTransactionWithSigners, } from '@solana/kit';
|
|
2
|
+
import { InvalidActionInputError, SageSdkError } from '../client/errors.js';
|
|
3
|
+
import { invalidateContextAddresses, readContextRawAccounts, } from '../client/reconciliation.js';
|
|
4
|
+
import { assemblePlan, validateAssemblyPolicy, validatePlan, } from './assembly.js';
|
|
5
|
+
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
6
|
+
const DEFAULT_POLL_INTERVAL_MS = 500;
|
|
7
|
+
const MAX_HOST_TIMER_MS = 2_147_483_647;
|
|
8
|
+
const MAX_U64 = 18446744073709551615n;
|
|
9
|
+
// A 1,232-byte v0 transaction can carry the fee payer plus at most ten
|
|
10
|
+
// additional signatures while retaining space for one instruction message.
|
|
11
|
+
const MAX_ADDITIONAL_TRANSACTION_SIGNERS = 10;
|
|
12
|
+
class SignerMismatchError extends InvalidActionInputError {
|
|
13
|
+
missing;
|
|
14
|
+
duplicate;
|
|
15
|
+
unexpected;
|
|
16
|
+
constructor(details) {
|
|
17
|
+
const missing = Object.freeze([...details.missing]);
|
|
18
|
+
const duplicate = Object.freeze([...details.duplicate]);
|
|
19
|
+
const unexpected = Object.freeze([...details.unexpected]);
|
|
20
|
+
super('signers', { duplicate, missing, unexpected }, 'exactly one signer for the fee payer and every Plan-required signer address, with no additional addresses', 'Remove duplicate or unexpected signers and provide every missing Plan signer before retrying.');
|
|
21
|
+
this.missing = missing;
|
|
22
|
+
this.duplicate = duplicate;
|
|
23
|
+
this.unexpected = unexpected;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
class MissingWriteTransportError extends SageSdkError {
|
|
27
|
+
constructor() {
|
|
28
|
+
super('MISSING_WRITE_TRANSPORT', 'This SAGE context has no writeRpc transport, so it cannot execute a Plan. Pass the optional writeRpc transport when creating the context, then retry.');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
class ActionPreconditionFailedError extends SageSdkError {
|
|
32
|
+
describes;
|
|
33
|
+
observedSlot;
|
|
34
|
+
constructor(precondition, observedSlot) {
|
|
35
|
+
super('ACTION_PRECONDITION_FAILED', `The account state required by this Plan changed at ${precondition.address}: ${precondition.describes} Refresh the affected game state and create a new Plan before retrying.`, { address: precondition.address });
|
|
36
|
+
this.describes = precondition.describes;
|
|
37
|
+
this.observedSlot = observedSlot;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
class TransactionExpiredError extends SageSdkError {
|
|
41
|
+
signature;
|
|
42
|
+
lastValidBlockHeight;
|
|
43
|
+
constructor(signature, lastValidBlockHeight) {
|
|
44
|
+
super('TRANSACTION_EXPIRED', `Transaction ${signature} exceeded its last valid block height ${String(lastValidBlockHeight)} without landing. Reassemble the Plan with a fresh blockhash and explicitly execute it again.`);
|
|
45
|
+
this.signature = signature;
|
|
46
|
+
this.lastValidBlockHeight = lastValidBlockHeight;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
class TransactionSubmissionFailedError extends SageSdkError {
|
|
50
|
+
signature;
|
|
51
|
+
transactionError;
|
|
52
|
+
constructor(signature, transactionError) {
|
|
53
|
+
super('TRANSACTION_SUBMISSION_FAILED', `Transaction ${signature} failed on chain. Inspect the transaction error, correct the Plan inputs, and create a new Plan before retrying.`);
|
|
54
|
+
this.signature = signature;
|
|
55
|
+
this.transactionError = transactionError;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
class TransactionOutcomeUnknownError extends SageSdkError {
|
|
59
|
+
operation = 'submission';
|
|
60
|
+
signature = undefined;
|
|
61
|
+
constructor() {
|
|
62
|
+
super('TRANSACTION_OUTCOME_UNKNOWN', 'The opaque sending signer may have submitted the transaction but rejected without exposing its signature. Do not retry automatically; inspect the wallet or signer history and reconcile the intended action first.');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function invalid(field, value, acceptedRange, remedy) {
|
|
66
|
+
throw new InvalidActionInputError(field, value, acceptedRange, remedy);
|
|
67
|
+
}
|
|
68
|
+
function summarizeSensitiveInput(value) {
|
|
69
|
+
try {
|
|
70
|
+
if (value === null)
|
|
71
|
+
return 'null';
|
|
72
|
+
if (Array.isArray(value))
|
|
73
|
+
return `array(length ${String(value.length)})`;
|
|
74
|
+
const kind = typeof value;
|
|
75
|
+
if (kind !== 'object')
|
|
76
|
+
return kind;
|
|
77
|
+
const address = Object.getOwnPropertyDescriptor(value, 'address')?.value;
|
|
78
|
+
return typeof address === 'string' && isAddress(address)
|
|
79
|
+
? `${kind} with address ${address}`
|
|
80
|
+
: kind;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return 'uninspectable value';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function invalidSensitiveInput(field, value, acceptedRange, remedy) {
|
|
87
|
+
invalid(field, summarizeSensitiveInput(value), acceptedRange, remedy);
|
|
88
|
+
}
|
|
89
|
+
function bindSignerCapability(capability, receiver) {
|
|
90
|
+
return (...args) => Reflect.apply(capability, receiver, args);
|
|
91
|
+
}
|
|
92
|
+
function readSigner(value, field) {
|
|
93
|
+
const reject = () => invalidSensitiveInput(field, value, 'a Kit TransactionSigner with a valid z.ink/Solana address', 'Pass the real external wallet or transaction signer selected for this Plan before retrying.');
|
|
94
|
+
if (value === null || typeof value !== 'object')
|
|
95
|
+
reject();
|
|
96
|
+
const signer = value;
|
|
97
|
+
let address;
|
|
98
|
+
let modifyAndSignTransactions;
|
|
99
|
+
let signTransactions;
|
|
100
|
+
let signAndSendTransactions;
|
|
101
|
+
try {
|
|
102
|
+
address = Reflect.get(signer, 'address');
|
|
103
|
+
modifyAndSignTransactions = Reflect.get(signer, 'modifyAndSignTransactions');
|
|
104
|
+
signTransactions = Reflect.get(signer, 'signTransactions');
|
|
105
|
+
signAndSendTransactions = Reflect.get(signer, 'signAndSendTransactions');
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
reject();
|
|
109
|
+
}
|
|
110
|
+
if (typeof address !== 'string' ||
|
|
111
|
+
!isAddress(address) ||
|
|
112
|
+
(typeof modifyAndSignTransactions !== 'function' &&
|
|
113
|
+
typeof signTransactions !== 'function' &&
|
|
114
|
+
typeof signAndSendTransactions !== 'function')) {
|
|
115
|
+
reject();
|
|
116
|
+
}
|
|
117
|
+
const normalized = { address: address };
|
|
118
|
+
if (typeof modifyAndSignTransactions === 'function') {
|
|
119
|
+
normalized.modifyAndSignTransactions = bindSignerCapability(modifyAndSignTransactions, signer);
|
|
120
|
+
}
|
|
121
|
+
if (typeof signTransactions === 'function') {
|
|
122
|
+
normalized.signTransactions = bindSignerCapability(signTransactions, signer);
|
|
123
|
+
}
|
|
124
|
+
if (typeof signAndSendTransactions === 'function') {
|
|
125
|
+
normalized.signAndSendTransactions = bindSignerCapability(signAndSendTransactions, signer);
|
|
126
|
+
}
|
|
127
|
+
return Object.freeze(normalized);
|
|
128
|
+
}
|
|
129
|
+
function readSigners(value) {
|
|
130
|
+
if (!Array.isArray(value)) {
|
|
131
|
+
invalidSensitiveInput('signers', value, 'a finite ordered array of Kit TransactionSigner values', 'Pass additional Plan signers in one finite array before retrying.');
|
|
132
|
+
}
|
|
133
|
+
const signers = [];
|
|
134
|
+
let length;
|
|
135
|
+
try {
|
|
136
|
+
length = Reflect.get(value, 'length');
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
invalid('signers', 'throwing accessor', 'a finite ordered array of Kit TransactionSigner values', 'Pass additional Plan signers in one readable finite array before retrying.');
|
|
140
|
+
}
|
|
141
|
+
if (typeof length !== 'number' ||
|
|
142
|
+
!Number.isSafeInteger(length) ||
|
|
143
|
+
length < 0 ||
|
|
144
|
+
length > MAX_ADDITIONAL_TRANSACTION_SIGNERS) {
|
|
145
|
+
invalidSensitiveInput('signers', value, `an ordered array of at most ${String(MAX_ADDITIONAL_TRANSACTION_SIGNERS)} additional Kit TransactionSigner values`, 'Pass only the signers that can fit beside the fee payer in one v0 z.ink/Solana transaction before retrying.');
|
|
146
|
+
}
|
|
147
|
+
for (let index = 0; index < length; index += 1) {
|
|
148
|
+
let present;
|
|
149
|
+
let signer;
|
|
150
|
+
try {
|
|
151
|
+
present = Object.hasOwn(value, index);
|
|
152
|
+
signer = present ? value[index] : undefined;
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
invalid(`signers[${String(index)}]`, 'throwing accessor', 'a readable Kit TransactionSigner', 'Replace the throwing signer entry before retrying.');
|
|
156
|
+
}
|
|
157
|
+
if (!present) {
|
|
158
|
+
invalid(`signers[${String(index)}]`, undefined, 'a present Kit TransactionSigner', 'Remove sparse entries from the additional signer array before retrying.');
|
|
159
|
+
}
|
|
160
|
+
signers.push(readSigner(signer, `signers[${String(index)}]`));
|
|
161
|
+
}
|
|
162
|
+
return Object.freeze(signers);
|
|
163
|
+
}
|
|
164
|
+
function readOption(value, field) {
|
|
165
|
+
try {
|
|
166
|
+
return Reflect.get(value, field);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
invalid(field, 'throwing accessor', `a readable ${field} option`, `Replace the throwing ${field} accessor with a plain execution option before retrying.`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function readDuration(field, value, fallback, minimum) {
|
|
173
|
+
const selected = value === undefined ? fallback : value;
|
|
174
|
+
if (!Number.isSafeInteger(selected) || selected < minimum) {
|
|
175
|
+
invalidSensitiveInput(field, selected, `a finite safe-integer millisecond duration of at least ${String(minimum)}`, `Set ${field} to a bounded duration before retrying.`);
|
|
176
|
+
}
|
|
177
|
+
return selected;
|
|
178
|
+
}
|
|
179
|
+
function validateOptions(value) {
|
|
180
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
181
|
+
invalidSensitiveInput('options', value, 'an ExecutePlanOptions object', 'Pass the fee payer and optional execution policy fields in one object before retrying.');
|
|
182
|
+
}
|
|
183
|
+
const feePayerValue = readOption(value, 'feePayer');
|
|
184
|
+
const signersValue = readOption(value, 'signers');
|
|
185
|
+
const commitment = readOption(value, 'commitment');
|
|
186
|
+
const computeUnitLimit = readOption(value, 'computeUnitLimit');
|
|
187
|
+
const priorityFeeMicroLamports = readOption(value, 'priorityFeeMicroLamports');
|
|
188
|
+
const pollIntervalMs = readOption(value, 'pollIntervalMs');
|
|
189
|
+
const timeoutMs = readOption(value, 'timeoutMs');
|
|
190
|
+
const feePayer = readSigner(feePayerValue, 'feePayer');
|
|
191
|
+
const signers = readSigners(signersValue === undefined ? [] : signersValue);
|
|
192
|
+
const assembly = validateAssemblyPolicy({
|
|
193
|
+
feePayer: feePayer.address,
|
|
194
|
+
...(commitment === undefined ? {} : { commitment }),
|
|
195
|
+
...(computeUnitLimit === undefined ? {} : { computeUnitLimit }),
|
|
196
|
+
...(priorityFeeMicroLamports === undefined
|
|
197
|
+
? {}
|
|
198
|
+
: { priorityFeeMicroLamports }),
|
|
199
|
+
}, summarizeSensitiveInput);
|
|
200
|
+
return {
|
|
201
|
+
commitment: assembly.commitment,
|
|
202
|
+
computeUnitLimit: assembly.computeUnitLimit,
|
|
203
|
+
feePayer,
|
|
204
|
+
pollIntervalMs: readDuration('pollIntervalMs', pollIntervalMs, DEFAULT_POLL_INTERVAL_MS, 1),
|
|
205
|
+
priorityFeeMicroLamports: assembly.priorityFeeMicroLamports,
|
|
206
|
+
signers,
|
|
207
|
+
timeoutMs: readDuration('timeoutMs', timeoutMs, DEFAULT_TIMEOUT_MS, 0),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function matchSigners(plan, options) {
|
|
211
|
+
const all = [options.feePayer, ...options.signers];
|
|
212
|
+
const seen = new Set();
|
|
213
|
+
const duplicate = [];
|
|
214
|
+
for (const signer of all) {
|
|
215
|
+
if (seen.has(signer.address) && !duplicate.includes(signer.address)) {
|
|
216
|
+
duplicate.push(signer.address);
|
|
217
|
+
}
|
|
218
|
+
seen.add(signer.address);
|
|
219
|
+
}
|
|
220
|
+
const required = new Set(plan.requiredSigners);
|
|
221
|
+
const missing = plan.requiredSigners.filter((address) => !seen.has(address));
|
|
222
|
+
const unexpected = options.signers
|
|
223
|
+
.map((signer) => signer.address)
|
|
224
|
+
.filter((address, index, addresses) => !required.has(address) && addresses.indexOf(address) === index);
|
|
225
|
+
if (missing.length > 0 || duplicate.length > 0 || unexpected.length > 0) {
|
|
226
|
+
throw new SignerMismatchError({ duplicate, missing, unexpected });
|
|
227
|
+
}
|
|
228
|
+
return Object.freeze(all);
|
|
229
|
+
}
|
|
230
|
+
function resolveSendingSigner(signers) {
|
|
231
|
+
const sendingSigners = signers.filter(isTransactionSendingSigner);
|
|
232
|
+
if (sendingSigners.length === 0)
|
|
233
|
+
return undefined;
|
|
234
|
+
const sendingOnly = sendingSigners.filter((signer) => !isTransactionModifyingSigner(signer) &&
|
|
235
|
+
!isTransactionPartialSigner(signer));
|
|
236
|
+
if (sendingOnly.length > 1) {
|
|
237
|
+
invalid('signers', sendingOnly.map(({ address }) => address), 'at most one sending-only signer so the opaque submission boundary is unambiguous', 'Use one sending-only signer and provide other required signers as modifying or partial signers before retrying.');
|
|
238
|
+
}
|
|
239
|
+
return sendingOnly[0] ?? sendingSigners[0];
|
|
240
|
+
}
|
|
241
|
+
function transactionMessagesMatchExceptLifetime(expected, actual) {
|
|
242
|
+
if (!('lifetimeConstraint' in actual))
|
|
243
|
+
return false;
|
|
244
|
+
if (actual.messageBytes.length !== expected.messageBytes.length)
|
|
245
|
+
return false;
|
|
246
|
+
// `assemblePlan` always emits v0 messages with at most 64 static accounts, so
|
|
247
|
+
// their compact-array count is one byte after the version prefix and header.
|
|
248
|
+
const lifetimeOffset = 5 + expected.messageBytes[4] * 32;
|
|
249
|
+
const messageLifetime = getBase58Decoder().decode(actual.messageBytes.slice(lifetimeOffset, lifetimeOffset + 32));
|
|
250
|
+
const lifetimeConstraint = actual
|
|
251
|
+
.lifetimeConstraint;
|
|
252
|
+
if (('lastValidBlockHeight' in lifetimeConstraint
|
|
253
|
+
? lifetimeConstraint.blockhash
|
|
254
|
+
: lifetimeConstraint.nonce) !== messageLifetime) {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
return actual.messageBytes.every((byte, index) => (index >= lifetimeOffset && index < lifetimeOffset + 32) ||
|
|
258
|
+
byte === expected.messageBytes[index]);
|
|
259
|
+
}
|
|
260
|
+
function assertPlanTransactionMessage(expected, actual) {
|
|
261
|
+
if (!transactionMessagesMatchExceptLifetime(expected, actual)) {
|
|
262
|
+
invalid('signers', 'modified compiled transaction message', 'signers that preserve the assembled fee payer, instructions, programs, and account roles while optionally replacing only the transaction lifetime', 'Use a signer that signs the assembled Plan without changing its message, or reassemble a new Plan for the intended transaction before retrying.');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
function readFinalLastValidBlockHeight(transaction) {
|
|
266
|
+
if (!('lastValidBlockHeight' in transaction.lifetimeConstraint))
|
|
267
|
+
return null;
|
|
268
|
+
const value = transaction.lifetimeConstraint.lastValidBlockHeight;
|
|
269
|
+
if (typeof value !== 'bigint' || value < 0n || value > MAX_U64) {
|
|
270
|
+
invalid('signers', 'invalid final lastValidBlockHeight metadata', 'a final transaction lifetime with lastValidBlockHeight encoded as an unsigned 64-bit bigint', 'Use a signer that returns trustworthy blockhash lifetime metadata, or use an opaque sending signer whose lifetime cannot produce a definite-expiry claim.');
|
|
271
|
+
}
|
|
272
|
+
return value;
|
|
273
|
+
}
|
|
274
|
+
async function hashAccountState(owner, data) {
|
|
275
|
+
const ownerBytes = getAddressEncoder().encode(owner);
|
|
276
|
+
const canonical = new Uint8Array(ownerBytes.length + data.length);
|
|
277
|
+
canonical.set(ownerBytes);
|
|
278
|
+
canonical.set(data, ownerBytes.length);
|
|
279
|
+
const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', canonical));
|
|
280
|
+
return [...digest].map((byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
281
|
+
}
|
|
282
|
+
async function checkPreconditions(context, preconditions, commitment) {
|
|
283
|
+
const addresses = [...new Set(preconditions.map(({ address }) => address))];
|
|
284
|
+
const accounts = await readContextRawAccounts(context, addresses, {
|
|
285
|
+
commitment,
|
|
286
|
+
});
|
|
287
|
+
const byAddress = new Map(addresses.map((address, index) => [address, accounts[index]]));
|
|
288
|
+
for (const precondition of preconditions) {
|
|
289
|
+
const account = byAddress.get(precondition.address);
|
|
290
|
+
if (account === undefined ||
|
|
291
|
+
(await hashAccountState(account.owner, account.data)) !==
|
|
292
|
+
precondition.dataHash) {
|
|
293
|
+
throw new ActionPreconditionFailedError(precondition, account?.slot);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
function commitmentReached(actual, requested) {
|
|
298
|
+
if (actual === null)
|
|
299
|
+
return false;
|
|
300
|
+
const strength = {
|
|
301
|
+
processed: 0,
|
|
302
|
+
confirmed: 1,
|
|
303
|
+
finalized: 2,
|
|
304
|
+
};
|
|
305
|
+
return strength[actual] >= strength[requested];
|
|
306
|
+
}
|
|
307
|
+
function monotonicNow() {
|
|
308
|
+
return globalThis.performance.now();
|
|
309
|
+
}
|
|
310
|
+
async function wait(milliseconds) {
|
|
311
|
+
const startedAt = monotonicNow();
|
|
312
|
+
for (;;) {
|
|
313
|
+
const remaining = milliseconds - (monotonicNow() - startedAt);
|
|
314
|
+
if (remaining <= 0)
|
|
315
|
+
return;
|
|
316
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(remaining, MAX_HOST_TIMER_MS)));
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
async function readBeforeDeadline(read, startedAt, timeoutMs) {
|
|
320
|
+
const operation = Promise.resolve()
|
|
321
|
+
.then(read)
|
|
322
|
+
.then((value) => timeoutMs !== 0 && monotonicNow() - startedAt >= timeoutMs
|
|
323
|
+
? { status: 'deadline' }
|
|
324
|
+
: { status: 'resolved', value }, () => ({ status: 'rejected' }));
|
|
325
|
+
let timer;
|
|
326
|
+
const deadline = new Promise((resolve) => {
|
|
327
|
+
const schedule = () => {
|
|
328
|
+
const remainingMs = Math.max(0, timeoutMs - (monotonicNow() - startedAt));
|
|
329
|
+
timer = setTimeout(() => {
|
|
330
|
+
if (monotonicNow() - startedAt >= timeoutMs) {
|
|
331
|
+
resolve({ status: 'deadline' });
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
schedule();
|
|
335
|
+
}
|
|
336
|
+
}, Math.min(remainingMs, MAX_HOST_TIMER_MS));
|
|
337
|
+
};
|
|
338
|
+
schedule();
|
|
339
|
+
});
|
|
340
|
+
const result = await Promise.race([operation, deadline]);
|
|
341
|
+
clearTimeout(timer);
|
|
342
|
+
return result;
|
|
343
|
+
}
|
|
344
|
+
async function confirmTransaction(writeRpc, signature, lastValidBlockHeight, options) {
|
|
345
|
+
const startedAt = monotonicNow();
|
|
346
|
+
const fetchStatus = async () => {
|
|
347
|
+
const { value } = await writeRpc
|
|
348
|
+
.getSignatureStatuses([signature], { searchTransactionHistory: true })
|
|
349
|
+
.send();
|
|
350
|
+
return value[0];
|
|
351
|
+
};
|
|
352
|
+
const readStatus = () => readBeforeDeadline(fetchStatus, startedAt, options.timeoutMs);
|
|
353
|
+
const readTerminal = (status) => {
|
|
354
|
+
if (status?.err !== null && status?.err !== undefined) {
|
|
355
|
+
throw new TransactionSubmissionFailedError(signature, status.err);
|
|
356
|
+
}
|
|
357
|
+
if (status !== null &&
|
|
358
|
+
status !== undefined &&
|
|
359
|
+
commitmentReached(status.confirmationStatus, options.commitment)) {
|
|
360
|
+
return Object.freeze({
|
|
361
|
+
commitment: options.commitment,
|
|
362
|
+
signature,
|
|
363
|
+
slot: status.slot,
|
|
364
|
+
status: 'confirmed',
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
return undefined;
|
|
368
|
+
};
|
|
369
|
+
const transportUnknown = (operation, lastCheckedBlockHeight = null) => Object.freeze({
|
|
370
|
+
lastCheckedBlockHeight,
|
|
371
|
+
lastValidBlockHeight,
|
|
372
|
+
operation,
|
|
373
|
+
reason: 'transport-error',
|
|
374
|
+
signature,
|
|
375
|
+
status: 'unknown',
|
|
376
|
+
});
|
|
377
|
+
const timeoutUnknown = (lastCheckedBlockHeight) => Object.freeze({
|
|
378
|
+
lastCheckedBlockHeight,
|
|
379
|
+
lastValidBlockHeight,
|
|
380
|
+
reason: 'timeout',
|
|
381
|
+
signature,
|
|
382
|
+
status: 'unknown',
|
|
383
|
+
});
|
|
384
|
+
for (;;) {
|
|
385
|
+
let statusRead = await readStatus();
|
|
386
|
+
if (statusRead.status !== 'resolved') {
|
|
387
|
+
return transportUnknown('signature-status');
|
|
388
|
+
}
|
|
389
|
+
let status = statusRead.value;
|
|
390
|
+
const terminal = readTerminal(status);
|
|
391
|
+
if (terminal !== undefined)
|
|
392
|
+
return terminal;
|
|
393
|
+
const blockHeightRead = await readBeforeDeadline(() => writeRpc.getBlockHeight({ commitment: options.commitment }).send(), startedAt, options.timeoutMs);
|
|
394
|
+
if (blockHeightRead.status !== 'resolved') {
|
|
395
|
+
return transportUnknown('block-height');
|
|
396
|
+
}
|
|
397
|
+
const blockHeight = blockHeightRead.value;
|
|
398
|
+
if (lastValidBlockHeight !== null &&
|
|
399
|
+
blockHeight > lastValidBlockHeight &&
|
|
400
|
+
status == null) {
|
|
401
|
+
statusRead = await readStatus();
|
|
402
|
+
if (statusRead.status !== 'resolved') {
|
|
403
|
+
return transportUnknown('signature-status', blockHeight);
|
|
404
|
+
}
|
|
405
|
+
status = statusRead.value;
|
|
406
|
+
const postExpiryTerminal = readTerminal(status);
|
|
407
|
+
if (postExpiryTerminal !== undefined)
|
|
408
|
+
return postExpiryTerminal;
|
|
409
|
+
if (status == null) {
|
|
410
|
+
throw new TransactionExpiredError(signature, lastValidBlockHeight);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
const remainingMs = options.timeoutMs - (monotonicNow() - startedAt);
|
|
414
|
+
if (remainingMs <= 0)
|
|
415
|
+
return timeoutUnknown(blockHeight);
|
|
416
|
+
await wait(Math.min(options.pollIntervalMs, remainingMs));
|
|
417
|
+
if (monotonicNow() - startedAt >= options.timeoutMs) {
|
|
418
|
+
return timeoutUnknown(blockHeight);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
async function signAndSubmit(writeRpc, transaction, signers, sendingSigner, commitment, lifecycle) {
|
|
423
|
+
await lifecycle?.onBeforeSign();
|
|
424
|
+
if (sendingSigner !== undefined) {
|
|
425
|
+
let enteredOpaqueSender = false;
|
|
426
|
+
const guardedSendingSigner = Object.freeze({
|
|
427
|
+
address: sendingSigner.address,
|
|
428
|
+
async signAndSendTransactions(transactions, config) {
|
|
429
|
+
for (const signed of transactions) {
|
|
430
|
+
assertPlanTransactionMessage(transaction, signed);
|
|
431
|
+
readFinalLastValidBlockHeight(signed);
|
|
432
|
+
}
|
|
433
|
+
await lifecycle?.onBeforeOpaqueInvoke();
|
|
434
|
+
enteredOpaqueSender = true;
|
|
435
|
+
return sendingSigner.signAndSendTransactions(transactions, config);
|
|
436
|
+
},
|
|
437
|
+
});
|
|
438
|
+
const guardedSigners = signers.map((signer) => signer === sendingSigner ? guardedSendingSigner : signer);
|
|
439
|
+
try {
|
|
440
|
+
return Object.freeze({
|
|
441
|
+
lastValidBlockHeight: null,
|
|
442
|
+
signature: getBase58Decoder().decode(await signAndSendTransactionWithSigners(guardedSigners, transaction)),
|
|
443
|
+
status: 'submitted',
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
catch (error) {
|
|
447
|
+
if (!enteredOpaqueSender)
|
|
448
|
+
throw error;
|
|
449
|
+
throw new TransactionOutcomeUnknownError();
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
const signingSigners = signers.filter((signer) => isTransactionModifyingSigner(signer) ||
|
|
453
|
+
isTransactionPartialSigner(signer));
|
|
454
|
+
const signed = await signTransactionWithSigners(signingSigners, transaction);
|
|
455
|
+
assertPlanTransactionMessage(transaction, signed);
|
|
456
|
+
const signature = getSignatureFromTransaction(signed);
|
|
457
|
+
const lastValidBlockHeight = readFinalLastValidBlockHeight(signed);
|
|
458
|
+
await lifecycle?.onSigned(signature);
|
|
459
|
+
await lifecycle?.onBeforeSubmit();
|
|
460
|
+
try {
|
|
461
|
+
const submittedSignature = await writeRpc
|
|
462
|
+
.sendTransaction(getBase64EncodedWireTransaction(signed), {
|
|
463
|
+
encoding: 'base64',
|
|
464
|
+
maxRetries: 0n,
|
|
465
|
+
preflightCommitment: commitment,
|
|
466
|
+
})
|
|
467
|
+
.send();
|
|
468
|
+
if (submittedSignature !== signature) {
|
|
469
|
+
return Object.freeze({
|
|
470
|
+
lastCheckedBlockHeight: null,
|
|
471
|
+
lastValidBlockHeight,
|
|
472
|
+
operation: 'submission',
|
|
473
|
+
reason: 'transport-error',
|
|
474
|
+
signature,
|
|
475
|
+
status: 'unknown',
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
return Object.freeze({
|
|
479
|
+
lastValidBlockHeight,
|
|
480
|
+
signature: submittedSignature,
|
|
481
|
+
status: 'submitted',
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
catch {
|
|
485
|
+
return Object.freeze({
|
|
486
|
+
lastCheckedBlockHeight: null,
|
|
487
|
+
lastValidBlockHeight,
|
|
488
|
+
operation: 'submission',
|
|
489
|
+
reason: 'transport-error',
|
|
490
|
+
signature,
|
|
491
|
+
status: 'unknown',
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
/** Executes one Plan through local signer matching, freshness re-check, one
|
|
496
|
+
* submission, terminal confirmation, and confirmed-only cache invalidation.
|
|
497
|
+
*
|
|
498
|
+
* @example
|
|
499
|
+
* ```ts
|
|
500
|
+
* import type { TransactionSigner } from '@solana/kit';
|
|
501
|
+
*
|
|
502
|
+
* declare const ctx: SageContext;
|
|
503
|
+
* declare const plan: Plan;
|
|
504
|
+
* declare const feePayer: TransactionSigner;
|
|
505
|
+
* const result = await executePlan(ctx, plan, { feePayer });
|
|
506
|
+
* console.log(result.status, result.signature);
|
|
507
|
+
* ```
|
|
508
|
+
*/
|
|
509
|
+
export async function executePlan(context, plan, options) {
|
|
510
|
+
return executePlanWithLifecycle(context, plan, options);
|
|
511
|
+
}
|
|
512
|
+
/** @internal Executes one Plan with sequence-owned write-ahead lifecycle hooks. */
|
|
513
|
+
export async function executePlanWithLifecycle(context, plan, options, lifecycle) {
|
|
514
|
+
validatePlan(plan);
|
|
515
|
+
const validated = validateOptions(options);
|
|
516
|
+
const signers = matchSigners(plan, validated);
|
|
517
|
+
const sendingSigner = resolveSendingSigner(signers);
|
|
518
|
+
const writeRpc = context.writeRpc;
|
|
519
|
+
if (writeRpc === undefined)
|
|
520
|
+
throw new MissingWriteTransportError();
|
|
521
|
+
await checkPreconditions(context, plan.preconditions, validated.commitment);
|
|
522
|
+
const transaction = await assemblePlan(context, plan, {
|
|
523
|
+
feePayer: validated.feePayer.address,
|
|
524
|
+
commitment: validated.commitment,
|
|
525
|
+
...(validated.computeUnitLimit === undefined
|
|
526
|
+
? {}
|
|
527
|
+
: { computeUnitLimit: validated.computeUnitLimit }),
|
|
528
|
+
...(validated.priorityFeeMicroLamports === undefined
|
|
529
|
+
? {}
|
|
530
|
+
: { priorityFeeMicroLamports: validated.priorityFeeMicroLamports }),
|
|
531
|
+
});
|
|
532
|
+
await lifecycle?.onPrepared(sendingSigner === undefined ? 'observable' : 'opaque');
|
|
533
|
+
const submission = await signAndSubmit(writeRpc, transaction, signers, sendingSigner, validated.commitment, lifecycle);
|
|
534
|
+
if (submission.status === 'unknown')
|
|
535
|
+
return submission;
|
|
536
|
+
const result = await confirmTransaction(writeRpc, submission.signature, submission.lastValidBlockHeight, validated);
|
|
537
|
+
if (result.status === 'confirmed') {
|
|
538
|
+
try {
|
|
539
|
+
invalidateContextAddresses(context, plan.affected);
|
|
540
|
+
}
|
|
541
|
+
catch (error) {
|
|
542
|
+
if (!(error instanceof SageSdkError && error.code === 'CONTEXT_DISPOSED')) {
|
|
543
|
+
throw error;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
return result;
|
|
548
|
+
}
|
|
549
|
+
//# sourceMappingURL=execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/planning/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,+BAA+B,EAC/B,2BAA2B,EAC3B,SAAS,EACT,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,iCAAiC,EACjC,0BAA0B,GAW3B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AACxC,MAAM,OAAO,GAAG,qBAA2B,CAAC;AAC5C,uEAAuE;AACvE,2EAA2E;AAC3E,MAAM,kCAAkC,GAAG,EAAE,CAAC;AA2F9C,MAAM,mBAAoB,SAAQ,uBAAuB;IAC9C,OAAO,CAAqB;IAC5B,SAAS,CAAqB;IAC9B,UAAU,CAAqB;IAExC,YAAY,OAIX;QACC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1D,KAAK,CACH,SAAS,EACT,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,EAClC,2GAA2G,EAC3G,+FAA+F,CAChG,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,0BAA2B,SAAQ,YAAY;IACnD;QACE,KAAK,CACH,yBAAyB,EACzB,uJAAuJ,CACxJ,CAAC;IACJ,CAAC;CACF;AAED,MAAM,6BAA8B,SAAQ,YAAY;IAC7C,SAAS,CAAS;IAClB,YAAY,CAAqB;IAE1C,YACE,YAA8B,EAC9B,YAAgC;QAEhC,KAAK,CACH,4BAA4B,EAC5B,sDAAsD,YAAY,CAAC,OAAO,KAAK,YAAY,CAAC,SAAS,yEAAyE,EAC9K,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,CAClC,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAED,MAAM,uBAAwB,SAAQ,YAAY;IACvC,SAAS,CAAY;IACrB,oBAAoB,CAAS;IAEtC,YAAY,SAAoB,EAAE,oBAA4B;QAC5D,KAAK,CACH,qBAAqB,EACrB,eAAe,SAAS,yCAAyC,MAAM,CAAC,oBAAoB,CAAC,+FAA+F,CAC7L,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACnD,CAAC;CACF;AAED,MAAM,gCAAiC,SAAQ,YAAY;IAChD,SAAS,CAAY;IACrB,gBAAgB,CAAmB;IAE5C,YAAY,SAAoB,EAAE,gBAAkC;QAClE,KAAK,CACH,+BAA+B,EAC/B,eAAe,SAAS,kHAAkH,CAC3I,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,8BAA+B,SAAQ,YAAY;IAC9C,SAAS,GAAG,YAAqB,CAAC;IAClC,SAAS,GAAG,SAAS,CAAC;IAE/B;QACE,KAAK,CACH,6BAA6B,EAC7B,qNAAqN,CACtN,CAAC;IACJ,CAAC;CACF;AAED,SAAS,OAAO,CACd,KAAa,EACb,KAAc,EACd,aAAqB,EACrB,MAAc;IAEd,MAAM,IAAI,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,CAAC;QACH,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,gBAAgB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;QACzE,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC;QAC1B,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC;QACzE,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,SAAS,CAAC,OAAO,CAAC;YACtD,CAAC,CAAC,GAAG,IAAI,iBAAiB,OAAO,EAAE;YACnC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,qBAAqB,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAa,EACb,KAAc,EACd,aAAqB,EACrB,MAAc;IAEd,OAAO,CAAC,KAAK,EAAE,uBAAuB,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,oBAAoB,CAC3B,UAA4C,EAC5C,QAAgB;IAEhB,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,KAAa;IAC/C,MAAM,MAAM,GAAG,GAAU,EAAE,CACzB,qBAAqB,CACnB,KAAK,EACL,KAAK,EACL,2DAA2D,EAC3D,6FAA6F,CAC9F,CAAC;IACJ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAe,CAAC;IAC/B,IAAI,OAAgB,CAAC;IACrB,IAAI,yBAAkC,CAAC;IACvC,IAAI,gBAAyB,CAAC;IAC9B,IAAI,uBAAgC,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACzC,yBAAyB,GAAG,OAAO,CAAC,GAAG,CACrC,MAAM,EACN,2BAA2B,CAC5B,CAAC;QACF,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC3D,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC;IACX,CAAC;IACD,IACE,OAAO,OAAO,KAAK,QAAQ;QAC3B,CAAC,SAAS,CAAC,OAAO,CAAC;QACnB,CAAC,OAAO,yBAAyB,KAAK,UAAU;YAC9C,OAAO,gBAAgB,KAAK,UAAU;YACtC,OAAO,uBAAuB,KAAK,UAAU,CAAC,EAChD,CAAC;QACD,MAAM,EAAE,CAAC;IACX,CAAC;IACD,MAAM,UAAU,GAKZ,EAAE,OAAO,EAAE,OAAkB,EAAE,CAAC;IACpC,IAAI,OAAO,yBAAyB,KAAK,UAAU,EAAE,CAAC;QACpD,UAAU,CAAC,yBAAyB,GAAG,oBAAoB,CACzD,yBAAoF,EACpF,MAAM,CACP,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE,CAAC;QAC3C,UAAU,CAAC,gBAAgB,GAAG,oBAAoB,CAChD,gBAAgE,EAChE,MAAM,CACP,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,uBAAuB,KAAK,UAAU,EAAE,CAAC;QAClD,UAAU,CAAC,uBAAuB,GAAG,oBAAoB,CACvD,uBAA8E,EAC9E,MAAM,CACP,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAsB,CAAC;AACxD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,qBAAqB,CACnB,SAAS,EACT,KAAK,EACL,wDAAwD,EACxD,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CACL,SAAS,EACT,mBAAmB,EACnB,wDAAwD,EACxD,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IACD,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;QAC7B,MAAM,GAAG,CAAC;QACV,MAAM,GAAG,kCAAkC,EAC3C,CAAC;QACD,qBAAqB,CACnB,SAAS,EACT,KAAK,EACL,+BAA+B,MAAM,CAAC,kCAAkC,CAAC,0CAA0C,EACnH,6GAA6G,CAC9G,CAAC;IACJ,CAAC;IACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,OAAgB,CAAC;QACrB,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CACL,WAAW,MAAM,CAAC,KAAK,CAAC,GAAG,EAC3B,mBAAmB,EACnB,kCAAkC,EAClC,oDAAoD,CACrD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CACL,WAAW,MAAM,CAAC,KAAK,CAAC,GAAG,EAC3B,SAAS,EACT,iCAAiC,EACjC,yEAAyE,CAC1E,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,UAAU,CACjB,KAAa,EACb,KAAQ;IAER,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAA0B,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CACL,KAAK,EACL,mBAAmB,EACnB,cAAc,KAAK,SAAS,EAC5B,wBAAwB,KAAK,0DAA0D,CACxF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,KAAa,EACb,KAAc,EACd,QAAgB,EAChB,OAAe;IAEf,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAK,QAAmB,GAAG,OAAO,EAAE,CAAC;QACtE,qBAAqB,CACnB,KAAK,EACL,QAAQ,EACR,0DAA0D,MAAM,CAAC,OAAO,CAAC,EAAE,EAC3E,OAAO,KAAK,yCAAyC,CACtD,CAAC;IACJ,CAAC;IACD,OAAO,QAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,eAAe,CACtB,KAAyB;IAEzB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,qBAAqB,CACnB,SAAS,EACT,KAAK,EACL,8BAA8B,EAC9B,wFAAwF,CACzF,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IAC/D,MAAM,wBAAwB,GAAG,UAAU,CACzC,KAAK,EACL,0BAA0B,CAC3B,CAAC;IACF,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,sBAAsB,CACrC;QACE,QAAQ,EAAE,QAAQ,CAAC,OAAO;QAC1B,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;QACnD,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAC/D,GAAG,CAAC,wBAAwB,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,wBAAwB,EAAE,CAAC;KAClC,EACD,uBAAuB,CACxB,CAAC;IACF,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QAC3C,QAAQ;QACR,cAAc,EAAE,YAAY,CAC1B,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACxB,CAAC,CACF;QACD,wBAAwB,EAAE,QAAQ,CAAC,wBAAwB;QAC3D,OAAO;QACP,SAAS,EAAE,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;KACvE,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,IAAU,EACV,OAAoC;IAEpC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAChC,MAAM,SAAS,GAAc,EAAE,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO;SAC/B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;SAC/B,MAAM,CACL,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAC5B,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,CACjE,CAAC;IACJ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,mBAAmB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAqC;IAErC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAClE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CACvC,CAAC,MAAM,EAAE,EAAE,CACT,CAAC,4BAA4B,CAAC,MAAM,CAAC;QACrC,CAAC,0BAA0B,CAAC,MAAM,CAAC,CACtC,CAAC;IACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CACL,SAAS,EACT,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EACzC,kFAAkF,EAClF,iHAAiH,CAClH,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,sCAAsC,CAC7C,QAAkD,EAClD,MAAmB;IAEnB,IAAI,CAAC,CAAC,oBAAoB,IAAI,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,QAAQ,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC9E,8EAA8E;IAC9E,6EAA6E;IAC7E,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC;IAC1D,MAAM,eAAe,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAC/C,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,GAAG,EAAE,CAAC,CAC/D,CAAC;IACF,MAAM,kBAAkB,GAAI,MAAgD;SACzE,kBAAkB,CAAC;IACtB,IACE,CAAC,sBAAsB,IAAI,kBAAkB;QAC3C,CAAC,CAAC,kBAAkB,CAAC,SAAS;QAC9B,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,eAAe,EACjD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAC9B,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,CAAC,KAAK,IAAI,cAAc,IAAI,KAAK,GAAG,cAAc,GAAG,EAAE,CAAC;QACxD,IAAI,KAAK,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CACnC,QAAkD,EAClD,MAAmB;IAEnB,IAAI,CAAC,sCAAsC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9D,OAAO,CACL,SAAS,EACT,uCAAuC,EACvC,mJAAmJ,EACnJ,iJAAiJ,CAClJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CACpC,WAAkD;IAElD,IAAI,CAAC,CAAC,sBAAsB,IAAI,WAAW,CAAC,kBAAkB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,KAAK,GAAY,WAAW,CAAC,kBAAkB,CAAC,oBAAoB,CAAC;IAC3E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;QAC/D,OAAO,CACL,SAAS,EACT,6CAA6C,EAC7C,6FAA6F,EAC7F,2JAA2J,CAC5J,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,KAAc,EACd,IAAgB;IAEhB,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAClE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,UAAU,CAC3B,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAC5D,CAAC;IACF,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAAoB,EACpB,aAA0C,EAC1C,UAAsB;IAEtB,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE;QAChE,UAAU;KACX,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAC9D,CAAC;IACF,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACpD,IACE,OAAO,KAAK,SAAS;YACrB,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnD,YAAY,CAAC,QAAQ,EACvB,CAAC;YACD,MAAM,IAAI,6BAA6B,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAyB,EACzB,SAAqB;IAErB,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,QAAQ,GAAyC;QACrD,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC;KACb,CAAC;IACF,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,YAAoB;IACtC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,SAAS,CAAC;QACR,MAAM,SAAS,GAAG,YAAY,GAAG,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC;QAC9D,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO;QAC3B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAClC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAC5D,CAAC;IACJ,CAAC;AACH,CAAC;AAMD,KAAK,UAAU,kBAAkB,CAC/B,IAAsB,EACtB,SAAiB,EACjB,SAAiB;IAEjB,MAAM,SAAS,GAAmC,OAAO,CAAC,OAAO,EAAE;SAChE,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,CACH,CAAC,KAAK,EAAE,EAAE,CACR,SAAS,KAAK,CAAC,IAAI,YAAY,EAAE,GAAG,SAAS,IAAI,SAAS;QACxD,CAAC,CAAC,EAAE,MAAM,EAAE,UAAmB,EAAE;QACjC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAmB,EAAE,KAAK,EAAE,EAC5C,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,UAAmB,EAAE,CAAC,CACxC,CAAC;IACJ,IAAI,KAAoC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,EAAE;QAC9D,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;YAC1E,KAAK,GAAG,UAAU,CAChB,GAAG,EAAE;gBACH,IAAI,YAAY,EAAE,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;oBAC5C,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACN,QAAQ,EAAE,CAAC;gBACb,CAAC;YACH,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,iBAAiB,CAAC,CACzC,CAAC;QACJ,CAAC,CAAC;QACF,QAAQ,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzD,YAAY,CAAC,KAAM,CAAC,CAAC;IACrB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,QAAsB,EACtB,SAAoB,EACpB,oBAAmC,EACnC,OAAoC;IAEpC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ;aAC7B,oBAAoB,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC;aACrE,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,kBAAkB,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,CACnB,MAA+C,EACX,EAAE;QACtC,IAAI,MAAM,EAAE,GAAG,KAAK,IAAI,IAAI,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,IAAI,gCAAgC,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACpE,CAAC;QACD,IACE,MAAM,KAAK,IAAI;YACf,MAAM,KAAK,SAAS;YACpB,iBAAiB,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,UAAU,CAAC,EAChE,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,SAAS;gBACT,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,CACvB,SAA8C,EAC9C,yBAAwC,IAAI,EACtB,EAAE,CACxB,MAAM,CAAC,MAAM,CAAC;QACZ,sBAAsB;QACtB,oBAAoB;QACpB,SAAS;QACT,MAAM,EAAE,iBAAiB;QACzB,SAAS;QACT,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IACL,MAAM,cAAc,GAAG,CACrB,sBAA8B,EACR,EAAE,CACxB,MAAM,CAAC,MAAM,CAAC;QACZ,sBAAsB;QACtB,oBAAoB;QACpB,MAAM,EAAE,SAAS;QACjB,SAAS;QACT,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IACL,SAAS,CAAC;QACR,IAAI,UAAU,GAAG,MAAM,UAAU,EAAE,CAAC;QACpC,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACrC,OAAO,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;QAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC5C,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAC9C,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,EACxE,SAAS,EACT,OAAO,CAAC,SAAS,CAClB,CAAC;QACF,IAAI,eAAe,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1C,OAAO,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC;QAC1C,IACE,oBAAoB,KAAK,IAAI;YAC7B,WAAW,GAAG,oBAAoB;YAClC,MAAM,IAAI,IAAI,EACd,CAAC;YACD,UAAU,GAAG,MAAM,UAAU,EAAE,CAAC;YAChC,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACrC,OAAO,gBAAgB,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;YAC1B,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,kBAAkB,KAAK,SAAS;gBAAE,OAAO,kBAAkB,CAAC;YAChE,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,uBAAuB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC;QACrE,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;QAC1D,IAAI,YAAY,EAAE,GAAG,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpD,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,QAAsB,EACtB,WAAqD,EACrD,OAAqC,EACrC,aAAmD,EACnD,UAAsB,EACtB,SAAkC;IASlC,MAAM,SAAS,EAAE,YAAY,EAAE,CAAC;IAChC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAChC,MAAM,oBAAoB,GAA6B,MAAM,CAAC,MAAM,CAAC;YACnE,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,KAAK,CAAC,uBAAuB,CAAC,YAAY,EAAE,MAAM;gBAChD,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;oBAClC,4BAA4B,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;oBAClD,6BAA6B,CAC3B,MAA+C,CAChD,CAAC;gBACJ,CAAC;gBACD,MAAM,SAAS,EAAE,oBAAoB,EAAE,CAAC;gBACxC,mBAAmB,GAAG,IAAI,CAAC;gBAC3B,OAAO,aAAa,CAAC,uBAAuB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACrE,CAAC;SACF,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5C,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CACzD,CAAC;QACF,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,oBAAoB,EAAE,IAAI;gBAC1B,SAAS,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAClC,MAAM,iCAAiC,CAAC,cAAc,EAAE,WAAW,CAAC,CACxD;gBACd,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB;gBAAE,MAAM,KAAK,CAAC;YACtC,MAAM,IAAI,8BAA8B,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CACnC,CAAC,MAAM,EAAmE,EAAE,CAC1E,4BAA4B,CAAC,MAAM,CAAC;QACpC,0BAA0B,CAAC,MAAM,CAAC,CACrC,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC7E,4BAA4B,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,SAAS,EAAE,cAAc,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,QAAQ;aACtC,eAAe,CAAC,+BAA+B,CAAC,MAAM,CAAC,EAAE;YACxD,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,EAAE;YACd,mBAAmB,EAAE,UAAU;SAChC,CAAC;aACD,IAAI,EAAE,CAAC;QACV,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,sBAAsB,EAAE,IAAI;gBAC5B,oBAAoB;gBACpB,SAAS,EAAE,YAAY;gBACvB,MAAM,EAAE,iBAAiB;gBACzB,SAAS;gBACT,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,oBAAoB;YACpB,SAAS,EAAE,kBAAkB;YAC7B,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,sBAAsB,EAAE,IAAI;YAC5B,oBAAoB;YACpB,SAAS,EAAE,YAAY;YACvB,MAAM,EAAE,iBAAiB;YACzB,SAAS;YACT,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAoB,EACpB,IAAU,EACV,OAA2B;IAE3B,OAAO,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAoB,EACpB,IAAU,EACV,OAA2B,EAC3B,SAAkC;IAElC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,0BAA0B,EAAE,CAAC;IACnE,MAAM,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE;QACpD,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO;QACpC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,GAAG,CAAC,SAAS,CAAC,gBAAgB,KAAK,SAAS;YAC1C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,EAAE,CAAC;QACrD,GAAG,CAAC,SAAS,CAAC,wBAAwB,KAAK,SAAS;YAClD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,wBAAwB,EAAE,SAAS,CAAC,wBAAwB,EAAE,CAAC;KACtE,CAAC,CAAC;IACH,MAAM,SAAS,EAAE,UAAU,CACzB,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CACtD,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,aAAa,CACpC,QAAQ,EACR,WAAW,EACX,OAAO,EACP,aAAa,EACb,SAAS,CAAC,UAAU,EACpB,SAAS,CACV,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,QAAQ,EACR,UAAU,CAAC,SAAS,EACpB,UAAU,CAAC,oBAAoB,EAC/B,SAAS,CACV,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CACH,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,CACnE,EAAE,CAAC;gBACF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|