@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 CHANGED
@@ -1,14 +1,17 @@
1
1
  import axios from 'axios';
2
2
 
3
- const RELAY_API_URL = 'relay.dynamic-preprod.xyz';
4
- const DYNAMIC_AUTH_BASE_API_URL = 'https://app.dynamicauth.com';
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
- })(SigningAlgorithm || (SigningAlgorithm = {}));
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
- })(ThresholdSignatureScheme || (ThresholdSignatureScheme = {}));
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: 'TWO_OF_THREE'
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 storeEncryptedBackup({ walletId, keyShare }) {
162
- const { data } = await this.apiClient.post(`/api/v0/sdk/${this.environmentId}/waas/${walletId}/keyShare/backup`, {
163
- encryptedKeyShare: keyShare
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 recoverEncryptedBackup({ walletId, keyShareId }) {
168
- const { data } = await this.apiClient.get(`/api/v0/sdk/${this.environmentId}/waas/${walletId}/keyShare/${keyShareId}/recover`);
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, walletId, clientKeygenIds }) {
178
- const { data } = await this.apiClient.post(`/api/v0/sdk/${this.environmentId}/waas/${walletId}/privateKey/import`, {
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, RELAY_API_URL, SigningAlgorithm, ThresholdSignatureScheme, getMPCChainConfig };
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/core",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "dependencies": {
5
5
  "axios": "1.7.9"
6
6
  },
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
- storeEncryptedBackup({ walletId, keyShare, }: {
29
+ storeEncryptedBackupByWallet({ walletId, encryptedKeyShares, passwordEncrypted, }: {
28
30
  walletId: string;
29
- keyShare: string;
31
+ encryptedKeyShares: string[];
32
+ passwordEncrypted: boolean;
30
33
  }): Promise<any>;
31
- recoverEncryptedBackup({ walletId, keyShareId, }: {
34
+ recoverEncryptedBackupByWallet({ walletId, keyShareIds, }: {
32
35
  walletId: string;
33
- keyShareId: string;
36
+ keyShareIds?: string[];
34
37
  }): Promise<any>;
35
38
  getAccessToken({ oauthAccountId }: {
36
39
  oauthAccountId: string;
37
40
  }): Promise<any>;
38
- importPrivateKey({ chainName, walletId, clientKeygenIds, }: {
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
- serverKeygenId: string;
47
+ serverKeygenIds: string[];
45
48
  }>;
49
+ getUser(): Promise<any>;
50
+ refreshUser(): Promise<any>;
46
51
  }
47
52
  //# sourceMappingURL=api.d.ts.map
@@ -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,GAChB,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B;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,oBAAoB,CAAC,EACzB,QAAQ,EACR,QAAQ,GACT,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAUK,sBAAsB,CAAC,EAC3B,QAAQ,EACR,UAAU,GACX,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB;IAOK,cAAc,CAAC,EAAE,cAAc,EAAE,EAAE;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE;IAS7D,gBAAgB,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,eAAe,GAChB,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAUxD"}
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"}
@@ -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;
@@ -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;AAG7C,qBAAa,UAAU;IACd,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;gBAEjB,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;CAWF"}
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"}
@@ -1,3 +1,4 @@
1
- export declare const RELAY_API_URL = "relay.dynamic-preprod.xyz";
2
- export declare const DYNAMIC_AUTH_BASE_API_URL = "https://app.dynamicauth.com";
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
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../packages/src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,8BAA8B,CAAC;AAEzD,eAAO,MAAM,yBAAyB,gCAAgC,CAAC"}
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"}
@@ -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;;;;;;;;;;;;;CAatB,CAAC"}
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"}