@human-protocol/sdk 5.2.0 → 6.0.0

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.
Files changed (63) hide show
  1. package/dist/base.d.ts +4 -5
  2. package/dist/base.d.ts.map +1 -1
  3. package/dist/base.js +4 -5
  4. package/dist/constants.js +6 -6
  5. package/dist/encryption.d.ts +68 -203
  6. package/dist/encryption.d.ts.map +1 -1
  7. package/dist/encryption.js +66 -202
  8. package/dist/error.d.ts +0 -24
  9. package/dist/error.d.ts.map +1 -1
  10. package/dist/error.js +2 -26
  11. package/dist/escrow.d.ts +427 -780
  12. package/dist/escrow.d.ts.map +1 -1
  13. package/dist/escrow.js +314 -684
  14. package/dist/graphql/queries/operator.d.ts.map +1 -1
  15. package/dist/graphql/queries/operator.js +3 -1
  16. package/dist/graphql/types.d.ts.map +1 -1
  17. package/dist/index.d.ts +3 -4
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -4
  20. package/dist/kvstore.d.ts +119 -181
  21. package/dist/kvstore.d.ts.map +1 -1
  22. package/dist/kvstore.js +119 -182
  23. package/dist/operator.d.ts +59 -30
  24. package/dist/operator.d.ts.map +1 -1
  25. package/dist/operator.js +59 -30
  26. package/dist/staking.d.ts +135 -134
  27. package/dist/staking.d.ts.map +1 -1
  28. package/dist/staking.js +135 -134
  29. package/dist/statistics.d.ts +104 -134
  30. package/dist/statistics.d.ts.map +1 -1
  31. package/dist/statistics.js +119 -144
  32. package/dist/transaction.d.ts +36 -15
  33. package/dist/transaction.d.ts.map +1 -1
  34. package/dist/transaction.js +36 -15
  35. package/dist/types.d.ts +0 -54
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/utils.d.ts +31 -17
  38. package/dist/utils.d.ts.map +1 -1
  39. package/dist/utils.js +31 -17
  40. package/dist/worker.d.ts +35 -14
  41. package/dist/worker.d.ts.map +1 -1
  42. package/dist/worker.js +35 -14
  43. package/package.json +7 -24
  44. package/src/base.ts +4 -5
  45. package/src/constants.ts +6 -6
  46. package/src/encryption.ts +69 -203
  47. package/src/error.ts +0 -36
  48. package/src/escrow.ts +425 -780
  49. package/src/graphql/queries/operator.ts +3 -1
  50. package/src/graphql/types.ts +4 -2
  51. package/src/index.ts +4 -5
  52. package/src/kvstore.ts +120 -183
  53. package/src/operator.ts +59 -30
  54. package/src/staking.ts +135 -134
  55. package/src/statistics.ts +125 -146
  56. package/src/transaction.ts +36 -15
  57. package/src/types.ts +0 -57
  58. package/src/utils.ts +31 -17
  59. package/src/worker.ts +35 -14
  60. package/dist/storage.d.ts +0 -186
  61. package/dist/storage.d.ts.map +0 -1
  62. package/dist/storage.js +0 -319
  63. package/src/storage.ts +0 -313
@@ -1,46 +1,21 @@
1
1
  import { IDailyHMT, IEscrowStatistics, IHMTHolder, IHMTHoldersParams, IHMTStatistics, IPaymentStatistics, IStatisticsFilter, IWorkerStatistics, SubgraphOptions } from './interfaces';
2
2
  import { NetworkData } from './types';
3
3
  /**
4
- * ## Introduction
4
+ * Utility class for statistics-related queries.
5
5
  *
6
- * This client enables obtaining statistical information from the subgraph.
7
- *
8
- * Unlike other SDK clients, `StatisticsClient` does not require `signer` or `provider` to be provided.
9
- * We just need to create a client object using relevant network data.
6
+ * Unlike other SDK clients, `StatisticsUtils` does not require `signer` or `provider` to be provided.
7
+ * We just need to pass the network data to each static method.
10
8
  *
9
+ * @example
11
10
  * ```ts
12
- * constructor(network: NetworkData)
13
- * ```
14
- *
15
- * ## Installation
11
+ * import { StatisticsUtils, ChainId, NETWORKS } from '@human-protocol/sdk';
16
12
  *
17
- * ### npm
18
- * ```bash
19
- * npm install @human-protocol/sdk
20
- * ```
21
- *
22
- * ### yarn
23
- * ```bash
24
- * yarn install @human-protocol/sdk
25
- * ```
26
- *
27
- * ## Code example
28
- *
29
- * ```ts
30
- * import { StatisticsClient, ChainId, NETWORKS } from '@human-protocol/sdk';
31
- *
32
- * const statisticsClient = new StatisticsClient(NETWORKS[ChainId.POLYGON_AMOY]);
13
+ * const networkData = NETWORKS[ChainId.POLYGON_AMOY];
14
+ * const escrowStats = await StatisticsUtils.getEscrowStatistics(networkData);
15
+ * console.log('Total escrows:', escrowStats.totalEscrows);
33
16
  * ```
34
17
  */
