solvoid 1.0.0 → 1.1.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/CHANGELOG.md +105 -0
- package/dist/client.d.ts +73 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +281 -0
- package/dist/client.js.map +1 -0
- package/dist/crypto/poseidon.d.ts +124 -0
- package/dist/crypto/poseidon.d.ts.map +1 -0
- package/dist/crypto/poseidon.js +293 -0
- package/dist/crypto/poseidon.js.map +1 -0
- package/dist/events/bus.d.ts +44 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +83 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/{sdk/index.d.ts → index.d.ts} +2 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/{sdk/index.js → index.js} +21 -11
- package/dist/index.js.map +1 -0
- package/dist/integrity.d.ts +371 -0
- package/dist/integrity.d.ts.map +1 -0
- package/dist/integrity.js +260 -0
- package/dist/integrity.js.map +1 -0
- package/dist/network/shadow-rpc.d.ts +36 -0
- package/dist/network/shadow-rpc.d.ts.map +1 -0
- package/dist/network/shadow-rpc.js +163 -0
- package/dist/network/shadow-rpc.js.map +1 -0
- package/dist/{sdk/passport → passport}/manager.d.ts +9 -18
- package/dist/passport/manager.d.ts.map +1 -0
- package/dist/passport/manager.js +148 -0
- package/dist/passport/manager.js.map +1 -0
- package/dist/pipeline.d.ts +25 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +127 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/privacy/relayer.d.ts.map +1 -0
- package/dist/privacy/relayer.js.map +1 -0
- package/dist/privacy/shield.d.ts +27 -0
- package/dist/privacy/shield.d.ts.map +1 -0
- package/dist/privacy/shield.js +289 -0
- package/dist/privacy/shield.js.map +1 -0
- package/dist/{sdk/privacy-engine.d.ts → privacy-engine.d.ts} +2 -1
- package/dist/privacy-engine.d.ts.map +1 -0
- package/dist/{sdk/privacy-engine.js → privacy-engine.js} +24 -15
- package/dist/privacy-engine.js.map +1 -0
- package/dist/registry/idl-fetcher.d.ts +10 -0
- package/dist/registry/idl-fetcher.d.ts.map +1 -0
- package/dist/{sdk/registry → registry}/idl-fetcher.js +19 -16
- package/dist/registry/idl-fetcher.js.map +1 -0
- package/dist/registry/programs.d.ts.map +1 -0
- package/dist/registry/programs.js.map +1 -0
- package/dist/rescue/analyzer.d.ts +20 -0
- package/dist/rescue/analyzer.d.ts.map +1 -0
- package/dist/rescue/analyzer.js +137 -0
- package/dist/rescue/analyzer.js.map +1 -0
- package/dist/rescue/builder.d.ts +23 -0
- package/dist/rescue/builder.d.ts.map +1 -0
- package/dist/rescue/builder.js +164 -0
- package/dist/rescue/builder.js.map +1 -0
- package/dist/security/key-rotation.d.ts +153 -0
- package/dist/security/key-rotation.d.ts.map +1 -0
- package/dist/security/key-rotation.js +354 -0
- package/dist/security/key-rotation.js.map +1 -0
- package/dist/{sdk/semantics → semantics}/analyzer.d.ts.map +1 -1
- package/dist/{sdk/semantics → semantics}/analyzer.js.map +1 -1
- package/dist/semantics/decoder.d.ts.map +1 -0
- package/dist/semantics/decoder.js.map +1 -0
- package/dist/{sdk/semantics → semantics}/graph.d.ts.map +1 -1
- package/dist/{sdk/semantics → semantics}/graph.js.map +1 -1
- package/dist/semantics/idl-registry.d.ts +8 -0
- package/dist/semantics/idl-registry.d.ts.map +1 -0
- package/dist/{sdk/semantics → semantics}/idl-registry.js +23 -7
- package/dist/semantics/idl-registry.js.map +1 -0
- package/dist/semantics/types.d.ts +10 -0
- package/dist/semantics/types.d.ts.map +1 -0
- package/dist/{sdk → semantics}/types.js.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/address.d.ts +10 -0
- package/dist/utils/address.d.ts.map +1 -0
- package/dist/utils/address.js +45 -0
- package/dist/utils/address.js.map +1 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +39 -76
- package/LICENSE +0 -21
- package/README.md +0 -123
- package/SECURITY.md +0 -174
- package/bin/solvoid-scan +0 -2
- package/dist/cli/privacy-scan.d.ts +0 -11
- package/dist/cli/privacy-scan.d.ts.map +0 -1
- package/dist/cli/privacy-scan.js +0 -112
- package/dist/cli/privacy-scan.js.map +0 -1
- package/dist/cli/solvoid-scan.d.ts +0 -13
- package/dist/cli/solvoid-scan.d.ts.map +0 -1
- package/dist/cli/solvoid-scan.js +0 -174
- package/dist/cli/solvoid-scan.js.map +0 -1
- package/dist/cli/test-forensics.d.ts +0 -2
- package/dist/cli/test-forensics.d.ts.map +0 -1
- package/dist/cli/test-forensics.js +0 -90
- package/dist/cli/test-forensics.js.map +0 -1
- package/dist/cli/test-scenarios.d.ts +0 -2
- package/dist/cli/test-scenarios.d.ts.map +0 -1
- package/dist/cli/test-scenarios.js +0 -96
- package/dist/cli/test-scenarios.js.map +0 -1
- package/dist/examples/enterprise-demo.js +0 -65
- package/dist/sdk/client.d.ts +0 -77
- package/dist/sdk/client.d.ts.map +0 -1
- package/dist/sdk/client.js +0 -180
- package/dist/sdk/client.js.map +0 -1
- package/dist/sdk/compliance/identity.d.ts +0 -34
- package/dist/sdk/compliance/identity.d.ts.map +0 -1
- package/dist/sdk/compliance/identity.js +0 -55
- package/dist/sdk/compliance/identity.js.map +0 -1
- package/dist/sdk/compliance/threat-model.d.ts +0 -14
- package/dist/sdk/compliance/threat-model.d.ts.map +0 -1
- package/dist/sdk/compliance/threat-model.js +0 -101
- package/dist/sdk/compliance/threat-model.js.map +0 -1
- package/dist/sdk/forensics/mev.js +0 -50
- package/dist/sdk/forensics/order-flow.d.ts +0 -20
- package/dist/sdk/forensics/order-flow.d.ts.map +0 -1
- package/dist/sdk/forensics/order-flow.js +0 -104
- package/dist/sdk/forensics/order-flow.js.map +0 -1
- package/dist/sdk/forensics/simulation.d.ts +0 -14
- package/dist/sdk/forensics/simulation.d.ts.map +0 -1
- package/dist/sdk/forensics/simulation.js +0 -45
- package/dist/sdk/forensics/simulation.js.map +0 -1
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/index.js.map +0 -1
- package/dist/sdk/network/shadow-rpc.d.ts +0 -18
- package/dist/sdk/network/shadow-rpc.d.ts.map +0 -1
- package/dist/sdk/network/shadow-rpc.js +0 -32
- package/dist/sdk/network/shadow-rpc.js.map +0 -1
- package/dist/sdk/obfuscator.d.ts +0 -36
- package/dist/sdk/obfuscator.d.ts.map +0 -1
- package/dist/sdk/obfuscator.js +0 -77
- package/dist/sdk/obfuscator.js.map +0 -1
- package/dist/sdk/passport/manager.d.ts.map +0 -1
- package/dist/sdk/passport/manager.js +0 -107
- package/dist/sdk/passport/manager.js.map +0 -1
- package/dist/sdk/pipeline.d.ts +0 -34
- package/dist/sdk/pipeline.d.ts.map +0 -1
- package/dist/sdk/pipeline.js +0 -81
- package/dist/sdk/pipeline.js.map +0 -1
- package/dist/sdk/privacy/confidential-transfer.d.ts +0 -81
- package/dist/sdk/privacy/confidential-transfer.d.ts.map +0 -1
- package/dist/sdk/privacy/confidential-transfer.js +0 -158
- package/dist/sdk/privacy/confidential-transfer.js.map +0 -1
- package/dist/sdk/privacy/history.d.ts +0 -11
- package/dist/sdk/privacy/history.d.ts.map +0 -1
- package/dist/sdk/privacy/history.js +0 -110
- package/dist/sdk/privacy/history.js.map +0 -1
- package/dist/sdk/privacy/light-protocol.d.ts +0 -42
- package/dist/sdk/privacy/light-protocol.d.ts.map +0 -1
- package/dist/sdk/privacy/light-protocol.js +0 -83
- package/dist/sdk/privacy/light-protocol.js.map +0 -1
- package/dist/sdk/privacy/relayer.d.ts.map +0 -1
- package/dist/sdk/privacy/relayer.js.map +0 -1
- package/dist/sdk/privacy/safe-obfuscator.d.ts +0 -38
- package/dist/sdk/privacy/safe-obfuscator.d.ts.map +0 -1
- package/dist/sdk/privacy/safe-obfuscator.js +0 -101
- package/dist/sdk/privacy/safe-obfuscator.js.map +0 -1
- package/dist/sdk/privacy/shield.d.ts +0 -34
- package/dist/sdk/privacy/shield.d.ts.map +0 -1
- package/dist/sdk/privacy/shield.js +0 -174
- package/dist/sdk/privacy/shield.js.map +0 -1
- package/dist/sdk/privacy/zk.js +0 -43
- package/dist/sdk/privacy-engine.d.ts.map +0 -1
- package/dist/sdk/privacy-engine.js.map +0 -1
- package/dist/sdk/registry/idl-fetcher.d.ts +0 -17
- package/dist/sdk/registry/idl-fetcher.d.ts.map +0 -1
- package/dist/sdk/registry/idl-fetcher.js.map +0 -1
- package/dist/sdk/registry/programs.d.ts.map +0 -1
- package/dist/sdk/registry/programs.js.map +0 -1
- package/dist/sdk/rescue/analyzer.d.ts +0 -22
- package/dist/sdk/rescue/analyzer.d.ts.map +0 -1
- package/dist/sdk/rescue/analyzer.js +0 -46
- package/dist/sdk/rescue/analyzer.js.map +0 -1
- package/dist/sdk/rescue/builder.d.ts +0 -16
- package/dist/sdk/rescue/builder.d.ts.map +0 -1
- package/dist/sdk/rescue/builder.js +0 -33
- package/dist/sdk/rescue/builder.js.map +0 -1
- package/dist/sdk/semantics/decoder.d.ts.map +0 -1
- package/dist/sdk/semantics/decoder.js.map +0 -1
- package/dist/sdk/semantics/idl-registry.d.ts +0 -7
- package/dist/sdk/semantics/idl-registry.d.ts.map +0 -1
- package/dist/sdk/semantics/idl-registry.js.map +0 -1
- package/dist/sdk/semantics/types.d.ts +0 -44
- package/dist/sdk/semantics/types.d.ts.map +0 -1
- package/dist/sdk/semantics/types.js.map +0 -1
- package/dist/sdk/simulator.d.ts +0 -15
- package/dist/sdk/simulator.d.ts.map +0 -1
- package/dist/sdk/simulator.js +0 -133
- package/dist/sdk/simulator.js.map +0 -1
- package/dist/sdk/types.d.ts +0 -53
- package/dist/sdk/types.d.ts.map +0 -1
- package/dist/sdk/utils/config.d.ts.map +0 -1
- package/dist/sdk/utils/config.js.map +0 -1
- package/dist/sdk/utils/logger.d.ts.map +0 -1
- package/dist/sdk/utils/logger.js.map +0 -1
- package/dist/tests/unit/idl-registry.test.d.ts +0 -2
- package/dist/tests/unit/idl-registry.test.d.ts.map +0 -1
- package/dist/tests/unit/idl-registry.test.js +0 -35
- package/dist/tests/unit/idl-registry.test.js.map +0 -1
- package/dist/tools/exploit_demonstration.js +0 -99
- package/dist/tools/gen-tx.js +0 -29
- package/dist/tools/get-recent-tx.js +0 -18
- /package/dist/{sdk/privacy → privacy}/relayer.d.ts +0 -0
- /package/dist/{sdk/privacy → privacy}/relayer.js +0 -0
- /package/dist/{sdk/registry → registry}/programs.d.ts +0 -0
- /package/dist/{sdk/registry → registry}/programs.js +0 -0
- /package/dist/{sdk/semantics → semantics}/analyzer.d.ts +0 -0
- /package/dist/{sdk/semantics → semantics}/analyzer.js +0 -0
- /package/dist/{sdk/semantics → semantics}/decoder.d.ts +0 -0
- /package/dist/{sdk/semantics → semantics}/decoder.js +0 -0
- /package/dist/{sdk/semantics → semantics}/graph.d.ts +0 -0
- /package/dist/{sdk/semantics → semantics}/graph.js +0 -0
- /package/dist/{sdk/semantics → semantics}/types.js +0 -0
- /package/dist/{sdk/types.js → types.js} +0 -0
- /package/dist/{sdk/utils → utils}/config.d.ts +0 -0
- /package/dist/{sdk/utils → utils}/config.js +0 -0
- /package/dist/{sdk/utils → utils}/logger.d.ts +0 -0
- /package/dist/{sdk/utils → utils}/logger.js +0 -0
package/dist/sdk/simulator.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ForensicsSimulator = void 0;
|
|
7
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
8
|
-
const logger_1 = require("./utils/logger");
|
|
9
|
-
const p_retry_1 = __importDefault(require("p-retry"));
|
|
10
|
-
class ForensicsSimulator {
|
|
11
|
-
constructor(rpcUrl = "https://api.mainnet-beta.solana.com") {
|
|
12
|
-
this.connection = new web3_js_1.Connection(rpcUrl, 'confirmed');
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Simulates a transaction and converts the result into forensic events.
|
|
16
|
-
*/
|
|
17
|
-
async simulate(tx, baseTxJson) {
|
|
18
|
-
logger_1.logger.debug("Executing RPC Simulation...");
|
|
19
|
-
const simResult = await (0, p_retry_1.default)(async () => {
|
|
20
|
-
return await this.connection.simulateTransaction(tx, {
|
|
21
|
-
replaceRecentBlockhash: true,
|
|
22
|
-
sigVerify: false,
|
|
23
|
-
commitment: 'confirmed',
|
|
24
|
-
accounts: {
|
|
25
|
-
encoding: "base64",
|
|
26
|
-
addresses: baseTxJson.message.accountKeys
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}, {
|
|
30
|
-
retries: 3,
|
|
31
|
-
minTimeout: 1000,
|
|
32
|
-
onFailedAttempt: error => {
|
|
33
|
-
logger_1.logger.warn(`RPC attempt ${error.attemptNumber} failed: ${error.message}`);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
if (simResult.value.err) {
|
|
37
|
-
logger_1.logger.error("Simulation Failed:", simResult.value.err);
|
|
38
|
-
throw new Error("Transaction Simulation Failed.");
|
|
39
|
-
}
|
|
40
|
-
const updates = [];
|
|
41
|
-
if (simResult.value.accounts) {
|
|
42
|
-
simResult.value.accounts.forEach((acc, index) => {
|
|
43
|
-
if (!acc)
|
|
44
|
-
return;
|
|
45
|
-
const address = baseTxJson.message.accountKeys[index];
|
|
46
|
-
updates.push({
|
|
47
|
-
pubkey: address,
|
|
48
|
-
owner: acc.owner,
|
|
49
|
-
lamports: acc.lamports,
|
|
50
|
-
data: acc.data[0],
|
|
51
|
-
executable: acc.executable,
|
|
52
|
-
rentEpoch: acc.rentEpoch || 0,
|
|
53
|
-
writeVersion: 0
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
signature: "simulated_state",
|
|
59
|
-
accountUpdates: updates
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Reconstructs the full transaction structure by resolving ALTs.
|
|
64
|
-
*/
|
|
65
|
-
async expandTransaction(tx) {
|
|
66
|
-
const addressLookupTableAccounts = [];
|
|
67
|
-
const message = tx.message;
|
|
68
|
-
if (message.version === 0) {
|
|
69
|
-
const lookups = message.addressTableLookups;
|
|
70
|
-
if (lookups && lookups.length > 0) {
|
|
71
|
-
logger_1.logger.debug(`Resolving ${lookups.length} Address Lookup Tables...`);
|
|
72
|
-
for (const lookup of lookups) {
|
|
73
|
-
const res = await this.connection.getAddressLookupTable(lookup.accountKey);
|
|
74
|
-
if (res.value) {
|
|
75
|
-
addressLookupTableAccounts.push(res.value);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
const decompiled = web3_js_1.TransactionMessage.decompile(message, { addressLookupTableAccounts });
|
|
81
|
-
const keyMap = new Map();
|
|
82
|
-
const addKey = (pubkey, isSigner, isWritable) => {
|
|
83
|
-
const k = pubkey.toBase58();
|
|
84
|
-
const curr = keyMap.get(k);
|
|
85
|
-
if (curr) {
|
|
86
|
-
curr.isSigner = curr.isSigner || isSigner;
|
|
87
|
-
curr.isWritable = curr.isWritable || isWritable;
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
keyMap.set(k, { isSigner, isWritable });
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
addKey(decompiled.payerKey, true, true);
|
|
94
|
-
for (const ix of decompiled.instructions) {
|
|
95
|
-
addKey(ix.programId, false, false);
|
|
96
|
-
for (const meta of ix.keys) {
|
|
97
|
-
addKey(meta.pubkey, meta.isSigner, meta.isWritable);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
const entries = Array.from(keyMap.entries());
|
|
101
|
-
const payer = decompiled.payerKey.toBase58();
|
|
102
|
-
const signersWritable = entries.filter(([, v]) => v.isSigner && v.isWritable).map(([k]) => k)
|
|
103
|
-
.sort((a, b) => (a === payer ? -1 : b === payer ? 1 : 0));
|
|
104
|
-
const signersReadonly = entries.filter(([, v]) => v.isSigner && !v.isWritable).map(([k]) => k);
|
|
105
|
-
const nonSignersWritable = entries.filter(([, v]) => !v.isSigner && v.isWritable).map(([k]) => k);
|
|
106
|
-
const nonSignersReadonly = entries.filter(([, v]) => !v.isSigner && !v.isWritable).map(([k]) => k);
|
|
107
|
-
const accountKeys = [
|
|
108
|
-
...signersWritable,
|
|
109
|
-
...signersReadonly,
|
|
110
|
-
...nonSignersWritable,
|
|
111
|
-
...nonSignersReadonly
|
|
112
|
-
];
|
|
113
|
-
const instructions = decompiled.instructions.map(ix => ({
|
|
114
|
-
programIdIndex: accountKeys.indexOf(ix.programId.toBase58()),
|
|
115
|
-
accounts: ix.keys.map(k => accountKeys.indexOf(k.pubkey.toBase58())),
|
|
116
|
-
data: ix.data.toString('base64')
|
|
117
|
-
}));
|
|
118
|
-
return {
|
|
119
|
-
message: {
|
|
120
|
-
accountKeys,
|
|
121
|
-
header: {
|
|
122
|
-
numRequiredSignatures: signersWritable.length + signersReadonly.length,
|
|
123
|
-
numReadonlySignedAccounts: signersReadonly.length,
|
|
124
|
-
numReadonlyUnsignedAccounts: nonSignersReadonly.length
|
|
125
|
-
},
|
|
126
|
-
instructions
|
|
127
|
-
},
|
|
128
|
-
signatures: tx.signatures.map(s => Buffer.from(s).toString('base64'))
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
exports.ForensicsSimulator = ForensicsSimulator;
|
|
133
|
-
//# sourceMappingURL=simulator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../sdk/simulator.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/types.d.ts
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
export type LeakType = "identity" | "metadata" | "state-leak" | "cpi-linkage";
|
|
2
|
-
export type VisibilityScope = "PUBLIC" | "PROGRAM" | "LOCAL";
|
|
3
|
-
export interface Leak {
|
|
4
|
-
type: LeakType;
|
|
5
|
-
scope: string;
|
|
6
|
-
visibility: VisibilityScope;
|
|
7
|
-
description: string;
|
|
8
|
-
remediation?: string;
|
|
9
|
-
severity: "CRITICAL" | "HIGH" | "MEDIUM" | "LOW";
|
|
10
|
-
programName?: string;
|
|
11
|
-
}
|
|
12
|
-
export interface GovernanceResult {
|
|
13
|
-
status: "SURFACE_SCAN_PASSED" | "REGRESSION";
|
|
14
|
-
unacceptedLiabilities: {
|
|
15
|
-
leak: Leak;
|
|
16
|
-
reason: string;
|
|
17
|
-
}[];
|
|
18
|
-
remediationHints: string[];
|
|
19
|
-
privacyScore: number;
|
|
20
|
-
}
|
|
21
|
-
export interface TransactionJSON {
|
|
22
|
-
message: {
|
|
23
|
-
accountKeys: string[];
|
|
24
|
-
header: {
|
|
25
|
-
numRequiredSignatures: number;
|
|
26
|
-
};
|
|
27
|
-
instructions: {
|
|
28
|
-
programIdIndex: number;
|
|
29
|
-
accounts: number[];
|
|
30
|
-
data: string;
|
|
31
|
-
}[];
|
|
32
|
-
};
|
|
33
|
-
meta?: {
|
|
34
|
-
innerInstructions?: {
|
|
35
|
-
index: number;
|
|
36
|
-
instructions: {
|
|
37
|
-
programIdIndex: number;
|
|
38
|
-
accounts: number[];
|
|
39
|
-
data: string;
|
|
40
|
-
}[];
|
|
41
|
-
}[];
|
|
42
|
-
logMessages?: string[];
|
|
43
|
-
};
|
|
44
|
-
signatures: string[];
|
|
45
|
-
}
|
|
46
|
-
export interface GeyserTransactionEvents {
|
|
47
|
-
signature: string;
|
|
48
|
-
accountUpdates: {
|
|
49
|
-
pubkey: string;
|
|
50
|
-
data: string;
|
|
51
|
-
}[];
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/sdk/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../sdk/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GACd,UAAU,GACV,UAAU,GACV,YAAY,GACZ,aAAa,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,eAAe,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,qBAAqB,GAAG,YAAY,CAAC;IAC7C,qBAAqB,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE;QACL,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE;YACJ,qBAAqB,EAAE,MAAM,CAAC;SACjC,CAAC;QACF,YAAY,EAAE;YACV,cAAc,EAAE,MAAM,CAAC;YACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnB,IAAI,EAAE,MAAM,CAAC;SAChB,EAAE,CAAC;KACP,CAAC;IACF,IAAI,CAAC,EAAE;QACH,iBAAiB,CAAC,EAAE;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,YAAY,EAAE;gBACV,cAAc,EAAE,MAAM,CAAC;gBACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACnB,IAAI,EAAE,MAAM,CAAC;aAChB,EAAE,CAAC;SACP,EAAE,CAAC;QACJ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACP"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../sdk/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI1C,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAY;;IAWnB,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,OAAO,GAAG,IAAI;IAkB3B,WAAW,IAAI,MAAM,GAAG,SAAS;CAG3C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../sdk/utils/config.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAW1C,MAAa,YAAY;IAGrB;QACI,IAAI,CAAC,MAAM,GAAG;YACV,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,qCAAqC;YACpE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;YACjC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;YAC7C,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;SAC7C,CAAC;IACN,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAEM,SAAS;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAExC,IAAI,CAAC;YACD,wBAAwB;YACxB,6BAA6B;YAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,OAAO,iBAAO,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACrF,CAAC;YACD,iBAAiB;YACjB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7B,OAAO,iBAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEM,WAAW;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;IACrC,CAAC;CACJ;AArCD,oCAqCC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../sdk/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,eAAO,MAAM,MAAM,gBAcjB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../sdk/utils/logger.ts"],"names":[],"mappings":";;;;;;AACA,sDAA8B;AAEjB,QAAA,MAAM,GAAG,iBAAO,CAAC,YAAY,CAAC;IACvC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACtC,MAAM,EAAE,iBAAO,CAAC,MAAM,CAAC,OAAO,CAC1B,iBAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,iBAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CACxB;IACD,UAAU,EAAE;QACR,IAAI,iBAAO,CAAC,UAAU,CAAC,OAAO,CAAC;YAC3B,MAAM,EAAE,iBAAO,CAAC,MAAM,CAAC,OAAO,CAC1B,iBAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EACzB,iBAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAC1B;SACJ,CAAC;KACL;CACJ,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"idl-registry.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/idl-registry.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const globals_1 = require("@jest/globals");
|
|
4
|
-
const idl_registry_1 = require("../../sdk/semantics/idl-registry");
|
|
5
|
-
(0, globals_1.describe)('IdlRegistry', () => {
|
|
6
|
-
let registry;
|
|
7
|
-
(0, globals_1.beforeEach)(() => {
|
|
8
|
-
registry = new idl_registry_1.IdlRegistry();
|
|
9
|
-
});
|
|
10
|
-
(0, globals_1.it)('should load pre-seeded system program IDL', async () => {
|
|
11
|
-
const idl = await registry.fetchIdl('11111111111111111111111111111111');
|
|
12
|
-
(0, globals_1.expect)(idl.name).toBe('system_program');
|
|
13
|
-
});
|
|
14
|
-
(0, globals_1.it)('should load pre-seeded SPL token IDL', async () => {
|
|
15
|
-
const idl = await registry.fetchIdl('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA');
|
|
16
|
-
(0, globals_1.expect)(idl.name).toBe('spl_token');
|
|
17
|
-
});
|
|
18
|
-
(0, globals_1.it)('should register custom IDLs', () => {
|
|
19
|
-
const mockIdl = { name: 'mock' };
|
|
20
|
-
registry.registerIdl('Mock111111111111111111111111111111111', mockIdl);
|
|
21
|
-
// Using any cast to avoid TS issues in mock test
|
|
22
|
-
const saved = registry.cache.get('Mock111111111111111111111111111111111');
|
|
23
|
-
(0, globals_1.expect)(saved.name).toBe('mock');
|
|
24
|
-
});
|
|
25
|
-
(0, globals_1.it)('should return null for unknown programs', async () => {
|
|
26
|
-
const idl = await registry.fetchIdl('Unknown11111111111111111111111111111111');
|
|
27
|
-
(0, globals_1.expect)(idl).toBeNull();
|
|
28
|
-
});
|
|
29
|
-
(0, globals_1.it)('fix parameter implicit any error', () => {
|
|
30
|
-
// This addresses the "Parameter 'res' implicitly has an 'any' type" error
|
|
31
|
-
const mockFn = (res) => res;
|
|
32
|
-
(0, globals_1.expect)(mockFn('test')).toBe('test');
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
//# sourceMappingURL=idl-registry.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"idl-registry.test.js","sourceRoot":"","sources":["../../../tests/unit/idl-registry.test.ts"],"names":[],"mappings":";;AAAA,2CAAiE;AACjE,mEAA+D;AAE/D,IAAA,kBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;IACzB,IAAI,QAAqB,CAAC;IAE1B,IAAA,oBAAU,EAAC,GAAG,EAAE;QACZ,QAAQ,GAAG,IAAI,0BAAW,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;QACxE,IAAA,gBAAM,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,6CAA6C,CAAC,CAAC;QACnF,IAAA,gBAAM,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACjC,QAAQ,CAAC,WAAW,CAAC,uCAAuC,EAAE,OAAO,CAAC,CAAC;QACvE,iDAAiD;QACjD,MAAM,KAAK,GAAS,QAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACxF,IAAA,gBAAM,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/E,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,0EAA0E;QAC1E,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC;QACjC,IAAA,gBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const privacy_engine_1 = require("../sdk/privacy-engine");
|
|
4
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
-
// Setup
|
|
6
|
-
const engine = new privacy_engine_1.PrivacyEngine();
|
|
7
|
-
const user = web3_js_1.Keypair.generate();
|
|
8
|
-
const attacker = web3_js_1.Keypair.generate();
|
|
9
|
-
const userPubkey = user.publicKey.toBase58();
|
|
10
|
-
console.log("\n💀 PREDATORY OFFENSIVE SECURITY INTELLECT - SYSTEM ANALYSIS 💀\n");
|
|
11
|
-
console.log(`Target Identity: ${userPubkey.slice(0, 8)}...`);
|
|
12
|
-
// --- EXPLOIT 1: THE KING'S ROBES (System Program Blindness) ---
|
|
13
|
-
console.log("\n[1] Executing Exploit: 'The King's Robes' (System Program Blindness)...");
|
|
14
|
-
// Construct a raw JSON reflecting a SystemProgram.transfer(User, Attacker)
|
|
15
|
-
// In a real tx, AccountKeys = [User (Payer, Signer), Attacker, SystemProgram]
|
|
16
|
-
// Instruction: ProgramIdIndex = 2 (System), Accounts = [0, 1]
|
|
17
|
-
// We expect the engine to SKIP this because ProgramId is SystemProgram (111...)
|
|
18
|
-
const systemProgramId = web3_js_1.SystemProgram.programId.toBase58();
|
|
19
|
-
const txTransfer = {
|
|
20
|
-
message: {
|
|
21
|
-
accountKeys: [userPubkey, attacker.publicKey.toBase58(), systemProgramId],
|
|
22
|
-
header: {
|
|
23
|
-
numRequiredSignatures: 1,
|
|
24
|
-
numReadonlySignedAccounts: 0,
|
|
25
|
-
numReadonlyUnsignedAccounts: 0
|
|
26
|
-
},
|
|
27
|
-
instructions: [{
|
|
28
|
-
programIdIndex: 2, // System Program
|
|
29
|
-
accounts: [0, 1], // User -> Attacker
|
|
30
|
-
data: "AgAAAAAAAAA=" // Dummy transfer instruction data
|
|
31
|
-
}]
|
|
32
|
-
},
|
|
33
|
-
signatures: ["dummy_signature"]
|
|
34
|
-
};
|
|
35
|
-
const leaks1 = engine.analyzeTransaction(txTransfer);
|
|
36
|
-
if (leaks1.length === 0) {
|
|
37
|
-
console.log("❌ RESULT: ZERO LEAKS DETECTED.");
|
|
38
|
-
console.log(" The engine explicitly ignores 'SystemProgram'.");
|
|
39
|
-
console.log(" A direct transfer of funds (The ultimate graph link) is INVISIBLE.");
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
console.log("✅ RESULT: LEAKS DETECTED.", leaks1);
|
|
43
|
-
}
|
|
44
|
-
// --- EXPLOIT 2: THE BROKEN LENS (ALT Blindness) ---
|
|
45
|
-
console.log("\n[2] Executing Exploit: 'The Broken Lens' (Address Lookup Table Blindness)...");
|
|
46
|
-
// Scenario: A V0 transaction using ALTs.
|
|
47
|
-
// The 'accountKeys' array in message ONLY has static keys.
|
|
48
|
-
// The 'loadedAddresses' in meta has the dynamic keys.
|
|
49
|
-
// The user is HIDDEN in the ALT (loadedAddresses).
|
|
50
|
-
const dexProgramId = "Dex1111111111111111111111111111111111111"; // Hypothetical DEX
|
|
51
|
-
const txAlt = {
|
|
52
|
-
message: {
|
|
53
|
-
accountKeys: [
|
|
54
|
-
attacker.publicKey.toBase58(), // Payer (Attacker pays!)
|
|
55
|
-
dexProgramId // Static Program
|
|
56
|
-
],
|
|
57
|
-
header: {
|
|
58
|
-
numRequiredSignatures: 1,
|
|
59
|
-
numReadonlySignedAccounts: 0,
|
|
60
|
-
numReadonlyUnsignedAccounts: 0
|
|
61
|
-
},
|
|
62
|
-
instructions: [{
|
|
63
|
-
programIdIndex: 1, // Dex Program
|
|
64
|
-
accounts: [0, 2], // 0=Attacker, 2=User (from ALT!)
|
|
65
|
-
// Note: In V0, index 2 points to loadedAddresses[0] if static length is 2.
|
|
66
|
-
data: "dummydata"
|
|
67
|
-
}]
|
|
68
|
-
},
|
|
69
|
-
meta: {
|
|
70
|
-
loadedAddresses: {
|
|
71
|
-
writable: [userPubkey], // User is here!
|
|
72
|
-
readonly: []
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
signatures: ["dummy_signature"]
|
|
76
|
-
};
|
|
77
|
-
try {
|
|
78
|
-
const leaks2 = engine.analyzeTransaction(txAlt);
|
|
79
|
-
// Check if the user was found
|
|
80
|
-
const userFound = leaks2.some(l => l.description.includes(userPubkey.slice(0, 8)));
|
|
81
|
-
if (!userFound) {
|
|
82
|
-
console.log("❌ RESULT: USER NOT DETECTED.");
|
|
83
|
-
console.log(` Internal Engine State Check:`);
|
|
84
|
-
// The engine logic: ix.accounts.map(idx => accountKeys[idx])
|
|
85
|
-
// accountKeys has length 2. Index is 2.
|
|
86
|
-
// accountKeys[2] is UNDEFINED.
|
|
87
|
-
// [undefined].includes(user) is FALSE.
|
|
88
|
-
console.log(" The engine fails to look in 'loadedAddresses'.");
|
|
89
|
-
console.log(" The User is invisible by simply moving them to a Lookup Table.");
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
console.log("✅ RESULT: USER DETECTED.", leaks2);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
catch (e) {
|
|
96
|
-
console.log("💥 CRASH: The engine choked on the ALT structure.");
|
|
97
|
-
console.log(" Error:", e.message);
|
|
98
|
-
}
|
|
99
|
-
console.log("\n💀 DEMONSTRATION COMPLETE 💀");
|
package/dist/tools/gen-tx.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
4
|
-
// Mock Transaction Construction
|
|
5
|
-
const user = "5ZwJqpwa5u43t4i88888888888888888888888888888"; // Needs to be 32 bytes valid key? No, VersionedTransaction uses whatever.
|
|
6
|
-
// But web3.js needs valid keys to serialize.
|
|
7
|
-
// I'll just output the same base64 I'd expect if I could serialize it easily,
|
|
8
|
-
// OR I'll just use a valid mock transaction buffer.
|
|
9
|
-
// Let's use a dummy valid transaction base64 from a real network or just a valid structure.
|
|
10
|
-
// Actually, `privacy-scan` in `--fix` mode calls `VersionedTransaction.deserialize`.
|
|
11
|
-
// It needs to be a valid serializable transaction.
|
|
12
|
-
// Minimal approach: Use the sample-swap.json and pretend we passed it as base64?
|
|
13
|
-
// No, the tool expects raw base64 arg if not file.
|
|
14
|
-
// Let's create a script that outputs a valid base64 string for a dummy transaction
|
|
15
|
-
const fromKey = web3_js_1.Keypair.generate();
|
|
16
|
-
const toKey = web3_js_1.Keypair.generate();
|
|
17
|
-
const recentBlockhash = web3_js_1.Keypair.generate().publicKey.toBase58(); // Mock blockhash
|
|
18
|
-
const tx = new web3_js_1.Transaction({
|
|
19
|
-
feePayer: fromKey.publicKey,
|
|
20
|
-
recentBlockhash: recentBlockhash
|
|
21
|
-
});
|
|
22
|
-
tx.add(web3_js_1.SystemProgram.transfer({
|
|
23
|
-
fromPubkey: fromKey.publicKey,
|
|
24
|
-
toPubkey: toKey.publicKey,
|
|
25
|
-
lamports: 1000
|
|
26
|
-
}));
|
|
27
|
-
// We need to sign it to serialize? Or `serialize({ requireAllSignatures: false })`
|
|
28
|
-
const serialized = tx.serialize({ requireAllSignatures: false });
|
|
29
|
-
console.log(serialized.toString('base64'));
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
4
|
-
async function main() {
|
|
5
|
-
const programId = new web3_js_1.PublicKey(process.argv[2]);
|
|
6
|
-
const connection = new web3_js_1.Connection("https://api.mainnet-beta.solana.com");
|
|
7
|
-
// Get recent signatures for this address
|
|
8
|
-
const signatures = await connection.getSignaturesForAddress(programId, { limit: 1 });
|
|
9
|
-
if (signatures.length === 0) {
|
|
10
|
-
console.error("No transactions found for this address.");
|
|
11
|
-
process.exit(1);
|
|
12
|
-
}
|
|
13
|
-
console.log(signatures[0].signature);
|
|
14
|
-
}
|
|
15
|
-
main().catch(e => {
|
|
16
|
-
console.error(e);
|
|
17
|
-
process.exit(1);
|
|
18
|
-
});
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|