@xyo-network/wallet 7.0.5 → 7.0.7
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/README.md +1 -47
- package/dist/neutral/index.d.ts +5 -1
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +2 -156
- package/dist/neutral/index.mjs.map +3 -3
- package/package.json +16 -24
- package/dist/neutral/HDWallet.d.ts +0 -38
- package/dist/neutral/HDWallet.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,49 +1,3 @@
|
|
|
1
|
-
[![logo][]](https://xyo.network)
|
|
2
|
-
|
|
3
1
|
# @xyo-network/wallet
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
[![license][license-badge]][license-link]
|
|
7
|
-
|
|
8
|
-
> Primary SDK for using XYO Protocol 2.0
|
|
9
|
-
|
|
10
|
-
## Install
|
|
11
|
-
|
|
12
|
-
Using npm:
|
|
13
|
-
|
|
14
|
-
```sh
|
|
15
|
-
npm install {{name}}
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Using yarn:
|
|
19
|
-
|
|
20
|
-
```sh
|
|
21
|
-
yarn add {{name}}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Using pnpm:
|
|
25
|
-
|
|
26
|
-
```sh
|
|
27
|
-
pnpm add {{name}}
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
Using bun:
|
|
31
|
-
|
|
32
|
-
```sh
|
|
33
|
-
bun add {{name}}
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
## License
|
|
38
|
-
|
|
39
|
-
See the [LICENSE](LICENSE) file for license rights and limitations (LGPL-3.0-only).
|
|
40
|
-
|
|
41
|
-
## Credits
|
|
42
|
-
|
|
43
|
-
[Made with 🔥 and ❄️ by XYO Foundation](https://xyo.network)
|
|
44
|
-
|
|
45
|
-
[npm-badge]: https://img.shields.io/npm/v/@xyo-network/wallet.svg
|
|
46
|
-
[npm-link]: https://www.npmjs.com/package/@xyo-network/wallet
|
|
47
|
-
[license-badge]: https://img.shields.io/npm/l/@xyo-network/wallet.svg
|
|
48
|
-
[license-link]: https://github.com/xylabs/sdk-js/blob/main/LICENSE
|
|
49
|
-
[logo]: https://cdn.xy.company/img/brand/XYO_full_colored.png
|
|
3
|
+
Deprecated compatibility stub. Use `@xyo-network/sdk-protocol/wallet` instead.
|
package/dist/neutral/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,kCAAkC,CAAA"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -1,157 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
-
var __decorateClass = (decorators, target, key, kind) => {
|
|
5
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
6
|
-
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
7
|
-
if (decorator = decorators[i])
|
|
8
|
-
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
9
|
-
if (kind && result) __defProp(target, key, result);
|
|
10
|
-
return result;
|
|
11
|
-
};
|
|
12
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
13
|
-
|
|
14
|
-
// src/HDWallet.ts
|
|
15
|
-
import { generateMnemonic } from "@scure/bip39";
|
|
16
|
-
import { wordlist as englishWordlist } from "@scure/bip39/wordlists/english.js";
|
|
17
|
-
import {
|
|
18
|
-
asAddress,
|
|
19
|
-
assertEx,
|
|
20
|
-
globallyUnique,
|
|
21
|
-
hexFromHexString,
|
|
22
|
-
staticImplements,
|
|
23
|
-
toUint8Array
|
|
24
|
-
} from "@xylabs/sdk";
|
|
25
|
-
import { Account, PrivateKey } from "@xyo-network/account";
|
|
26
|
-
import {
|
|
27
|
-
isMnemonicInitializationConfig,
|
|
28
|
-
isPhraseInitializationConfig,
|
|
29
|
-
isPrivateKeyInitializationConfig
|
|
30
|
-
} from "@xyo-network/account-model";
|
|
31
|
-
import {
|
|
32
|
-
defaultPath,
|
|
33
|
-
HDNodeWallet,
|
|
34
|
-
Mnemonic
|
|
35
|
-
} from "ethers";
|
|
36
|
-
var HDWallet = class extends Account {
|
|
37
|
-
node;
|
|
38
|
-
neuter = () => {
|
|
39
|
-
this.node.neuter();
|
|
40
|
-
return this;
|
|
41
|
-
};
|
|
42
|
-
constructor(key, node, privateKey) {
|
|
43
|
-
super(key, privateKey);
|
|
44
|
-
this.node = node;
|
|
45
|
-
}
|
|
46
|
-
static async createFromNodeInternal(node, previousHash) {
|
|
47
|
-
const privateKey = toUint8Array(node.privateKey.replace("0x", ""));
|
|
48
|
-
assertEx(privateKey.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`);
|
|
49
|
-
const key = await PrivateKey.create(privateKey.buffer);
|
|
50
|
-
const wallet = new HDWallet(super._protectedConstructorKey, node, key);
|
|
51
|
-
const newWallet = await wallet.loadPreviousHash(previousHash);
|
|
52
|
-
return this._addressMap[newWallet.address]?.deref() ?? newWallet;
|
|
53
|
-
}
|
|
54
|
-
static getCachedWalletOrCacheNewWallet(createdWallet) {
|
|
55
|
-
const existingWallet = this._addressMap[createdWallet.address]?.deref();
|
|
56
|
-
if (existingWallet) {
|
|
57
|
-
return existingWallet;
|
|
58
|
-
}
|
|
59
|
-
const ref = new WeakRef(createdWallet);
|
|
60
|
-
this._addressMap[createdWallet.address] = ref;
|
|
61
|
-
return createdWallet;
|
|
62
|
-
}
|
|
63
|
-
static async create(opts) {
|
|
64
|
-
if (isPhraseInitializationConfig(opts)) {
|
|
65
|
-
return await this.fromPhrase(opts.phrase);
|
|
66
|
-
}
|
|
67
|
-
if (isMnemonicInitializationConfig(opts)) {
|
|
68
|
-
return await this.fromPhrase(opts.mnemonic, opts.path);
|
|
69
|
-
}
|
|
70
|
-
if (isPrivateKeyInitializationConfig(opts)) {
|
|
71
|
-
throw new Error("Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.");
|
|
72
|
-
}
|
|
73
|
-
throw new Error("Invalid initialization config");
|
|
74
|
-
}
|
|
75
|
-
static async createFromNode(node, previousHash) {
|
|
76
|
-
return await this.createFromNodeInternal(node, previousHash);
|
|
77
|
-
}
|
|
78
|
-
static async fromExtendedKey(key) {
|
|
79
|
-
const node = HDNodeWallet.fromExtendedKey(key);
|
|
80
|
-
return await this.createFromNode(node);
|
|
81
|
-
}
|
|
82
|
-
static async fromMnemonic(mnemonic, path = defaultPath) {
|
|
83
|
-
const node = HDNodeWallet.fromMnemonic(mnemonic, path);
|
|
84
|
-
const createdWallet = await this.createFromNodeInternal(node);
|
|
85
|
-
return this.getCachedWalletOrCacheNewWallet(createdWallet);
|
|
86
|
-
}
|
|
87
|
-
static async fromPhrase(phrase, path = defaultPath) {
|
|
88
|
-
return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path);
|
|
89
|
-
}
|
|
90
|
-
static async fromSeed(seed) {
|
|
91
|
-
const node = HDNodeWallet.fromSeed(toUint8Array(seed));
|
|
92
|
-
const createdWallet = await this.createFromNodeInternal(node);
|
|
93
|
-
return this.getCachedWalletOrCacheNewWallet(createdWallet);
|
|
94
|
-
}
|
|
95
|
-
static generateMnemonic(wordlist = englishWordlist, strength = 256) {
|
|
96
|
-
return generateMnemonic(wordlist, strength);
|
|
97
|
-
}
|
|
98
|
-
static async random() {
|
|
99
|
-
return await this.fromMnemonic(Mnemonic.fromPhrase(this.generateMnemonic()));
|
|
100
|
-
}
|
|
101
|
-
get address() {
|
|
102
|
-
return asAddress(hexFromHexString(this.node.address, { prefix: false }), true);
|
|
103
|
-
}
|
|
104
|
-
get addressBytes() {
|
|
105
|
-
return toUint8Array(this.address, void 0, 16).buffer;
|
|
106
|
-
}
|
|
107
|
-
get chainCode() {
|
|
108
|
-
return this.node.chainCode;
|
|
109
|
-
}
|
|
110
|
-
get depth() {
|
|
111
|
-
return this.node.depth;
|
|
112
|
-
}
|
|
113
|
-
get extendedKey() {
|
|
114
|
-
return this.node.extendedKey;
|
|
115
|
-
}
|
|
116
|
-
get fingerprint() {
|
|
117
|
-
return this.node.fingerprint;
|
|
118
|
-
}
|
|
119
|
-
get index() {
|
|
120
|
-
return this.node.index;
|
|
121
|
-
}
|
|
122
|
-
get mnemonic() {
|
|
123
|
-
return this.node.mnemonic;
|
|
124
|
-
}
|
|
125
|
-
get parentFingerprint() {
|
|
126
|
-
return this.node.parentFingerprint;
|
|
127
|
-
}
|
|
128
|
-
get path() {
|
|
129
|
-
return this.node.path;
|
|
130
|
-
}
|
|
131
|
-
get privateKey() {
|
|
132
|
-
return this.node.privateKey.toLowerCase();
|
|
133
|
-
}
|
|
134
|
-
get publicKey() {
|
|
135
|
-
return this.node.publicKey.toLowerCase();
|
|
136
|
-
}
|
|
137
|
-
async derivePath(path) {
|
|
138
|
-
if (path.startsWith("m/")) {
|
|
139
|
-
const parentPath = this.path;
|
|
140
|
-
if (parentPath !== null && path.startsWith(parentPath)) {
|
|
141
|
-
const childPath = path.slice(parentPath.length + 1);
|
|
142
|
-
return await HDWallet.createFromNode(this.node.derivePath(childPath));
|
|
143
|
-
}
|
|
144
|
-
throw new Error(`Invalid absolute path ${path} for wallet with path ${parentPath}`);
|
|
145
|
-
}
|
|
146
|
-
return await HDWallet.createFromNode(this.node.derivePath(path));
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
__publicField(HDWallet, "uniqueName", globallyUnique("HDWallet", HDWallet, "xyo"));
|
|
150
|
-
__publicField(HDWallet, "_addressMap", {});
|
|
151
|
-
HDWallet = __decorateClass([
|
|
152
|
-
staticImplements()
|
|
153
|
-
], HDWallet);
|
|
154
|
-
export {
|
|
155
|
-
HDWallet
|
|
156
|
-
};
|
|
1
|
+
// src/index.ts
|
|
2
|
+
export * from "@xyo-network/sdk-protocol/wallet";
|
|
157
3
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
3
|
+
"sources": ["../../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * @deprecated Use `@xyo-network/sdk-protocol/wallet` instead.\n * `@xyo-network/wallet` is a backward-compatibility re-export stub.\n */\nexport * from '@xyo-network/sdk-protocol/wallet'\n"],
|
|
5
|
+
"mappings": ";AAIA,cAAc;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/wallet",
|
|
3
|
-
"version": "7.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "7.0.7",
|
|
4
|
+
"description": "DEPRECATED - use @xyo-network/sdk-protocol/wallet. Backward-compatibility re-export stub for @xyo-network/wallet.",
|
|
5
|
+
"deprecated": "Use @xyo-network/sdk-protocol/wallet instead. @xyo-network/wallet is a backward-compatibility re-export stub and will not receive further updates.",
|
|
5
6
|
"homepage": "https://xyo.network",
|
|
6
7
|
"bugs": {
|
|
7
8
|
"url": "git+https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues",
|
|
@@ -34,42 +35,33 @@
|
|
|
34
35
|
"README.md"
|
|
35
36
|
],
|
|
36
37
|
"dependencies": {
|
|
37
|
-
"@xyo-network/
|
|
38
|
-
"@xyo-network/account-model": "~7.0.5",
|
|
39
|
-
"@xyo-network/address": "~7.0.5",
|
|
40
|
-
"@xyo-network/key-model": "~7.0.5",
|
|
41
|
-
"@xyo-network/wallet-model": "~7.0.5"
|
|
38
|
+
"@xyo-network/sdk-protocol": "~7.0.7"
|
|
42
39
|
},
|
|
43
40
|
"devDependencies": {
|
|
44
|
-
"@
|
|
45
|
-
"@
|
|
46
|
-
"@opentelemetry/sdk-trace-base": "^2.8.0",
|
|
47
|
-
"@scure/base": "~2.2.0",
|
|
48
|
-
"@scure/bip39": "~2.2.0",
|
|
49
|
-
"@xylabs/sdk": "^7.0.1",
|
|
50
|
-
"@xylabs/toolchain": "~8.5.3",
|
|
51
|
-
"@xylabs/tsconfig": "~8.5.3",
|
|
52
|
-
"@xylabs/vitest-matchers": "^7.0.1",
|
|
53
|
-
"async-mutex": "^0.5.0",
|
|
41
|
+
"@xylabs/toolchain": "~8.5.13",
|
|
42
|
+
"@xylabs/tsconfig": "~8.5.13",
|
|
54
43
|
"browserslist": "4.28.4",
|
|
55
44
|
"eslint": "^10.6.0",
|
|
56
45
|
"eslint-import-resolver-typescript": "^4.4.5",
|
|
57
|
-
"
|
|
58
|
-
"tslib": "~2.8.1",
|
|
59
|
-
"typescript": "~6.0.3",
|
|
60
|
-
"vite": "^8.1.0",
|
|
61
|
-
"vitest": "~4.1.9",
|
|
62
|
-
"zod": "^4.4.3"
|
|
46
|
+
"typescript": "~6.0.3"
|
|
63
47
|
},
|
|
64
48
|
"peerDependencies": {
|
|
49
|
+
"@ariestools/sdk": "^7.0.4",
|
|
65
50
|
"@bitauth/libauth": "~3.0",
|
|
51
|
+
"@noble/post-quantum": "~0.6.1",
|
|
66
52
|
"@opentelemetry/api": "^1.9",
|
|
67
53
|
"@opentelemetry/sdk-trace-base": "^2.7",
|
|
68
54
|
"@scure/base": "~2.2",
|
|
69
55
|
"@scure/bip39": "~2.2",
|
|
70
|
-
"@xylabs/
|
|
56
|
+
"@xylabs/geo": "^7.0",
|
|
57
|
+
"@xylabs/threads": "^7.0",
|
|
58
|
+
"ajv": "^8.20",
|
|
71
59
|
"async-mutex": "^0.5",
|
|
60
|
+
"debug": "^4.4",
|
|
72
61
|
"ethers": "^6.16",
|
|
62
|
+
"hash-wasm": "~4.12",
|
|
63
|
+
"idb": "^8.0",
|
|
64
|
+
"observable-fns": "^0.6",
|
|
73
65
|
"zod": "^4.4"
|
|
74
66
|
},
|
|
75
67
|
"engines": {
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { Hex } from '@xylabs/sdk';
|
|
2
|
-
import { Account } from '@xyo-network/account';
|
|
3
|
-
import type { AccountConfig } from '@xyo-network/account-model';
|
|
4
|
-
import type { XyoAddress } from '@xyo-network/address';
|
|
5
|
-
import type { PrivateKeyInstance } from '@xyo-network/key-model';
|
|
6
|
-
import type { WalletInstance } from '@xyo-network/wallet-model';
|
|
7
|
-
import { HDNodeWallet, Mnemonic } from 'ethers';
|
|
8
|
-
export declare class HDWallet extends Account implements WalletInstance {
|
|
9
|
-
static readonly uniqueName: string;
|
|
10
|
-
protected static _addressMap: Record<XyoAddress, WeakRef<WalletInstance>>;
|
|
11
|
-
protected readonly node: HDNodeWallet;
|
|
12
|
-
neuter: () => HDWallet;
|
|
13
|
-
constructor(key: symbol, node: HDNodeWallet, privateKey: PrivateKeyInstance);
|
|
14
|
-
protected static createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance>;
|
|
15
|
-
protected static getCachedWalletOrCacheNewWallet(createdWallet: WalletInstance): WalletInstance;
|
|
16
|
-
static create(opts?: AccountConfig): Promise<WalletInstance>;
|
|
17
|
-
static createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance>;
|
|
18
|
-
static fromExtendedKey(key: string): Promise<WalletInstance>;
|
|
19
|
-
static fromMnemonic(mnemonic: Mnemonic, path?: string): Promise<WalletInstance>;
|
|
20
|
-
static fromPhrase(phrase: string, path?: string): Promise<WalletInstance>;
|
|
21
|
-
static fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance>;
|
|
22
|
-
static generateMnemonic(wordlist?: string[], strength?: number): string;
|
|
23
|
-
static random(): Promise<WalletInstance>;
|
|
24
|
-
get address(): XyoAddress;
|
|
25
|
-
get addressBytes(): ArrayBufferLike;
|
|
26
|
-
get chainCode(): string;
|
|
27
|
-
get depth(): number;
|
|
28
|
-
get extendedKey(): string;
|
|
29
|
-
get fingerprint(): string;
|
|
30
|
-
get index(): number;
|
|
31
|
-
get mnemonic(): Mnemonic | null;
|
|
32
|
-
get parentFingerprint(): string;
|
|
33
|
-
get path(): string | null;
|
|
34
|
-
get privateKey(): Hex;
|
|
35
|
-
get publicKey(): Hex;
|
|
36
|
-
derivePath(path: string): Promise<WalletInstance>;
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=HDWallet.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HDWallet.d.ts","sourceRoot":"","sources":["../../src/HDWallet.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAItC,OAAO,EAAE,OAAO,EAAc,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAM/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,2BAA2B,CAAA;AAC7E,OAAO,EACQ,YAAY,EAAE,QAAQ,EACpC,MAAM,QAAQ,CAAA;AAEf,qBACa,QAAS,SAAQ,OAAQ,YAAW,cAAc;IAC7D,gBAAyB,UAAU,SAA8C;IACjF,iBAA0B,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAK;IAEvF,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAErC,MAAM,EAAE,MAAM,QAAQ,CAGrB;gBAGC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,kBAAkB;qBAMT,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IASjH,SAAS,CAAC,MAAM,CAAC,+BAA+B,CAAC,aAAa,EAAE,cAAc,GAAG,cAAc;WAUzE,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;WAa9D,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;WAIlF,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;WAMrD,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;WAMrF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;WAI/E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAM9E,MAAM,CAAC,gBAAgB,CAAC,QAAQ,GAAE,MAAM,EAAoB,EAAE,QAAQ,SAAM,GAAG,MAAM;WAI/D,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAIvD,IAAa,OAAO,IAAI,UAAU,CAEjC;IAED,IAAa,YAAY,IAAI,eAAe,CAE3C;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAExB;IAED,IAAI,UAAU,IAAI,GAAG,CAEpB;IAED,IAAI,SAAS,IAAI,GAAG,CAEnB;IAEK,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAYxD"}
|