35
- export declare class StatisticsClient {
36
- networkData: NetworkData;
37
- subgraphUrl: string;
38
- /**
39
- * **StatisticsClient constructor**
40
- *
41
- * @param {NetworkData} networkData - The network information required to connect to the Statistics contract
42
- */
43
- constructor(networkData: NetworkData);
18
+ export declare class StatisticsUtils {
44
19
  /**
45
20
  * This function returns the statistical data of escrows.
46
21
  *
@@ -72,25 +47,30 @@ export declare class StatisticsClient {
72
47
  * };
73
48
  * ```
74
49
  *
75
- * @param {IStatisticsFilter} filter Statistics params with duration data
76
- * @param {SubgraphOptions} options Optional configuration for subgraph requests.
77
- * @returns {Promise<IEscrowStatistics>} Escrow statistics data.
78
- *
79
- * **Code example**
50
+ * @param networkData - The network information required to connect to the subgraph
51
+ * @param filter - Statistics params with duration data
52
+ * @param options - Optional configuration for subgraph requests.
53
+ * @returns Escrow statistics data.
80
54
  *
55
+ * @example
81
56
  * ```ts
82
- * import { StatisticsClient, ChainId, NETWORKS } from '@human-protocol/sdk';
83
- *
84
- * const statisticsClient = new StatisticsClient(NETWORKS[ChainId.POLYGON_AMOY]);
85
- *
86
- * const escrowStatistics = await statisticsClient.getEscrowStatistics();
87
- * const escrowStatisticsApril = await statisticsClient.getEscrowStatistics({
88
- * from: new Date('2021-04-01'),
89
- * to: new Date('2021-04-30'),
90
- * });
57
+ * import { StatisticsUtils, ChainId, NETWORKS } from '@human-protocol/sdk';
58
+ *
59
+ * const networkData = NETWORKS[ChainId.POLYGON_AMOY];
60
+ * const escrowStats = await StatisticsUtils.getEscrowStatistics(networkData);
61
+ * console.log('Total escrows:', escrowStats.totalEscrows);
62
+ *
63
+ * const escrowStatsApril = await StatisticsUtils.getEscrowStatistics(
64
+ * networkData,
65
+ * {
66
+ * from: new Date('2021-04-01'),
67
+ * to: new Date('2021-04-30'),
68
+ * }
69
+ * );
70
+ * console.log('April escrows:', escrowStatsApril.totalEscrows);
91
71
  * ```
92
72
  */
93
- getEscrowStatistics(filter?: IStatisticsFilter, options?: SubgraphOptions): Promise<IEscrowStatistics>;
73
+ static getEscrowStatistics(networkData: NetworkData, filter?: IStatisticsFilter, options?: SubgraphOptions): Promise<IEscrowStatistics>;
94
74
  /**
95
75
  * This function returns the statistical data of workers.
96
76
  *
@@ -117,25 +97,30 @@ export declare class StatisticsClient {
117
97
  * };
118
98
  * ```
119
99
  *
120
- * @param {IStatisticsFilter} filter Statistics params with duration data
121
- * @param {SubgraphOptions} options Optional configuration for subgraph requests.
122
- * @returns {Promise<IWorkerStatistics>} Worker statistics data.
123
- *
124
- * **Code example**
100
+ * @param networkData - The network information required to connect to the subgraph
101
+ * @param filter - Statistics params with duration data
102
+ * @param options - Optional configuration for subgraph requests.
103
+ * @returns Worker statistics data.
125
104
  *
105
+ * @example
126
106
  * ```ts
127
- * import { StatisticsClient, ChainId, NETWORKS } from '@human-protocol/sdk';
128
- *
129
- * const statisticsClient = new StatisticsClient(NETWORKS[ChainId.POLYGON_AMOY]);
130
- *
131
- * const workerStatistics = await statisticsClient.getWorkerStatistics();
132
- * const workerStatisticsApril = await statisticsClient.getWorkerStatistics({
133
- * from: new Date('2021-04-01'),
134
- * to: new Date('2021-04-30'),
135
- * });
107
+ * import { StatisticsUtils, ChainId, NETWORKS } from '@human-protocol/sdk';
108
+ *
109
+ * const networkData = NETWORKS[ChainId.POLYGON_AMOY];
110
+ * const workerStats = await StatisticsUtils.getWorkerStatistics(networkData);
111
+ * console.log('Daily workers data:', workerStats.dailyWorkersData);
112
+ *
113
+ * const workerStatsApril = await StatisticsUtils.getWorkerStatistics(
114
+ * networkData,
115
+ * {
116
+ * from: new Date('2021-04-01'),
117
+ * to: new Date('2021-04-30'),
118
+ * }
119
+ * );
120
+ * console.log('April workers:', workerStatsApril.dailyWorkersData.length);
136
121
  * ```
137
122
  */
138
- getWorkerStatistics(filter?: IStatisticsFilter, options?: SubgraphOptions): Promise<IWorkerStatistics>;
123
+ static getWorkerStatistics(networkData: NetworkData, filter?: IStatisticsFilter, options?: SubgraphOptions): Promise<IWorkerStatistics>;
139
124
  /**
140
125
  * This function returns the statistical data of payments.
141
126
  *
@@ -164,46 +149,37 @@ export declare class StatisticsClient {
164
149
  * };
165
150
  * ```
166
151
  *
167
- * @param {IStatisticsFilter} filter Statistics params with duration data
168
- * @param {SubgraphOptions} options Optional configuration for subgraph requests.
169
- * @returns {Promise<IPaymentStatistics>} Payment statistics data.
170
- *
171
- * **Code example**
152
+ * @param networkData - The network information required to connect to the subgraph
153
+ * @param filter - Statistics params with duration data
154
+ * @param options - Optional configuration for subgraph requests.
155
+ * @returns Payment statistics data.
172
156
  *
157
+ * @example
173
158
  * ```ts
174
- * import { StatisticsClient, ChainId, NETWORKS } from '@human-protocol/sdk';
175
- *
176
- * const statisticsClient = new StatisticsClient(NETWORKS[ChainId.POLYGON_AMOY]);
159
+ * import { StatisticsUtils, ChainId, NETWORKS } from '@human-protocol/sdk';
177
160
  *
161
+ * const networkData = NETWORKS[ChainId.POLYGON_AMOY];
162
+ * const paymentStats = await StatisticsUtils.getPaymentStatistics(networkData);
178
163
  * console.log(
179
164
  * 'Payment statistics:',
180
- * (await statisticsClient.getPaymentStatistics()).dailyPaymentsData.map(
181
- * (p) => ({
182
- * ...p,
183
- * totalAmountPaid: p.totalAmountPaid.toString(),
184
- * averageAmountPerJob: p.averageAmountPerJob.toString(),
185
- * averageAmountPerWorker: p.averageAmountPerWorker.toString(),
186
- * })
187
- * )
188
- * );
189
- *
190
- * console.log(
191
- * 'Payment statistics from 5/8 - 6/8:',
192
- * (
193
- * await statisticsClient.getPaymentStatistics({
194
- * from: new Date(2023, 4, 8),
195
- * to: new Date(2023, 5, 8),
196
- * })
197
- * ).dailyPaymentsData.map((p) => ({
165
+ * paymentStats.dailyPaymentsData.map((p) => ({
198
166
  * ...p,
199
167
  * totalAmountPaid: p.totalAmountPaid.toString(),
200
- * averageAmountPerJob: p.averageAmountPerJob.toString(),
201
168
  * averageAmountPerWorker: p.averageAmountPerWorker.toString(),
202
169
  * }))
203
170
  * );
171
+ *
172
+ * const paymentStatsRange = await StatisticsUtils.getPaymentStatistics(
173
+ * networkData,
174
+ * {
175
+ * from: new Date(2023, 4, 8),
176
+ * to: new Date(2023, 5, 8),
177
+ * }
178
+ * );
179
+ * console.log('Payment statistics from 5/8 - 6/8:', paymentStatsRange.dailyPaymentsData.length);
204
180
  * ```
205
181
  */
206
- getPaymentStatistics(filter?: IStatisticsFilter, options?: SubgraphOptions): Promise<IPaymentStatistics>;
182
+ static getPaymentStatistics(networkData: NetworkData, filter?: IStatisticsFilter, options?: SubgraphOptions): Promise<IPaymentStatistics>;
207
183
  /**
208
184
  * This function returns the statistical data of HMToken.
209
185
  *
@@ -215,52 +191,46 @@ export declare class StatisticsClient {
215
191
  * };
216
192
  * ```
217
193
  *
218
- * @param {SubgraphOptions} options Optional configuration for subgraph requests.
219
- * @returns {Promise<IHMTStatistics>} HMToken statistics data.
220
- *
221
- * **Code example**
194
+ * @param networkData - The network information required to connect to the subgraph
195
+ * @param options - Optional configuration for subgraph requests.
196
+ * @returns HMToken statistics data.
222
197
  *
198
+ * @example
223
199
  * ```ts
224
- * import { StatisticsClient, ChainId, NETWORKS } from '@human-protocol/sdk';
225
- *
226
- * const statisticsClient = new StatisticsClient(NETWORKS[ChainId.POLYGON_AMOY]);
227
- *
228
- * const hmtStatistics = await statisticsClient.getHMTStatistics();
200
+ * import { StatisticsUtils, ChainId, NETWORKS } from '@human-protocol/sdk';
229
201
  *
202
+ * const networkData = NETWORKS[ChainId.POLYGON_AMOY];
203
+ * const hmtStats = await StatisticsUtils.getHMTStatistics(networkData);
230
204
  * console.log('HMT statistics:', {
231
- * ...hmtStatistics,
232
- * totalTransferAmount: hmtStatistics.totalTransferAmount.toString(),
205
+ * ...hmtStats,
206
+ * totalTransferAmount: hmtStats.totalTransferAmount.toString(),
233
207
  * });
234
208
  * ```
235
209
  */
236
- getHMTStatistics(options?: SubgraphOptions): Promise<IHMTStatistics>;
210
+ static getHMTStatistics(networkData: NetworkData, options?: SubgraphOptions): Promise<IHMTStatistics>;
237
211
  /**
238
212
  * This function returns the holders of the HMToken with optional filters and ordering.
239
213
  *
240
- * **Input parameters**
241
- *
242
- * @param {IHMTHoldersParams} params HMT Holders params with filters and ordering
243
- * @param {SubgraphOptions} options Optional configuration for subgraph requests.
244
- * @returns {Promise<IHMTHolder[]>} List of HMToken holders.
245
- *
246
- * **Code example**
214
+ * @param networkData - The network information required to connect to the subgraph
215
+ * @param params - HMT Holders params with filters and ordering
216
+ * @param options - Optional configuration for subgraph requests.
217
+ * @returns List of HMToken holders.
247
218
  *
219
+ * @example
248
220
  * ```ts
249
- * import { StatisticsClient, ChainId, NETWORKS } from '@human-protocol/sdk';
221
+ * import { StatisticsUtils, ChainId, NETWORKS } from '@human-protocol/sdk';
250
222
  *
251
- * const statisticsClient = new StatisticsClient(NETWORKS[ChainId.POLYGON_AMOY]);
252
- *
253
- * const hmtHolders = await statisticsClient.getHMTHolders({
223
+ * const networkData = NETWORKS[ChainId.POLYGON_AMOY];
224
+ * const hmtHolders = await StatisticsUtils.getHMTHolders(networkData, {
254
225
  * orderDirection: 'asc',
255
226
  * });
256
- *
257
227
  * console.log('HMT holders:', hmtHolders.map((h) => ({
258
228
  * ...h,
259
229
  * balance: h.balance.toString(),
260
230
  * })));
261
231
  * ```
262
232
  */
263
- getHMTHolders(params?: IHMTHoldersParams, options?: SubgraphOptions): Promise<IHMTHolder[]>;
233
+ static getHMTHolders(networkData: NetworkData, params?: IHMTHoldersParams, options?: SubgraphOptions): Promise<IHMTHolder[]>;
264
234
  /**
265
235
  * This function returns the statistical data of HMToken day by day.
266
236
  *
@@ -286,29 +256,29 @@ export declare class StatisticsClient {
286
256
  * }
287
257
  * ```
288
258
  *
289
- * @param {IStatisticsFilter} filter Statistics params with duration data
290
- * @param {SubgraphOptions} options Optional configuration for subgraph requests.
291
- * @returns {Promise<IDailyHMT[]>} Daily HMToken statistics data.
292
- *
293
- * **Code example**
259
+ * @param networkData - The network information required to connect to the subgraph
260
+ * @param filter - Statistics params with duration data
261
+ * @param options - Optional configuration for subgraph requests.
262
+ * @returns Daily HMToken statistics data.
294
263
  *
264
+ * @example
295
265
  * ```ts
296
- * import { StatisticsClient, ChainId, NETWORKS } from '@human-protocol/sdk';
297
- *
298
- * const statisticsClient = new StatisticsClient(NETWORKS[ChainId.POLYGON_AMOY]);
299
- *
300
- * const dailyHMTStats = await statisticsClient.getHMTStatistics();
266
+ * import { StatisticsUtils, ChainId, NETWORKS } from '@human-protocol/sdk';
301
267
  *
268
+ * const networkData = NETWORKS[ChainId.POLYGON_AMOY];
269
+ * const dailyHMTStats = await StatisticsUtils.getHMTDailyData(networkData);
302
270
  * console.log('Daily HMT statistics:', dailyHMTStats);
303
271
  *
304
- * const hmtStatisticsRange = await statisticsClient.getHMTStatistics({
305
- * from: new Date(2023, 4, 8),
306
- * to: new Date(2023, 5, 8),
307
- * });
308
- *
309
- * console.log('HMT statistics from 5/8 - 6/8:', hmtStatisticsRange);
272
+ * const hmtStatsRange = await StatisticsUtils.getHMTDailyData(
273
+ * networkData,
274
+ * {
275
+ * from: new Date(2023, 4, 8),
276
+ * to: new Date(2023, 5, 8),
277
+ * }
278
+ * );
279
+ * console.log('HMT statistics from 5/8 - 6/8:', hmtStatsRange.length);
310
280
  * ```
311
281
  */
312
- getHMTDailyData(filter?: IStatisticsFilter, options?: SubgraphOptions): Promise<IDailyHMT[]>;
282
+ static getHMTDailyData(networkData: NetworkData, filter?: IStatisticsFilter, options?: SubgraphOptions): Promise<IDailyHMT[]>;
313
283
  }
314
284
  //# sourceMappingURL=statistics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"statistics.d.ts","sourceRoot":"","sources":["../src/statistics.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,gBAAgB;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;gBACS,WAAW,EAAE,WAAW;IAKpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDG;IACG,mBAAmB,CACvB,MAAM,GAAE,iBAAsB,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,iBAAiB,CAAC;IA4C7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2CG;IACG,mBAAmB,CACvB,MAAM,GAAE,iBAAsB,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,iBAAiB,CAAC;IAiC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkEG;IACG,oBAAoB,CACxB,MAAM,GAAE,iBAAsB,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,kBAAkB,CAAC;IAuC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB1E;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,aAAa,CACjB,MAAM,GAAE,iBAAsB,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC;IAyBxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+CG;IACG,eAAe,CACnB,MAAM,GAAE,iBAAsB,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,SAAS,EAAE,CAAC;CAiCxB"}
1
+ {"version":3,"file":"statistics.d.ts","sourceRoot":"","sources":["../src/statistics.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQtC;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAe;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqDG;WACU,mBAAmB,CAC9B,WAAW,EAAE,WAAW,EACxB,MAAM,GAAE,iBAAsB,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,iBAAiB,CAAC;IA6C7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDG;WACU,mBAAmB,CAC9B,WAAW,EAAE,WAAW,EACxB,MAAM,GAAE,iBAAsB,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,iBAAiB,CAAC;IAkC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyDG;WACU,oBAAoB,CAC/B,WAAW,EAAE,WAAW,EACxB,MAAM,GAAE,iBAAsB,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,kBAAkB,CAAC;IAwC9B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;WACU,gBAAgB,CAC3B,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC;IAiB1B;;;;;;;;;;;;;;;;;;;;;OAqBG;WACU,aAAa,CACxB,WAAW,EAAE,WAAW,EACxB,MAAM,GAAE,iBAAsB,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC;IA0BxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+CG;WACU,eAAe,CAC1B,WAAW,EAAE,WAAW,EACxB,MAAM,GAAE,iBAAsB,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,SAAS,EAAE,CAAC;CAkCxB"}