@dynamic-labs-wallet/core 0.0.3 → 0.0.5
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/index.esm.js +62 -22
- package/package.json +1 -1
- package/src/api/api.d.ts +13 -8
- package/src/api/api.d.ts.map +1 -1
- package/src/api/client.d.ts +3 -1
- package/src/api/client.d.ts.map +1 -1
- package/src/constants.d.ts +3 -2
- package/src/constants.d.ts.map +1 -1
- package/src/mpc/constants.d.ts +12 -0
- package/src/mpc/constants.d.ts.map +1 -1
package/index.esm.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const
|
|
3
|
+
const isProd = process.env.NODE_ENV === 'production';
|
|
4
|
+
const isPreProd = process.env.NODE_ENV === 'preprod';
|
|
5
|
+
const DYNAMIC_AUTH_BASE_API_URL = isProd ? 'https://app.dynamicauth.com' : isPreProd ? 'https://app.dynamic-preprod.xyz' : 'http://localhost:4200';
|
|
6
|
+
const DYNAMIC_CLIENT_RELAY_BASE_API_URL = isProd ? 'https://app-dynamicauth-com-app-6e12fc400995.relay.evervault.app' : isPreProd ? 'https://app-dynamic-preprod-xyz-app-32d15525a875.relay.evervault.app' : DYNAMIC_AUTH_BASE_API_URL;
|
|
7
|
+
const MPC_RELAY_API_URL = isProd ? 'mpc-relay.dynamic-prod.xyz' : 'relay.dynamic-preprod.xyz';
|
|
5
8
|
|
|
6
|
-
var SigningAlgorithm
|
|
7
|
-
(function(SigningAlgorithm) {
|
|
9
|
+
var SigningAlgorithm = /*#__PURE__*/ function(SigningAlgorithm) {
|
|
8
10
|
SigningAlgorithm["ECDSA"] = "ECDSA";
|
|
9
11
|
SigningAlgorithm["ED25519"] = "ED25519";
|
|
10
12
|
SigningAlgorithm["BIP340"] = "BIP340";
|
|
11
|
-
|
|
13
|
+
return SigningAlgorithm;
|
|
14
|
+
}({});
|
|
12
15
|
const BITCOIN_DERIVATION_PATHS = {
|
|
13
16
|
LEGACY: [
|
|
14
17
|
44,
|
|
@@ -92,26 +95,45 @@ const getMPCChainConfig = (chainName)=>{
|
|
|
92
95
|
}
|
|
93
96
|
return chainConfig;
|
|
94
97
|
};
|
|
95
|
-
var ThresholdSignatureScheme
|
|
96
|
-
(function(ThresholdSignatureScheme) {
|
|
98
|
+
var ThresholdSignatureScheme = /*#__PURE__*/ function(ThresholdSignatureScheme) {
|
|
97
99
|
ThresholdSignatureScheme["TWO_OF_TWO"] = "TWO_OF_TWO";
|
|
98
100
|
ThresholdSignatureScheme["TWO_OF_THREE"] = "TWO_OF_THREE";
|
|
99
101
|
ThresholdSignatureScheme["THREE_OF_FIVE"] = "THREE_OF_FIVE";
|
|
100
|
-
|
|
102
|
+
return ThresholdSignatureScheme;
|
|
103
|
+
}({});
|
|
101
104
|
const MPC_CONFIG = {
|
|
102
105
|
["TWO_OF_TWO"]: {
|
|
103
106
|
numberOfParties: 2,
|
|
104
|
-
threshold: 2
|
|
107
|
+
threshold: 2,
|
|
108
|
+
clientThreshold: 1,
|
|
109
|
+
dynamicServerThreshold: 1
|
|
105
110
|
},
|
|
106
111
|
["TWO_OF_THREE"]: {
|
|
107
112
|
numberOfParties: 3,
|
|
108
|
-
threshold: 2
|
|
113
|
+
threshold: 2,
|
|
114
|
+
clientThreshold: 2,
|
|
115
|
+
dynamicServerThreshold: 1
|
|
109
116
|
},
|
|
110
117
|
["THREE_OF_FIVE"]: {
|
|
111
118
|
numberOfParties: 5,
|
|
112
|
-
threshold: 3
|
|
119
|
+
threshold: 3,
|
|
120
|
+
clientThreshold: 3,
|
|
121
|
+
dynamicServerThreshold: 2
|
|
113
122
|
}
|
|
114
123
|
};
|
|
124
|
+
const getTSSConfig = (thresholdSignatureScheme)=>{
|
|
125
|
+
const { threshold, numberOfParties } = MPC_CONFIG[thresholdSignatureScheme];
|
|
126
|
+
return {
|
|
127
|
+
threshold,
|
|
128
|
+
numberOfParties
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
const getClientThreshold = (thresholdSignatureScheme)=>{
|
|
132
|
+
return MPC_CONFIG[thresholdSignatureScheme].clientThreshold;
|
|
133
|
+
};
|
|
134
|
+
const getDynamicServerThreshold = (thresholdSignatureScheme)=>{
|
|
135
|
+
return MPC_CONFIG[thresholdSignatureScheme].dynamicServerThreshold;
|
|
136
|
+
};
|
|
115
137
|
|
|
116
138
|
class BaseClient {
|
|
117
139
|
constructor({ environmentId, baseApiUrl, authToken }){
|
|
@@ -123,16 +145,21 @@ class BaseClient {
|
|
|
123
145
|
baseURL: this.baseApiUrl,
|
|
124
146
|
headers
|
|
125
147
|
});
|
|
148
|
+
this.clientRelayBaseApiUrl = DYNAMIC_CLIENT_RELAY_BASE_API_URL;
|
|
149
|
+
this.clientRelayApiClient = axios.create({
|
|
150
|
+
baseURL: this.clientRelayBaseApiUrl,
|
|
151
|
+
headers
|
|
152
|
+
});
|
|
126
153
|
}
|
|
127
154
|
}
|
|
128
155
|
|
|
129
156
|
class DynamicApiClient extends BaseClient {
|
|
130
|
-
async createWalletAccount({ chainName, clientKeygenIds }) {
|
|
157
|
+
async createWalletAccount({ chainName, clientKeygenIds, thresholdSignatureScheme }) {
|
|
131
158
|
// Initilize keygen, create room, and create the wallet account on the server
|
|
132
159
|
const { data } = await this.apiClient.post(`/api/v0/sdk/${this.environmentId}/waas/create`, {
|
|
133
160
|
chain: chainName,
|
|
134
161
|
clientKeygenIds,
|
|
135
|
-
thresholdSignatureScheme
|
|
162
|
+
thresholdSignatureScheme
|
|
136
163
|
});
|
|
137
164
|
return data;
|
|
138
165
|
}
|
|
@@ -158,14 +185,18 @@ class DynamicApiClient extends BaseClient {
|
|
|
158
185
|
});
|
|
159
186
|
return data;
|
|
160
187
|
}
|
|
161
|
-
async
|
|
162
|
-
const { data } = await this.
|
|
163
|
-
|
|
188
|
+
async storeEncryptedBackupByWallet({ walletId, encryptedKeyShares, passwordEncrypted }) {
|
|
189
|
+
const { data } = await this.clientRelayApiClient.post(`/api/v0/sdk/${this.environmentId}/waas/${walletId}/keyShares/backup`, {
|
|
190
|
+
// TODO: decide on whether to store encryptedAccountCredentials or encryptedKeyShares as backup
|
|
191
|
+
encryptedAccountCredentials: encryptedKeyShares,
|
|
192
|
+
passwordEncrypted
|
|
164
193
|
});
|
|
165
194
|
return data;
|
|
166
195
|
}
|
|
167
|
-
async
|
|
168
|
-
const { data } = await this.
|
|
196
|
+
async recoverEncryptedBackupByWallet({ walletId, keyShareIds }) {
|
|
197
|
+
const { data } = await this.clientRelayApiClient.post(`/api/v0/sdk/${this.environmentId}/waas/${walletId}/keyShares/recover`, keyShareIds ? {
|
|
198
|
+
keyShareIds
|
|
199
|
+
} : undefined);
|
|
169
200
|
return data;
|
|
170
201
|
}
|
|
171
202
|
async getAccessToken({ oauthAccountId }) {
|
|
@@ -174,13 +205,22 @@ class DynamicApiClient extends BaseClient {
|
|
|
174
205
|
return data.accessToken;
|
|
175
206
|
}
|
|
176
207
|
// TODO: return array instead considering cases where server has multiple parties
|
|
177
|
-
async importPrivateKey({ chainName,
|
|
178
|
-
const { data } = await this.apiClient.post(`/api/v0/sdk/${this.environmentId}/waas
|
|
208
|
+
async importPrivateKey({ chainName, clientKeygenIds, thresholdSignatureScheme }) {
|
|
209
|
+
const { data } = await this.apiClient.post(`/api/v0/sdk/${this.environmentId}/waas/privateKey/import`, {
|
|
179
210
|
chain: chainName,
|
|
180
|
-
clientKeygenIds
|
|
211
|
+
clientKeygenIds,
|
|
212
|
+
thresholdSignatureScheme
|
|
181
213
|
});
|
|
182
214
|
return data;
|
|
183
215
|
}
|
|
216
|
+
async getUser() {
|
|
217
|
+
const { data } = await this.apiClient.get(`/api/v0/sdk/${this.environmentId}/users`);
|
|
218
|
+
return data;
|
|
219
|
+
}
|
|
220
|
+
async refreshUser() {
|
|
221
|
+
const { data } = await this.apiClient.post(`/api/v0/sdk/${this.environmentId}/refresh`, undefined);
|
|
222
|
+
return data;
|
|
223
|
+
}
|
|
184
224
|
constructor({ environmentId, authToken, baseApiUrl }){
|
|
185
225
|
super({
|
|
186
226
|
environmentId,
|
|
@@ -190,4 +230,4 @@ class DynamicApiClient extends BaseClient {
|
|
|
190
230
|
}
|
|
191
231
|
}
|
|
192
232
|
|
|
193
|
-
export { BITCOIN_DERIVATION_PATHS, DYNAMIC_AUTH_BASE_API_URL, DynamicApiClient, MPC_CHAIN_CONFIG, MPC_CONFIG,
|
|
233
|
+
export { BITCOIN_DERIVATION_PATHS, DYNAMIC_AUTH_BASE_API_URL, DYNAMIC_CLIENT_RELAY_BASE_API_URL, DynamicApiClient, MPC_CHAIN_CONFIG, MPC_CONFIG, MPC_RELAY_API_URL, SigningAlgorithm, ThresholdSignatureScheme, getClientThreshold, getDynamicServerThreshold, getMPCChainConfig, getTSSConfig };
|
package/package.json
CHANGED
package/src/api/api.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ThresholdSignatureScheme } from '../mpc/constants';
|
|
1
2
|
import { BaseClient } from './client';
|
|
2
3
|
export declare class DynamicApiClient extends BaseClient {
|
|
3
4
|
constructor({ environmentId, authToken, baseApiUrl, }: {
|
|
@@ -5,9 +6,10 @@ export declare class DynamicApiClient extends BaseClient {
|
|
|
5
6
|
authToken: string;
|
|
6
7
|
baseApiUrl?: string;
|
|
7
8
|
});
|
|
8
|
-
createWalletAccount({ chainName, clientKeygenIds, }: {
|
|
9
|
+
createWalletAccount({ chainName, clientKeygenIds, thresholdSignatureScheme, }: {
|
|
9
10
|
chainName: string;
|
|
10
11
|
clientKeygenIds: string[];
|
|
12
|
+
thresholdSignatureScheme: ThresholdSignatureScheme;
|
|
11
13
|
}): Promise<any>;
|
|
12
14
|
signMessage({ walletId, message, }: {
|
|
13
15
|
walletId: string;
|
|
@@ -24,24 +26,27 @@ export declare class DynamicApiClient extends BaseClient {
|
|
|
24
26
|
walletId: string;
|
|
25
27
|
exportId: string;
|
|
26
28
|
}): Promise<any>;
|
|
27
|
-
|
|
29
|
+
storeEncryptedBackupByWallet({ walletId, encryptedKeyShares, passwordEncrypted, }: {
|
|
28
30
|
walletId: string;
|
|
29
|
-
|
|
31
|
+
encryptedKeyShares: string[];
|
|
32
|
+
passwordEncrypted: boolean;
|
|
30
33
|
}): Promise<any>;
|
|
31
|
-
|
|
34
|
+
recoverEncryptedBackupByWallet({ walletId, keyShareIds, }: {
|
|
32
35
|
walletId: string;
|
|
33
|
-
|
|
36
|
+
keyShareIds?: string[];
|
|
34
37
|
}): Promise<any>;
|
|
35
38
|
getAccessToken({ oauthAccountId }: {
|
|
36
39
|
oauthAccountId: string;
|
|
37
40
|
}): Promise<any>;
|
|
38
|
-
importPrivateKey({ chainName,
|
|
41
|
+
importPrivateKey({ chainName, clientKeygenIds, thresholdSignatureScheme, }: {
|
|
39
42
|
chainName: string;
|
|
40
|
-
walletId: string;
|
|
41
43
|
clientKeygenIds: string[];
|
|
44
|
+
thresholdSignatureScheme: ThresholdSignatureScheme;
|
|
42
45
|
}): Promise<{
|
|
43
46
|
roomId: string;
|
|
44
|
-
|
|
47
|
+
serverKeygenIds: string[];
|
|
45
48
|
}>;
|
|
49
|
+
getUser(): Promise<any>;
|
|
50
|
+
refreshUser(): Promise<any>;
|
|
46
51
|
}
|
|
47
52
|
//# sourceMappingURL=api.d.ts.map
|
package/src/api/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,qBAAa,gBAAiB,SAAQ,UAAU;gBAClC,EACV,aAAa,EACb,SAAS,EACT,UAAU,GACX,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IAIK,mBAAmB,CAAC,EACxB,SAAS,EACT,eAAe,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,qBAAa,gBAAiB,SAAQ,UAAU;gBAClC,EACV,aAAa,EACb,SAAS,EACT,UAAU,GACX,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IAIK,mBAAmB,CAAC,EACxB,SAAS,EACT,eAAe,EACf,wBAAwB,GACzB,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,wBAAwB,EAAE,wBAAwB,CAAC;KACpD;IAaK,WAAW,CAAC,EAChB,QAAQ,EACR,OAAO,GACR,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB;IAUK,0BAA0B,CAAC,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;IAO7D,qBAAqB,CAAC,EAC1B,QAAQ,EACR,eAAe,GAChB,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B;IAUK,SAAS,CAAC,EACd,QAAQ,EACR,QAAQ,GACT,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAUK,4BAA4B,CAAC,EACjC,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,GAClB,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,iBAAiB,EAAE,OAAO,CAAC;KAC5B;IAYK,8BAA8B,CAAC,EACnC,QAAQ,EACR,WAAW,GACZ,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB;IAQK,cAAc,CAAC,EAAE,cAAc,EAAE,EAAE;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE;IAS7D,gBAAgB,CAAC,EACrB,SAAS,EACT,eAAe,EACf,wBAAwB,GACzB,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,wBAAwB,EAAE,wBAAwB,CAAC;KACpD,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAYpD,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAOvB,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;CAOlC"}
|
package/src/api/client.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { AxiosInstance } from 'axios';
|
|
1
|
+
import { type AxiosInstance } from 'axios';
|
|
2
2
|
export declare class BaseClient {
|
|
3
3
|
apiClient: AxiosInstance;
|
|
4
4
|
baseApiUrl: string;
|
|
5
5
|
environmentId: string;
|
|
6
|
+
clientRelayBaseApiUrl: string;
|
|
7
|
+
clientRelayApiClient: AxiosInstance;
|
|
6
8
|
constructor({ environmentId, baseApiUrl, authToken, }: {
|
|
7
9
|
environmentId: string;
|
|
8
10
|
baseApiUrl?: string;
|
package/src/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAMlD,qBAAa,UAAU;IACd,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,aAAa,CAAC;gBAC/B,EACV,aAAa,EACb,UAAU,EACV,SAAS,GACV,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;CAgBF"}
|
package/src/constants.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
export declare const
|
|
1
|
+
export declare const DYNAMIC_AUTH_BASE_API_URL: string;
|
|
2
|
+
export declare const DYNAMIC_CLIENT_RELAY_BASE_API_URL: string;
|
|
3
|
+
export declare const MPC_RELAY_API_URL: string;
|
|
3
4
|
//# sourceMappingURL=constants.d.ts.map
|
package/src/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../packages/src/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../packages/src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,QAIX,CAAC;AAE5B,eAAO,MAAM,iCAAiC,QAIjB,CAAC;AAE9B,eAAO,MAAM,iBAAiB,QAEC,CAAC"}
|
package/src/mpc/constants.d.ts
CHANGED
|
@@ -25,14 +25,26 @@ export declare const MPC_CONFIG: {
|
|
|
25
25
|
TWO_OF_TWO: {
|
|
26
26
|
numberOfParties: number;
|
|
27
27
|
threshold: number;
|
|
28
|
+
clientThreshold: number;
|
|
29
|
+
dynamicServerThreshold: number;
|
|
28
30
|
};
|
|
29
31
|
TWO_OF_THREE: {
|
|
30
32
|
numberOfParties: number;
|
|
31
33
|
threshold: number;
|
|
34
|
+
clientThreshold: number;
|
|
35
|
+
dynamicServerThreshold: number;
|
|
32
36
|
};
|
|
33
37
|
THREE_OF_FIVE: {
|
|
34
38
|
numberOfParties: number;
|
|
35
39
|
threshold: number;
|
|
40
|
+
clientThreshold: number;
|
|
41
|
+
dynamicServerThreshold: number;
|
|
36
42
|
};
|
|
37
43
|
};
|
|
44
|
+
export declare const getTSSConfig: (thresholdSignatureScheme: ThresholdSignatureScheme) => {
|
|
45
|
+
threshold: number;
|
|
46
|
+
numberOfParties: number;
|
|
47
|
+
};
|
|
48
|
+
export declare const getClientThreshold: (thresholdSignatureScheme: ThresholdSignatureScheme) => number;
|
|
49
|
+
export declare const getDynamicServerThreshold: (thresholdSignatureScheme: ThresholdSignatureScheme) => number;
|
|
38
50
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/mpc/constants.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,wBAAwB;;;;CAMpC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,MAAM,EACN;IAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IAAC,gBAAgB,EAAE,gBAAgB,CAAA;CAAE,CA2BjE,CAAC;AAEF,eAAO,MAAM,iBAAiB,cAAe,MAAM;oBA7B/B,MAAM,EAAE;sBAAoB,gBAAgB;CAmC/D,CAAC;AAEF,oBAAY,wBAAwB;IAClC,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAChC;AAED,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/mpc/constants.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,wBAAwB;;;;CAMpC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,MAAM,EACN;IAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IAAC,gBAAgB,EAAE,gBAAgB,CAAA;CAAE,CA2BjE,CAAC;AAEF,eAAO,MAAM,iBAAiB,cAAe,MAAM;oBA7B/B,MAAM,EAAE;sBAAoB,gBAAgB;CAmC/D,CAAC;AAEF,oBAAY,wBAAwB;IAClC,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAChC;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;CAmBtB,CAAC;AAEF,eAAO,MAAM,YAAY,6BACG,wBAAwB;;;CAInD,CAAC;AAEF,eAAO,MAAM,kBAAkB,6BACH,wBAAwB,WAGnD,CAAC;AAEF,eAAO,MAAM,yBAAyB,6BACV,wBAAwB,WAGnD,CAAC"}
|