@ledgerhq/coin-sui 0.8.0-nightly.2 → 0.8.0-nightly.3
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +12 -0
- package/lib/api/index.integration.test.d.ts +1 -0
- package/lib/api/index.integration.test.js +98 -105
- package/lib/api/index.integration.test.js.map +1 -1
- package/lib/network/sdk.integration.test.d.ts +1 -0
- package/lib/network/sdk.integration.test.js +212 -224
- package/lib/network/sdk.integration.test.js.map +1 -1
- package/lib-es/api/index.integration.test.d.ts +1 -0
- package/lib-es/api/index.integration.test.js +97 -106
- package/lib-es/api/index.integration.test.js.map +1 -1
- package/lib-es/network/sdk.integration.test.d.ts +1 -0
- package/lib-es/network/sdk.integration.test.js +208 -225
- package/lib-es/network/sdk.integration.test.js.map +1 -1
- package/package.json +5 -5
- package/src/api/index.integration.test.ts +115 -123
- package/src/network/sdk.integration.test.ts +238 -244
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/coin-sui@0.
|
|
2
|
+
> @ledgerhq/coin-sui@0.8.0-nightly.2 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-sui
|
|
3
3
|
> tsc --outDir lib --module commonjs --moduleResolution node10 && tsc -m ES6 --outDir lib-es
|
|
4
4
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @ledgerhq/coin-sui
|
|
2
2
|
|
|
3
|
+
## 0.8.0-nightly.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#11129](https://github.com/LedgerHQ/ledger-live/pull/11129) [`2c80849`](https://github.com/LedgerHQ/ledger-live/commit/2c808497a27c144dee0b5373b84f496052b956ab) Thanks [@jccguimaraes](https://github.com/jccguimaraes)! - tests: enabled integration tests for SUI on mainnet
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`2da9b4a`](https://github.com/LedgerHQ/ledger-live/commit/2da9b4a5dd9fec3fea188fc9fa107b2c3479d1be), [`417e4fc`](https://github.com/LedgerHQ/ledger-live/commit/417e4fc8b92ebc95542ca915e14023fdb62497bb)]:
|
|
10
|
+
- @ledgerhq/types-cryptoassets@7.24.0-nightly.1
|
|
11
|
+
- @ledgerhq/cryptoassets@13.23.0-nightly.2
|
|
12
|
+
- @ledgerhq/types-live@6.79.0-nightly.1
|
|
13
|
+
- @ledgerhq/coin-framework@6.0.0-nightly.3
|
|
14
|
+
|
|
3
15
|
## 0.8.0-nightly.2
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -1,109 +1,102 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const _1 = require(".");
|
|
4
|
+
const client_1 = require("@mysten/sui/client");
|
|
5
|
+
describe("Sui Api", () => {
|
|
6
|
+
let module;
|
|
7
|
+
const SENDER = "0xc6dcb5b920f2fdb751b4a8bad800a4ee04257020d8d6e493c8103b760095016e";
|
|
8
|
+
const RECIPIENT = "0xba7080172a6d957b9ed2e3eb643529860be963cf4af896fb84f1cde00f46b561";
|
|
9
|
+
beforeAll(() => {
|
|
10
|
+
module = (0, _1.createApi)({
|
|
11
|
+
node: {
|
|
12
|
+
url: (0, client_1.getFullnodeUrl)("mainnet"),
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
describe("estimateFees", () => {
|
|
17
|
+
it("returns a default value", async () => {
|
|
18
|
+
// Given
|
|
19
|
+
const amount = BigInt(100_000);
|
|
20
|
+
// When
|
|
21
|
+
const result = await module.estimateFees({
|
|
22
|
+
asset: { type: "native" },
|
|
23
|
+
type: "send",
|
|
24
|
+
sender: SENDER,
|
|
25
|
+
recipient: RECIPIENT,
|
|
26
|
+
amount: amount,
|
|
27
|
+
});
|
|
28
|
+
// Then
|
|
29
|
+
expect(result.value).toBeGreaterThan(0);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe("listOperations", () => {
|
|
33
|
+
let txs;
|
|
34
|
+
beforeAll(async () => {
|
|
35
|
+
[txs] = await module.listOperations(SENDER, { minHeight: 0 });
|
|
36
|
+
});
|
|
37
|
+
it("returns a list regarding address parameter", async () => {
|
|
38
|
+
expect(txs.length).toBeGreaterThanOrEqual(10);
|
|
39
|
+
txs.forEach(operation => {
|
|
40
|
+
const isSenderOrReceipt = operation.senders.includes(SENDER) || operation.recipients.includes(SENDER);
|
|
41
|
+
expect(isSenderOrReceipt).toBeTruthy();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
it("returns all operations", async () => {
|
|
45
|
+
expect(txs.length).toBeGreaterThanOrEqual(10);
|
|
46
|
+
const checkSet = new Set(txs.map(elt => elt.tx.hash));
|
|
47
|
+
expect(checkSet.size).toBeLessThanOrEqual(txs.length);
|
|
48
|
+
});
|
|
49
|
+
it("at least operation should be IN", async () => {
|
|
50
|
+
expect(txs.length).toBeGreaterThanOrEqual(10);
|
|
51
|
+
expect(txs.some(t => t.type === "IN")).toBeTruthy();
|
|
52
|
+
});
|
|
53
|
+
it("at least operation should be OUT", async () => {
|
|
54
|
+
expect(txs.length).toBeGreaterThanOrEqual(10);
|
|
55
|
+
expect(txs.some(t => t.type === "OUT")).toBeTruthy();
|
|
56
|
+
});
|
|
57
|
+
it("uses the minHeight to filter", async () => {
|
|
58
|
+
const minHeightTxs = await module.listOperations(SENDER, { minHeight: 154925948 });
|
|
59
|
+
expect(txs.length).toBeGreaterThanOrEqual(minHeightTxs.length);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe("getBalance", () => {
|
|
63
|
+
it("returns a list regarding address parameter", async () => {
|
|
64
|
+
// When
|
|
65
|
+
const [acc] = await module.getBalance(SENDER);
|
|
66
|
+
// Then
|
|
67
|
+
expect(acc.value).toBeGreaterThan(0);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
describe("getLastBlock", () => {
|
|
71
|
+
it("returns the last block", async () => {
|
|
72
|
+
// When
|
|
73
|
+
const result = await module.lastBlock();
|
|
74
|
+
// Then
|
|
75
|
+
expect(result.hash).toBeDefined();
|
|
76
|
+
expect(result.height).toBeDefined();
|
|
77
|
+
expect(result.time).toBeInstanceOf(Date);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe("getBlockInfo", () => {
|
|
81
|
+
test("getBlockInfo should get block info by id or sequence number", async () => {
|
|
82
|
+
const block = await module.getBlockInfo(164167623);
|
|
83
|
+
expect(block.height).toEqual(164167623);
|
|
84
|
+
expect(block.hash).toEqual("3Q4zW4ieWnNgKLEq6kvVfP35PX2tBDUJERTWYyyz4eyS");
|
|
85
|
+
expect(block.time).toEqual(new Date(1751696298663));
|
|
86
|
+
expect(block.parent?.height).toEqual(164167622);
|
|
87
|
+
// expect(block.parent?.hash).toEqual("TODO");
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe("getBlock", () => {
|
|
91
|
+
test("getBlock should get block by id or sequence number", async () => {
|
|
92
|
+
const block = await module.getBlock(164167623);
|
|
93
|
+
expect(block.info.height).toEqual(164167623);
|
|
94
|
+
expect(block.info.hash).toEqual("3Q4zW4ieWnNgKLEq6kvVfP35PX2tBDUJERTWYyyz4eyS");
|
|
95
|
+
expect(block.info.time).toEqual(new Date(1751696298663));
|
|
96
|
+
expect(block.info.parent?.height).toEqual(164167622);
|
|
97
|
+
// expect(block.info.parent?.hash).toEqual("TODO");
|
|
98
|
+
expect(block.transactions.length).toEqual(19);
|
|
99
|
+
});
|
|
6
100
|
});
|
|
7
101
|
});
|
|
8
|
-
// import type { AlpacaApi, FeeEstimation, Operation } from "@ledgerhq/coin-framework/api/types";
|
|
9
|
-
// import { getEnv } from "@ledgerhq/live-env";
|
|
10
|
-
// import { SuiAsset } from "./types";
|
|
11
|
-
// import { createApi } from ".";
|
|
12
|
-
// describe("Sui Api", () => {
|
|
13
|
-
// let module: AlpacaApi<SuiAsset>;
|
|
14
|
-
// const SENDER = "0xc6dcb5b920f2fdb751b4a8bad800a4ee04257020d8d6e493c8103b760095016e";
|
|
15
|
-
// const RECIPIENT = "0xba7080172a6d957b9ed2e3eb643529860be963cf4af896fb84f1cde00f46b561";
|
|
16
|
-
// beforeAll(() => {
|
|
17
|
-
// module = createApi({
|
|
18
|
-
// node: {
|
|
19
|
-
// url: getEnv("API_SUI_NODE_PROXY"),
|
|
20
|
-
// },
|
|
21
|
-
// });
|
|
22
|
-
// });
|
|
23
|
-
// describe("estimateFees", () => {
|
|
24
|
-
// it("returns a default value", async () => {
|
|
25
|
-
// // Given
|
|
26
|
-
// const amount = BigInt(100_000);
|
|
27
|
-
// // When
|
|
28
|
-
// const result: FeeEstimation = await module.estimateFees({
|
|
29
|
-
// asset: { type: "native" },
|
|
30
|
-
// type: "send",
|
|
31
|
-
// sender: SENDER,
|
|
32
|
-
// recipient: RECIPIENT,
|
|
33
|
-
// amount: amount,
|
|
34
|
-
// });
|
|
35
|
-
// // Then
|
|
36
|
-
// expect(result.value).toBeGreaterThan(0);
|
|
37
|
-
// });
|
|
38
|
-
// });
|
|
39
|
-
// describe("listOperations", () => {
|
|
40
|
-
// let txs: Operation<SuiAsset>[];
|
|
41
|
-
// beforeAll(async () => {
|
|
42
|
-
// [txs] = await module.listOperations(SENDER, { minHeight: 0 });
|
|
43
|
-
// });
|
|
44
|
-
// it("returns a list regarding address parameter", async () => {
|
|
45
|
-
// expect(txs.length).toBeGreaterThanOrEqual(10);
|
|
46
|
-
// txs.forEach(operation => {
|
|
47
|
-
// const isSenderOrReceipt =
|
|
48
|
-
// operation.senders.includes(SENDER) || operation.recipients.includes(SENDER);
|
|
49
|
-
// expect(isSenderOrReceipt).toBeTruthy();
|
|
50
|
-
// });
|
|
51
|
-
// });
|
|
52
|
-
// it("returns all operations", async () => {
|
|
53
|
-
// expect(txs.length).toBeGreaterThanOrEqual(10);
|
|
54
|
-
// const checkSet = new Set(txs.map(elt => elt.tx.hash));
|
|
55
|
-
// expect(checkSet.size).toBeLessThanOrEqual(txs.length);
|
|
56
|
-
// });
|
|
57
|
-
// it("at least operation should be IN", async () => {
|
|
58
|
-
// expect(txs.length).toBeGreaterThanOrEqual(10);
|
|
59
|
-
// expect(txs.some(t => t.type === "IN")).toBeTruthy();
|
|
60
|
-
// });
|
|
61
|
-
// it("at least operation should be OUT", async () => {
|
|
62
|
-
// expect(txs.length).toBeGreaterThanOrEqual(10);
|
|
63
|
-
// expect(txs.some(t => t.type === "OUT")).toBeTruthy();
|
|
64
|
-
// });
|
|
65
|
-
// it("uses the minHeight to filter", async () => {
|
|
66
|
-
// const minHeightTxs = await module.listOperations(SENDER, { minHeight: 154925948 });
|
|
67
|
-
// expect(txs.length).toBeGreaterThanOrEqual(minHeightTxs.length);
|
|
68
|
-
// });
|
|
69
|
-
// });
|
|
70
|
-
// describe("getBalance", () => {
|
|
71
|
-
// it("returns a list regarding address parameter", async () => {
|
|
72
|
-
// // When
|
|
73
|
-
// const [acc] = await module.getBalance(SENDER);
|
|
74
|
-
// // Then
|
|
75
|
-
// expect(acc.value).toBeGreaterThan(0);
|
|
76
|
-
// });
|
|
77
|
-
// });
|
|
78
|
-
// describe("getLastBlock", () => {
|
|
79
|
-
// it("returns the last block", async () => {
|
|
80
|
-
// // When
|
|
81
|
-
// const result = await module.lastBlock();
|
|
82
|
-
// // Then
|
|
83
|
-
// expect(result.hash).toBeDefined();
|
|
84
|
-
// expect(result.height).toBeDefined();
|
|
85
|
-
// expect(result.time).toBeInstanceOf(Date);
|
|
86
|
-
// });
|
|
87
|
-
// });
|
|
88
|
-
// describe("getBlockInfo", () => {
|
|
89
|
-
// test("getBlockInfo should get block info by id or sequence number", async () => {
|
|
90
|
-
// const block = await module.getBlockInfo(164167623);
|
|
91
|
-
// expect(block.height).toEqual(164167623);
|
|
92
|
-
// expect(block.hash).toEqual("3Q4zW4ieWnNgKLEq6kvVfP35PX2tBDUJERTWYyyz4eyS");
|
|
93
|
-
// expect(block.time).toEqual(new Date(1751696298663));
|
|
94
|
-
// expect(block.parent?.height).toEqual(164167622);
|
|
95
|
-
// expect(block.parent?.hash).toEqual("TODO");
|
|
96
|
-
// });
|
|
97
|
-
// });
|
|
98
|
-
// describe("getBlock", () => {
|
|
99
|
-
// test("getBlock should get block by id or sequence number", async () => {
|
|
100
|
-
// const block = await module.getBlock(164167623);
|
|
101
|
-
// expect(block.info.height).toEqual(164167623);
|
|
102
|
-
// expect(block.info.hash).toEqual("3Q4zW4ieWnNgKLEq6kvVfP35PX2tBDUJERTWYyyz4eyS");
|
|
103
|
-
// expect(block.info.time).toEqual(new Date(1751696298663));
|
|
104
|
-
// expect(block.info.parent?.height).toEqual(164167622);
|
|
105
|
-
// expect(block.info.parent?.hash).toEqual("TODO");
|
|
106
|
-
// expect(block.transactions.length).toEqual(19);
|
|
107
|
-
// });
|
|
108
|
-
// });
|
|
109
102
|
//# sourceMappingURL=index.integration.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.integration.test.js","sourceRoot":"","sources":["../../src/api/index.integration.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.integration.test.js","sourceRoot":"","sources":["../../src/api/index.integration.test.ts"],"names":[],"mappings":";;AACA,wBAA8B;AAC9B,+CAAoD;AAEpD,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,IAAI,MAAiB,CAAC;IACtB,MAAM,MAAM,GAAG,oEAAoE,CAAC;IACpF,MAAM,SAAS,GAAG,oEAAoE,CAAC;IAEvF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,IAAA,YAAS,EAAC;YACjB,IAAI,EAAE;gBACJ,GAAG,EAAE,IAAA,uBAAc,EAAC,SAAS,CAAC;aAC/B;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,QAAQ;YACR,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAE/B,OAAO;YACP,MAAM,MAAM,GAAkB,MAAM,MAAM,CAAC,YAAY,CAAC;gBACtD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YAEH,OAAO;YACP,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,GAAgB,CAAC;QAErB,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAC9C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBACtB,MAAM,iBAAiB,GACrB,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9E,MAAM,CAAC,iBAAiB,CAAC,CAAC,UAAU,EAAE,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACnF,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,OAAO;YACP,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAE9C,OAAO;YACP,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACtC,OAAO;YACP,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,OAAO;YACP,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;YAC3E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChD,8CAA8C;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;YAChF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACrD,mDAAmD;YACnD,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|