@cmts-dev/carmentis-sdk-core 1.4.1 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blockchain/virtualBlockchains/ApplicationLedgerVb.d.ts +3 -4
- package/dist/blockchain/virtualBlockchains/ApplicationLedgerVb.d.ts.map +1 -1
- package/dist/carmentis-sdk-core.cjs +2 -2
- package/dist/carmentis-sdk-core.js +11 -34
- package/dist/crypto/encryption/public-key-encryption/MlKemPrivateDecryptionKey.d.ts +0 -1
- package/dist/crypto/encryption/public-key-encryption/MlKemPrivateDecryptionKey.d.ts.map +1 -1
- package/dist/crypto/encryption/public-key-encryption/MlKemPublicKeyEncryptionScheme.d.ts +3 -0
- package/dist/crypto/encryption/public-key-encryption/MlKemPublicKeyEncryptionScheme.d.ts.map +1 -1
- package/dist/wallet/ActorCrypto.d.ts +1 -0
- package/dist/wallet/ActorCrypto.d.ts.map +1 -1
- package/dist/wallet/WalletCrypto.d.ts +0 -42
- package/dist/wallet/WalletCrypto.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -9047,7 +9047,7 @@ var wv = (e, t, n, r, i) => Cv(e, bv(e, t, n), r, i), Tv = class {
|
|
|
9047
9047
|
privateKey;
|
|
9048
9048
|
publicKey;
|
|
9049
9049
|
constructor(e) {
|
|
9050
|
-
super()
|
|
9050
|
+
super();
|
|
9051
9051
|
let { secretKey: t, publicKey: n } = Vd.keygen(e);
|
|
9052
9052
|
this.privateKey = t, this.publicKey = n;
|
|
9053
9053
|
}
|
|
@@ -14054,7 +14054,7 @@ var kS = /* @__PURE__ */ function(e) {
|
|
|
14054
14054
|
return this.deriveChannelSectionMaterial(e, "CHANNEL_SECTION_IV", t, n, 12);
|
|
14055
14055
|
}
|
|
14056
14056
|
deriveChannelSectionMaterial(e, t, n, r, i) {
|
|
14057
|
-
let a = new Uint8Array(), o = new TextEncoder(), s = A.binaryFrom(o.encode(t),
|
|
14057
|
+
let a = new Uint8Array(), o = new TextEncoder(), s = A.binaryFrom(o.encode(t), o.encode("HEIGHT"), new Uint8Array(A.intToByteArray(n, 6)), o.encode("CHANNEL_ID"), new Uint8Array(A.intToByteArray(r, 6)));
|
|
14058
14058
|
return new Dv().deriveKey(e, a, s, i);
|
|
14059
14059
|
}
|
|
14060
14060
|
async getChannelKey(e, t, n) {
|
|
@@ -14066,8 +14066,8 @@ var kS = /* @__PURE__ */ function(e) {
|
|
|
14066
14066
|
return await this.getChannelKeyFromInvitation(e, t, r);
|
|
14067
14067
|
}
|
|
14068
14068
|
async deriveChannelKey(e, t) {
|
|
14069
|
-
let n = await this.getGenesisSeed(), r = new TextEncoder(), i = A.binaryFrom(r.encode("CHANNEL_KEY")
|
|
14070
|
-
return new Dv().deriveKeyNoSalt(
|
|
14069
|
+
let n = await this.getGenesisSeed(), r = new TextEncoder(), i = A.binaryFrom(r.encode("CHANNEL_KEY"), r.encode("GENESIS_SEED"), n.toBytes(), r.encode("CHANNEL_ID"), new Uint8Array(A.intToByteArray(t, 6)));
|
|
14070
|
+
return new Dv().deriveKeyNoSalt(e, i, 32);
|
|
14071
14071
|
}
|
|
14072
14072
|
async getChannelKeyFromInvitation(e, t, n) {
|
|
14073
14073
|
gS.assert(Number.isInteger(e), "Expected actor id with type number"), gS.assert(Number.isInteger(t), `Expected channel id of type number: got ${typeof t}`);
|
|
@@ -16937,8 +16937,12 @@ var Rw = class e {
|
|
|
16937
16937
|
constructor(e) {
|
|
16938
16938
|
this.actorSeed = e;
|
|
16939
16939
|
}
|
|
16940
|
+
static encoderStringAsBytes(e) {
|
|
16941
|
+
return new TextEncoder().encode(e);
|
|
16942
|
+
}
|
|
16940
16943
|
static createFromAccountSeedAndVbSeed(t, n) {
|
|
16941
|
-
|
|
16944
|
+
let r = t, i = $v.createDefaultKDF(), a = A.binaryFrom(this.encoderStringAsBytes("ACTOR_SEED"), this.encoderStringAsBytes("VB_SEED"), n);
|
|
16945
|
+
return new e(i.deriveKeyNoSalt(r, a, 32));
|
|
16942
16946
|
}
|
|
16943
16947
|
static parseFromString(t, n = new UE()) {
|
|
16944
16948
|
return new e(n.decode(t));
|
|
@@ -16950,14 +16954,14 @@ var Rw = class e {
|
|
|
16950
16954
|
return this.actorSeed;
|
|
16951
16955
|
}
|
|
16952
16956
|
async getPrivateSignatureKey(e = this.signatureSchemeId) {
|
|
16953
|
-
let t = $v.createDefaultKDF(), n = this.encoderStringAsBytes("SIG"), r = t.deriveKeyNoSalt(this.actorSeed, n, 32);
|
|
16957
|
+
let t = $v.createDefaultKDF(), n = A.binaryFrom(this.encoderStringAsBytes("SIG"), new Uint8Array(A.intToByteArray(e, 6))), r = t.deriveKeyNoSalt(this.actorSeed, n, 32);
|
|
16954
16958
|
return $v.createPrivateSignatureKey(e, r);
|
|
16955
16959
|
}
|
|
16956
16960
|
async getPublicSignatureKey(e = this.signatureSchemeId) {
|
|
16957
16961
|
return (await this.getPrivateSignatureKey(e)).getPublicKey();
|
|
16958
16962
|
}
|
|
16959
16963
|
getPrivateDecryptionKey(e = this.pkeSchemeId) {
|
|
16960
|
-
let t = $v.createDefaultKDF(), n = this.encoderStringAsBytes("PKE"), r = t.deriveKeyNoSalt(this.actorSeed, n, 64);
|
|
16964
|
+
let t = $v.createDefaultKDF(), n = A.binaryFrom(this.encoderStringAsBytes("PKE"), new Uint8Array(A.intToByteArray(e, 6))), r = t.deriveKeyNoSalt(this.actorSeed, n, 64);
|
|
16961
16965
|
return $v.createPrivateDecryptionKey(e, r);
|
|
16962
16966
|
}
|
|
16963
16967
|
async getPublicEncryptionKey(e = this.pkeSchemeId) {
|
|
@@ -17063,36 +17067,9 @@ var Rw = class e {
|
|
|
17063
17067
|
getDefaultAccountCrypto() {
|
|
17064
17068
|
return $E.createFromWalletSeedAndNonce(this.walletSeed, 0);
|
|
17065
17069
|
}
|
|
17066
|
-
async generateActorPrivateSignatureKey(e, t) {
|
|
17067
|
-
let n = $v.createDefaultKDF(), r = new Uint8Array([...this.walletSeed, ...t]), i = new TextEncoder(), a = n.deriveKeyNoSalt(r, i.encode("SIG"), 32);
|
|
17068
|
-
return $v.createPrivateSignatureKey(e, a);
|
|
17069
|
-
}
|
|
17070
|
-
async generateActorPrivateDecryptionKey(e, t) {
|
|
17071
|
-
let n = $v.createDefaultKDF(), r = new Uint8Array([...this.walletSeed, ...t]), i = new TextEncoder(), a = n.deriveKeyNoSalt(r, i.encode("PKE"), 32);
|
|
17072
|
-
return $v.createPrivateDecryptionKey(e, a);
|
|
17073
|
-
}
|
|
17074
|
-
getPrivateSignatureKey(e = Ja.SECP256K1) {
|
|
17075
|
-
let t = $v.createDefaultKDF(), n = $v.createSignatureScheme(e).expectedSeedSize(), r = $E.encoderStringAsBytes(`SIG_${e}`), i = t.deriveKeyNoSalt(this.walletSeed, r, n);
|
|
17076
|
-
return $v.createPrivateSignatureKey(e, i);
|
|
17077
|
-
}
|
|
17078
|
-
getDecapsulationKey(e) {
|
|
17079
|
-
return new $v().createDecapsulationKey(e, this.walletSeed);
|
|
17080
|
-
}
|
|
17081
|
-
getAccountSeed(e) {
|
|
17082
|
-
return this.getAccount(e).getAccountSeed();
|
|
17083
|
-
}
|
|
17084
17070
|
getAccount(e) {
|
|
17085
17071
|
return $E.createFromWalletSeedAndNonce(this.walletSeed, e);
|
|
17086
17072
|
}
|
|
17087
|
-
getAccountPrivateSignatureKey(e, t) {
|
|
17088
|
-
return $E.createFromWalletSeedAndNonce(this.walletSeed, t).getPrivateSignatureKey(e);
|
|
17089
|
-
}
|
|
17090
|
-
getActorPrivateSignatureKey(e, t, n) {
|
|
17091
|
-
return $E.createFromWalletSeedAndNonce(this.walletSeed, n).deriveActorFromVbSeed(t).getPrivateSignatureKey(e);
|
|
17092
|
-
}
|
|
17093
|
-
getVirtualBlockchainDecapsulationKey(e, t) {
|
|
17094
|
-
return new $v().createVirtualBlockchainDecapsulationKey(e, this.walletSeed, t);
|
|
17095
|
-
}
|
|
17096
17073
|
getSeedAsBytes() {
|
|
17097
17074
|
return this.walletSeed;
|
|
17098
17075
|
}
|
|
@@ -2,7 +2,6 @@ import { AbstractPrivateDecryptionKey } from './PublicKeyEncryptionSchemeInterfa
|
|
|
2
2
|
import { MlKemPublicEncryptionKey } from './MlKemPublicEncryptionKey';
|
|
3
3
|
import { MlKemPublicKeyEncryptionScheme } from './MlKemPublicKeyEncryptionScheme';
|
|
4
4
|
export declare class MlKemPrivateDecryptionKey extends AbstractPrivateDecryptionKey {
|
|
5
|
-
private readonly seed;
|
|
6
5
|
/**
|
|
7
6
|
* Generates a private decryption key from a seed.
|
|
8
7
|
* @param seed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MlKemPrivateDecryptionKey.d.ts","sourceRoot":"","sources":["../../../../src/crypto/encryption/public-key-encryption/MlKemPrivateDecryptionKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,4BAA4B,EAAC,MAAM,sCAAsC,CAAC;AAIlF,OAAO,EAAC,wBAAwB,EAAC,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAC,8BAA8B,EAAC,MAAM,kCAAkC,CAAC;AAIhF,qBAAa,yBAA0B,SAAQ,4BAA4B;
|
|
1
|
+
{"version":3,"file":"MlKemPrivateDecryptionKey.d.ts","sourceRoot":"","sources":["../../../../src/crypto/encryption/public-key-encryption/MlKemPrivateDecryptionKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,4BAA4B,EAAC,MAAM,sCAAsC,CAAC;AAIlF,OAAO,EAAC,wBAAwB,EAAC,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAC,8BAA8B,EAAC,MAAM,kCAAkC,CAAC;AAIhF,qBAAa,yBAA0B,SAAQ,4BAA4B;IACvE;;;OAGG;WACU,WAAW,CAAC,IAAI,EAAE,UAAU;IAOzC;;OAEG;WACU,GAAG;IAKhB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;IAEvC,OAAO;IAOP,sBAAsB,IAAI,MAAM,EAAE;IAIlC,SAAS,IAAI,8BAA8B;IAIrC,YAAY,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAIvD,gBAAgB,IAAI,UAAU;IAIxB,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAkB7D"}
|
|
@@ -2,6 +2,9 @@ import { AbstractPublicKeyEncryptionScheme } from './PublicKeyEncryptionSchemeIn
|
|
|
2
2
|
import { PublicKeyEncryptionSchemeId } from './PublicKeyEncryptionSchemeId';
|
|
3
3
|
export declare class MlKemPublicKeyEncryptionScheme extends AbstractPublicKeyEncryptionScheme {
|
|
4
4
|
getSchemeId(): PublicKeyEncryptionSchemeId;
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated Do not use this method. Not relevant.
|
|
7
|
+
*/
|
|
5
8
|
getSupportedSeedLength(): number[];
|
|
6
9
|
}
|
|
7
10
|
//# sourceMappingURL=MlKemPublicKeyEncryptionScheme.d.ts.map
|
package/dist/crypto/encryption/public-key-encryption/MlKemPublicKeyEncryptionScheme.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MlKemPublicKeyEncryptionScheme.d.ts","sourceRoot":"","sources":["../../../../src/crypto/encryption/public-key-encryption/MlKemPublicKeyEncryptionScheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iCAAiC,EAAC,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAC;AAE1E,qBAAa,8BAA+B,SAAQ,iCAAiC;IACjF,WAAW,IAAI,2BAA2B;IAI1C,sBAAsB,IAAI,MAAM,EAAE;CAGrC"}
|
|
1
|
+
{"version":3,"file":"MlKemPublicKeyEncryptionScheme.d.ts","sourceRoot":"","sources":["../../../../src/crypto/encryption/public-key-encryption/MlKemPublicKeyEncryptionScheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iCAAiC,EAAC,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAC;AAE1E,qBAAa,8BAA+B,SAAQ,iCAAiC;IACjF,WAAW,IAAI,2BAA2B;IAI1C;;OAEG;IACH,sBAAsB,IAAI,MAAM,EAAE;CAGrC"}
|
|
@@ -7,6 +7,7 @@ export declare class ActorCrypto implements ICryptoKeyHandler {
|
|
|
7
7
|
private signatureSchemeId;
|
|
8
8
|
private pkeSchemeId;
|
|
9
9
|
constructor(actorSeed: Uint8Array);
|
|
10
|
+
static encoderStringAsBytes(data: string): Uint8Array;
|
|
10
11
|
static createFromAccountSeedAndVbSeed(accountSeed: Uint8Array, vbSeed: Uint8Array): ActorCrypto;
|
|
11
12
|
static parseFromString(seed: string, encoder?: BinaryToStringEncoderInterface): ActorCrypto;
|
|
12
13
|
encode(encoder?: BinaryToStringEncoderInterface): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorCrypto.d.ts","sourceRoot":"","sources":["../../src/wallet/ActorCrypto.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,2BAA2B,EAAC,MAAM,wEAAwE,CAAC;AACnH,OAAO,EAAC,8BAA8B,EAAC,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAC,iBAAiB,EAAC,MAAM,uCAAuC,CAAC;AAExE,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAEtD,qBAAa,WAAY,YAAW,iBAAiB;IAIrC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC,OAAO,CAAC,iBAAiB,CAAkD;IAC3E,OAAO,CAAC,WAAW,CAAmF;gBAEzE,SAAS,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"ActorCrypto.d.ts","sourceRoot":"","sources":["../../src/wallet/ActorCrypto.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,2BAA2B,EAAC,MAAM,wEAAwE,CAAC;AACnH,OAAO,EAAC,8BAA8B,EAAC,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAC,iBAAiB,EAAC,MAAM,uCAAuC,CAAC;AAExE,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAEtD,qBAAa,WAAY,YAAW,iBAAiB;IAIrC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC,OAAO,CAAC,iBAAiB,CAAkD;IAC3E,OAAO,CAAC,WAAW,CAAmF;gBAEzE,SAAS,EAAE,UAAU;IAGlD,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAKrD,MAAM,CAAC,8BAA8B,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU;IAgBjF,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAG,OAAO,GAAE,8BAAkD,GAAG,WAAW;IAI/G,MAAM,CAAE,OAAO,GAAE,8BAAkD,GAAG,MAAM;IAI5E,cAAc,IAAI,UAAU;IAItB,sBAAsB,CAAC,QAAQ,GAAE,iBAA0C;IAc3E,qBAAqB,CAAC,QAAQ,GAAE,iBAA0C;IAKhF,uBAAuB,CAAC,QAAQ,GAAE,2BAA8C;IAc1E,sBAAsB,CAAC,QAAQ,GAAE,2BAA8C;IAKrF,OAAO,CAAC,oBAAoB;IAK5B,oBAAoB,IAAI,iBAAiB;IAIzC,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAIvD,cAAc,IAAI,2BAA2B;IAI7C,cAAc,CAAC,QAAQ,EAAE,2BAA2B,GAAG,IAAI;CAI9D"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { AccountCrypto } from './AccountCrypto';
|
|
2
|
-
import { PublicKeyEncryptionSchemeId } from '../crypto/encryption/public-key-encryption/PublicKeyEncryptionSchemeId';
|
|
3
2
|
import { BinaryToStringEncoderInterface } from '../utils/BinaryToStringEncoderInterface';
|
|
4
|
-
import { PrivateSignatureKey } from '../crypto/signature/PrivateSignatureKey';
|
|
5
|
-
import { SignatureSchemeId } from '../crypto/signature/SignatureSchemeId';
|
|
6
3
|
/**
|
|
7
4
|
* The Wallet class is responsible for generating and managing cryptographic keys
|
|
8
5
|
* based on a provided wallet seed. It provides methods to retrieve private signature
|
|
@@ -24,46 +21,7 @@ export declare class WalletCrypto {
|
|
|
24
21
|
* Generates the default account (i.e., the account associated with nonce zero).
|
|
25
22
|
*/
|
|
26
23
|
getDefaultAccountCrypto(): AccountCrypto;
|
|
27
|
-
generateActorPrivateSignatureKey(algoId: SignatureSchemeId, vbSeed: Uint8Array): Promise<PrivateSignatureKey>;
|
|
28
|
-
/**
|
|
29
|
-
* @deprecated Will be removed soon!
|
|
30
|
-
* @param algoId
|
|
31
|
-
* @param vbSeed
|
|
32
|
-
*/
|
|
33
|
-
generateActorPrivateDecryptionKey(algoId: PublicKeyEncryptionSchemeId, vbSeed: Uint8Array): Promise<import('../carmentis-sdk-core').AbstractPrivateDecryptionKey>;
|
|
34
|
-
/**
|
|
35
|
-
* Generate the private signature key associated to the wallet.
|
|
36
|
-
*
|
|
37
|
-
* @param schemeId Type of signature scheme to generate.
|
|
38
|
-
*/
|
|
39
|
-
getPrivateSignatureKey(schemeId?: SignatureSchemeId): PrivateSignatureKey;
|
|
40
|
-
/**
|
|
41
|
-
* Retrieves the decapsulation key for a given cryptographic scheme ID.
|
|
42
|
-
*
|
|
43
|
-
* @deprecated Will be removed soon.
|
|
44
|
-
*
|
|
45
|
-
* @param {number} schemeId - The identifier of the cryptographic scheme for which the decapsulation key is needed.
|
|
46
|
-
* @return {*} The generated decapsulation key for the specified scheme ID.
|
|
47
|
-
*/
|
|
48
|
-
getDecapsulationKey(schemeId: number): import('../carmentis-sdk-core').DecapsulationKey;
|
|
49
|
-
/**
|
|
50
|
-
* Derived from the wallet seed, unique for each account.
|
|
51
|
-
* Used to handle different accounts from the same wallet.
|
|
52
|
-
*
|
|
53
|
-
* @param accountNonce The index of the account.
|
|
54
|
-
*/
|
|
55
|
-
getAccountSeed(accountNonce: number): Uint8Array<ArrayBufferLike>;
|
|
56
24
|
getAccount(accountNonce: number): AccountCrypto;
|
|
57
|
-
getAccountPrivateSignatureKey(schemeId: SignatureSchemeId, accountNonce: number): Promise<PrivateSignatureKey>;
|
|
58
|
-
getActorPrivateSignatureKey(schemeId: number, vbSeed: Uint8Array, accountNonce: number): Promise<PrivateSignatureKey>;
|
|
59
|
-
/**
|
|
60
|
-
* Retrieves the virtual blockchain decapsulation key using the specified scheme ID and virtual blockchain seed.
|
|
61
|
-
*
|
|
62
|
-
* @deprecated Will be removed soon.
|
|
63
|
-
* @param {number} schemeId - The identifier of the cryptographic scheme to be used for generating the key.
|
|
64
|
-
* @param {Uint8Array} vbSeed - The virtual blockchain seed
|
|
65
|
-
* */
|
|
66
|
-
getVirtualBlockchainDecapsulationKey(schemeId: number, vbSeed: Uint8Array): import('../carmentis-sdk-core').DecapsulationKey;
|
|
67
25
|
getSeedAsBytes(): Uint8Array<ArrayBufferLike>;
|
|
68
26
|
}
|
|
69
27
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalletCrypto.d.ts","sourceRoot":"","sources":["../../src/wallet/WalletCrypto.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"WalletCrypto.d.ts","sourceRoot":"","sources":["../../src/wallet/WalletCrypto.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAC,8BAA8B,EAAC,MAAM,yCAAyC,CAAC;AAMvF;;;;GAIG;AACH,qBAAa,YAAY;IA2BA,OAAO,CAAC,UAAU;IAxBvC;;;;OAIG;IACH,MAAM,CAAC,cAAc,IAAI,YAAY;IAKrC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY;IAK/C,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAG,OAAO,GAAE,8BAAkD,GAAG,YAAY;IAKhH,MAAM,CAAE,OAAO,GAAE,8BAAkD,GAAG,MAAM;IAI5E,OAAO;IAEP;;OAEG;IACH,uBAAuB,IAAI,aAAa;IAOxC,UAAU,CAAC,YAAY,EAAE,MAAM;IAK/B,cAAc;CAGjB;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC"}
|