{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"f4ac9f82-afba-4e16-9ea1-a6bf0961b9d5","kind":"impl_tests_review","nodes":[{"acceptedSubmissionHash":"435d056af7e4f3a3cdf01e55c4643340965630d6c695f840deec6dac4b476757","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"d37537abb20af46832b24602788d7895021ecaac20c6934313dc4f8aba4ad047","skillId":"implement-contract","tools":[]},"key":"impl","kind":"code","role":"implement","skillHash":"d37537abb20af46832b24602788d7895021ecaac20c6934313dc4f8aba4ad047","skillId":"implement-contract","state":"accepted"},{"acceptedSubmissionHash":"9ee818a1d388b589c9a27be13c9d421f6c3a894d4644ef5df21c047141db9dc3","dependsOn":["impl","tests"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"0dcd6e97f4dc8a3ae30f51815f16fa2d763a50b1d8729d0697f12d9e99fbc3fe","dependsOn":["impl","tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b037a7b6601e883cf8a906c1520c0624817d42d8310b65c2f43679204608af3","skillId":"adversarial-review","tools":[]},"key":"review","kind":"code","role":"review","skillHash":"6b037a7b6601e883cf8a906c1520c0624817d42d8310b65c2f43679204608af3","skillId":"adversarial-review","state":"accepted"},{"acceptedSubmissionHash":"494669abeb641b75cbfa02fa66ac35cb33134fbf5aa043ff98fe8fd99217b8df","dependsOn":["impl"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"[SIMD-LAUNCH]\nThis project launches the token SIMDTEST (SIMDTEST), an official test launch on the SIMD Launchpad paired with IMD. The project supports the SIMD ecosystem, including ChatSIMD and the SIMD Hackathon (10% of supply donated to 0x3dd5f73dd1a4e62630fad3909673f130ad429985). The token is fully minted at 1,000,000,000 tokens with 18 decimals, with 80% seeding the pool. The hook SIMDTESTHook acts on swap callbacks verifying the pool open block. It implements an anti-snipe fee starting at 30% on swaps during the first 10 blocks after pool open, linearly decreasing to 0%. This anti-snipe fee is not burned but donated back to the pool’s in-range liquidity via the PoolManager donate function using the incoming paired currency. Additionally, an extra 0.5% fee on every swap (on top of the pool 1.25%) is collected in the paired currency and held in the hook. Anyone can call buybackAndBurn() which swaps the accumulated paired currency for SIMDTEST tokens from the same pool and sends those tokens to the burn address 0x000000000000000000000000000000000000dEaD, reducing supply effectively. The hook is non-upgradeable, has no owner or pausing ability. The hook fees never affect the fixed SIMD fees (1%) nor the pool’s own 1.25% fee set by launch rules. Testing must include hooks triggered on swaps before, during, and after the first 10 blocks to verify anti-snipe fee logic, donation correctness to the pool, accumulation and buyback redemption of paired currency, and proper token burning behavior. The hook must never burn paired currency and must not trap users or arbitrarily restrict trades.","parentJobId":null,"planHash":"37f5f26605df4c6753ecf0f35765ee4433eff14f0016c9e89894d5a21011ae13","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"f4ac9f82-afba-4e16-9ea1-a6bf0961b9d5","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-959-simdtesthook"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51002","feedbackHash":"b34289d12efff5004dfb04d614038d757bf7a27c9663b89fcdb574664fafbb6e","nodeKey":"impl","submissionHash":"435d056af7e4f3a3cdf01e55c4643340965630d6c695f840deec6dac4b476757","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51103","feedbackHash":"2927e78d023b47a53edccb7c3964fc59d23bc11c16b7993261ac18e4863df747","nodeKey":"manifest","submissionHash":"9ee818a1d388b589c9a27be13c9d421f6c3a894d4644ef5df21c047141db9dc3","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51193","feedbackHash":"f49673825f21bb4441a53c9f832c4f5211c2846d71a5dad1001cd452df2eb4bc","nodeKey":"review","submissionHash":"0dcd6e97f4dc8a3ae30f51815f16fa2d763a50b1d8729d0697f12d9e99fbc3fe","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51138","feedbackHash":"ef4aa0a3065615e2ff4c72424c2dc958e51a92d946b63b092d580157fcab340b","nodeKey":"tests","submissionHash":"494669abeb641b75cbfa02fa66ac35cb33134fbf5aa043ff98fe8fd99217b8df","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"a7b035dec84f18b5aaa966829906d98212db89b89562c0125817453b6f6e8061","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fedfd42dfee2f4e6","findings":[],"hash":"0dcd6e97f4dc8a3ae30f51815f16fa2d763a50b1d8729d0697f12d9e99fbc3fe","nodeId":"b1443c0e-0f80-433e-be93-6edf47e56d94","outcome":"completed","summary":"No substantiated defects found. Recorded all 10 entry points in [.imd-findings.json](/home/seat/.identitymd/work/f4ac9f82-afba-4e16-9ea1-a6bf0961b9d5/b1443c0e-0f80-433e-be93-6edf47e56d94/.imd-findings.json).\n\nIndependent v4 integration checks passed: 14 tests, including 1,024 fuzz cases. Source and tests remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":530304,"inputTokens":67748,"model":"gpt-6-astra","outputTokens":9275,"runtime":"codex","turns":6,"wallClockMs":301843}},{"artifacts":[],"attempt":1,"bundleHash":"4217c34a0ffc285b89bbabf4d77621bba3e07fefe7199e4775d647644307e287","device":"ea5566a759ea17b3","findings":[],"hash":"435d056af7e4f3a3cdf01e55c4643340965630d6c695f840deec6dac4b476757","nodeId":"72596ea1-c479-45f0-a7a7-5bba143564d2","outcome":"completed","summary":"Implemented [src/SIMDTESTHook.sol](src/SIMDTESTHook.sol) with anti-snipe donations, paired-currency fee collection, and permissionless buyback-and-burn.\n\n`forge build`, standalone offline build, and `forge test` pass: 34 tests, including 1,024 fuzz cases.\n\nThe launch factory must perform the documented 80% liquidity and 10% hackathon allocations.","treeHash":"5f399eacf4c472435c935d95f9e93c4b19069ef2","usage":{"cachedInputTokens":1514880,"inputTokens":100048,"model":"gpt-6-astra","outputTokens":25967,"runtime":"codex","turns":7,"wallClockMs":746777}},{"artifacts":[],"attempt":1,"bundleHash":"587af86414033b4c425354f7b332b06a78ba16577bd942590dafab968fdf187f","device":"eb9b9b2a07ba481b","findings":[],"hash":"494669abeb641b75cbfa02fa66ac35cb33134fbf5aa043ff98fe8fd99217b8df","nodeId":"b363030a-c759-4629-8b05-d2d8bc13f9fe","outcome":"completed","summary":"Added [SIMDTESTHook.t.sol](/root/.identitymd/work/f4ac9f82-afba-4e16-9ea1-a6bf0961b9d5/b363030a-c759-4629-8b05-d2d8bc13f9fe/test/SIMDTESTHook.t.sol) covering fee timing, donations, buybacks, burning, failure paths, and reserve invariants.\n\nOffline `forge build` and `forge test` pass: 55 reported tests, including 20,480 randomized invariant calls.\n\nTests use a self-contained PoolManager accounting double; production v4 tick-crossing behavior remains outside coverage.","treeHash":"a496e7d00f587216fc90b35f89684a95f775533d","usage":{"cachedInputTokens":906112,"inputTokens":68146,"model":"gpt-6-astra","outputTokens":25580,"runtime":"codex","turns":7,"wallClockMs":694908}},{"artifacts":[],"attempt":1,"bundleHash":"c9fbf3e077424ec7abdabf1bd3e5b3101d4a5f14f4cf035576f16949226354c0","device":"fd4958ee1ca0d1f2","findings":[],"hash":"9ee818a1d388b589c9a27be13c9d421f6c3a894d4644ef5df21c047141db9dc3","nodeId":"ac1b4d90-0d45-4749-99e8-185354c81317","outcome":"completed","summary":"Created [launch.json](/home/seat/.identitymd/work/f4ac9f82-afba-4e16-9ea1-a6bf0961b9d5/ac1b4d90-0d45-4749-99e8-185354c81317/launch.json) with matching constructor arguments, hook permissions, and required pool settings.\n\n- Supplied schema checks passed.\n- `forge build` passed with existing source lint warnings.\n- `forge test`: 55 passed, 0 failed.\n- Only `launch.json` is included in the deliverable.","treeHash":"a0a3fe1d4b9514f0f083ab733525a9c008cc9215","usage":{"cachedInputTokens":269824,"inputTokens":50863,"model":"gpt-6-astra","outputTokens":4976,"runtime":"codex","turns":4,"wallClockMs":117952}}],"verification":[{"checks":[{"durationMs":123,"exitCode":0,"name":"build","output":"Compiling 1 files with Solc 0.8.26\nSolc 0.8.26 finished in 65.53ms\nCompiler run successful!\nwarning[missing-zero-check]: address parameter is used in a state write or value transfer without a zero-address check\n    ╭▸ src/SIMDTESTHook.sol:197:40\n    │\n197 │     constructor(IPoolManager manager_, address pairedCurrency_, uint256 openBlock_) {\n    │                                        ━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/missing-zero-check\n\nwarning[non-reentrant-not-first]: `nonReentrant` is not the first modifier\n    ╭▸ src/SIMDTESTHook.sol:273:9\n    │\n273 │         nonReentrant\n    │         ━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/non-reentrant-not-first\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:286:66\n    │\n286 │         return (IHooks.beforeSwap.selector, BeforeSwapDelta.wrap(int256(fee << 128)), 0);\n    │                                                                  ━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[non-reentrant-not-first]: `nonReentrant` is not the first modifier\n    ╭▸ src/SIMDTESTHook.sol:292:9\n    │\n292 │         nonReentrant\n    │         ━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/non-reentrant-not-first\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:309:9\n    │\n309 │         emit FeesCollected(executed, donation, buyback);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:298:46\n    │\n298 │         uint256 executed = pairedDelta < 0 ? uint256(-int256(pairedDelta)) : uint256(int256(pairedDelta));\n    │                                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:298:78\n    │\n298 │         uint256 executed = pairedDelta < 0 ? uint256(-int256(pairedDelta)) : uint256(int256(pairedDelta));\n    │                                                                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:310:68\n    │\n310 │         return (IHooks.afterSwap.selector, specified ? int128(0) : int128(int256(donation + buyback)));\n    │                                                                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:310:75\n    │\n310 │         return (IHooks.afterSwap.selector, specified ? int128(0) : int128(int256(donation + buyback)));\n    │                                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:340:9\n    │\n340 │         emit BuybackBurned(msg.sender, spent, burned);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:22\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:30\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:67\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:75\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:357:30\n    │\n357 │         BalanceDelta delta = poolManager.swap(_poolKey, SwapParams(zeroForOne, -int256(amount), uint160(limit)), \"\");\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:418:13\n    │\n418 │             poolManager.burn(address(this), uint160(pairedCurrency), claims);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:422:9\n    │\n422 │         poolManager.sync(Currency.wrap(pairedCurrency));\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:423:42\n    │\n423 │           (bool ok, bytes memory result) = pairedCurrency.call(\n    │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n424 │ ┃             abi.encodeWithSelector(bytes4(keccak256(\"transfer(address,uint256)\")), address(poolManager), amount)\n425 │ ┃         );\n    │ ┗━━━━━━━━━┛\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:431:24\n    │\n431 │         uint256 paid = poolManager.settle();\n    │                        ━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `buybackReferenceSqrtPriceX96` is updated\n    ╭▸ src/SIMDTESTHook.sol:367:9\n    │\n367 │         poolManager.take(Currency.wrap(token), BURN_ADDRESS, burned);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:357:81\n    │\n357 │         BalanceDelta delta = poolManager.swap(_poolKey, SwapParams(zeroForOne, -int256(amount), uint160(limit)), \"\");\n    │                                                                                 ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:357:97\n    │\n357 │         BalanceDelta delta = poolManager.swap(_poolKey, SwapParams(zeroForOne, -int256(amount), uint160(limit)), \"\");\n    │                                                                                                 ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint160' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:359:42\n    │\n359 │         int128 tokenDelta = zeroForOne ? int128(BalanceDelta.unwrap(delta)) : int128(BalanceDelta.unwrap(delta) >> 128);\n    │                                          ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:359:79\n    │\n359 │         int128 tokenDelta = zeroForOne ? int128(BalanceDelta.unwrap(delta)) : int128(BalanceDelta.unwrap(delta) >> 128);\n    │                                                                               ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:361:25\n    │\n361 │         uint256 spent = uint256(-int256(pairDelta));\n    │                         ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:362:26\n    │\n362 │         uint256 burned = uint256(int256(tokenDelta));\n    │                          ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:22\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:30\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:67\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:75\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:410:9\n    │\n410 │         emit Donated(amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:409:9\n    │\n409 │         poolManager.donate(_poolKey, pairIs0 ? amount : 0, pairIs0 ? 0 : amount, \"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:424:36\n    │\n424 │             abi.encodeWithSelector(bytes4(keccak256(\"transfer(address,uint256)\")), address(poolManager), amount)\n    │                                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:455:15\n    │\n455 │             ? int128(BalanceDelta.unwrap(delta) >> 128)\n    │               ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:456:15\n    │\n456 │             : int128(BalanceDelta.unwrap(delta));\n    │               ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:476:37\n    │\n476 │         adjusted.amountSpecified += int256(donation + buyback);\n    │                                     ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:480:40\n    │\n480 │             if (reason.length != 36 || bytes4(reason) != SwapQuote.selector) {\n    │                                        ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:485:24\n    │\n485 │             executed = uint256(quoted < 0 ? -quoted : quoted);\n    │                        ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:512:18\n    │\n512 │         amount = uint256(params.amountSpecified < 0 ? -params.amountSpecified : params.amountSpecified);\n    │                  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\n","passed":true},{"durationMs":46,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\nWarning: No tests found in project! Forge looks for functions that start with `test`\n","passed":true},{"durationMs":22,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SIMDTEST.approve(address,uint256)\",\"SIMDTEST.transfer(address,uint256)\",\"SIMDTEST.transferFrom(address,address,uint256)\",\"SIMDTESTHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SIMDTESTHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"SIMDTESTHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"SIMDTESTHook.buybackAndBurn()\",\"SIMDTESTHook.buybackAndBurn(uint256)\",\"SIMDTESTHook.quotePairedAmount((bool,int256,uint160))\",\"SIMDTESTHook.unlockCallback(bytes)\"],\"files\":{\"src/SIMDTESTHook.sol\":527},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":178,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":253,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/SIMDTESTHook.sol:357: Reentrancy: State change after external call\n[low] large-numeric-literal at src/SIMDTESTHook.sol:81: Large Numeric Literal (4 places)\n[low] literal-instead-of-constant at src/SIMDTESTHook.sol:286: Literal Instead of Constant (3 places)\n[low] missing-inheritance at src/SIMDTESTHook.sol:77: Missing Inheritance\n[low] non-reentrant-not-first at src/SIMDTESTHook.sol:273: `nonReentrant` is Not the First Modifier (2 places)\n[low] unchecked-return at src/SIMDTESTHook.sol:409: Unchecked Return","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"435d056af7e4f3a3cdf01e55c4643340965630d6c695f840deec6dac4b476757","verifiedTreeHash":"5f399eacf4c472435c935d95f9e93c4b19069ef2","verifierVersion":"0.1.0+ef8fb83e"},{"checks":[{"durationMs":435,"exitCode":0,"name":"build","output":"Compiling 2 files with Solc 0.8.26\nSolc 0.8.26 finished in 360.19ms\nCompiler run successful!\nwarning[missing-zero-check]: address parameter is used in a state write or value transfer without a zero-address check\n    ╭▸ src/SIMDTESTHook.sol:197:40\n    │\n197 │     constructor(IPoolManager manager_, address pairedCurrency_, uint256 openBlock_) {\n    │                                        ━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/missing-zero-check\n\nwarning[non-reentrant-not-first]: `nonReentrant` is not the first modifier\n    ╭▸ src/SIMDTESTHook.sol:273:9\n    │\n273 │         nonReentrant\n    │         ━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/non-reentrant-not-first\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:286:66\n    │\n286 │         return (IHooks.beforeSwap.selector, BeforeSwapDelta.wrap(int256(fee << 128)), 0);\n    │                                                                  ━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[non-reentrant-not-first]: `nonReentrant` is not the first modifier\n    ╭▸ src/SIMDTESTHook.sol:292:9\n    │\n292 │         nonReentrant\n    │         ━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/non-reentrant-not-first\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:309:9\n    │\n309 │         emit FeesCollected(executed, donation, buyback);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:298:46\n    │\n298 │         uint256 executed = pairedDelta < 0 ? uint256(-int256(pairedDelta)) : uint256(int256(pairedDelta));\n    │                                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:298:78\n    │\n298 │         uint256 executed = pairedDelta < 0 ? uint256(-int256(pairedDelta)) : uint256(int256(pairedDelta));\n    │                                                                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:310:68\n    │\n310 │         return (IHooks.afterSwap.selector, specified ? int128(0) : int128(int256(donation + buyback)));\n    │                                                                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:310:75\n    │\n310 │         return (IHooks.afterSwap.selector, specified ? int128(0) : int128(int256(donation + buyback)));\n    │                                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:340:9\n    │\n340 │         emit BuybackBurned(msg.sender, spent, burned);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:22\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:30\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:67\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:75\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:357:30\n    │\n357 │         BalanceDelta delta = poolManager.swap(_poolKey, SwapParams(zeroForOne, -int256(amount), uint160(limit)), \"\");\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:418:13\n    │\n418 │             poolManager.burn(address(this), uint160(pairedCurrency), claims);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:422:9\n    │\n422 │         poolManager.sync(Currency.wrap(pairedCurrency));\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:423:42\n    │\n423 │           (bool ok, bytes memory result) = pairedCurrency.call(\n    │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n424 │ ┃             abi.encodeWithSelector(bytes4(keccak256(\"transfer(address,uint256)\")), address(poolManager), amount)\n425 │ ┃         );\n    │ ┗━━━━━━━━━┛\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:431:24\n    │\n431 │         uint256 paid = poolManager.settle();\n    │                        ━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `buybackReferenceSqrtPriceX96` is updated\n    ╭▸ src/SIMDTESTHook.sol:367:9\n    │\n367 │         poolManager.take(Currency.wrap(token), BURN_ADDRESS, burned);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:357:81\n    │\n357 │         BalanceDelta delta = poolManager.swap(_poolKey, SwapParams(zeroForOne, -int256(amount), uint160(limit)), \"\");\n    │                                                                                 ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:357:97\n    │\n357 │         BalanceDelta delta = poolManager.swap(_poolKey, SwapParams(zeroForOne, -int256(amount), uint160(limit)), \"\");\n    │                                                                                                 ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint160' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:359:42\n    │\n359 │         int128 tokenDelta = zeroForOne ? int128(BalanceDelta.unwrap(delta)) : int128(BalanceDelta.unwrap(delta) >> 128);\n    │                                          ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:359:79\n    │\n359 │         int128 tokenDelta = zeroForOne ? int128(BalanceDelta.unwrap(delta)) : int128(BalanceDelta.unwrap(delta) >> 128);\n    │                                                                               ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:361:25\n    │\n361 │         uint256 spent = uint256(-int256(pairDelta));\n    │                         ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:362:26\n    │\n362 │         uint256 burned = uint256(int256(tokenDelta));\n    │                          ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:22\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:30\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:67\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:75\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:410:9\n    │\n410 │         emit Donated(amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:409:9\n    │\n409 │         poolManager.donate(_poolKey, pairIs0 ? amount : 0, pairIs0 ? 0 : amount, \"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:424:36\n    │\n424 │             abi.encodeWithSelector(bytes4(keccak256(\"transfer(address,uint256)\")), address(poolManager), amount)\n    │                                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:455:15\n    │\n455 │             ? int128(BalanceDelta.unwrap(delta) >> 128)\n    │               ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:456:15\n    │\n456 │             : int128(BalanceDelta.unwrap(delta));\n    │               ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:476:37\n    │\n476 │         adjusted.amountSpecified += int256(donation + buyback);\n    │                                     ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:480:40\n    │\n480 │             if (reason.length != 36 || bytes4(reason) != SwapQuote.selector) {\n    │                                        ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:485:24\n    │\n485 │             executed = uint256(quoted < 0 ? -quoted : quoted);\n    │                        ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:512:18\n    │\n512 │         amount = uint256(params.amountSpecified < 0 ? -params.amountSpecified : params.amountSpecified);\n    │                  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\n","passed":true},{"durationMs":2651,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SIMDTESTHook.t.sol:SIMDTESTTokenTest\n[PASS] testFixedSupplyMetadataAndFactoryAllocations() (gas: 186028)\n[PASS] testFuzzTransferConservesSupplyAndAllowsZeroAndSelf(uint256) (runs: 256, μ: 209650, ~: 210023)\n[PASS] testTransferFailuresAndAllowanceAccounting() (gas: 385178)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 7.27ms (7.44ms CPU time)\n\nRan 25 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookCurrency0Test\n[PASS] testAntiSnipeEveryBlockAndAllSwapModes() (gas: 26975056)\n[PASS] testBuybackFlushesDeferredClaimsThenUsesCash() (gas: 1469340)\n[PASS] testBuybackFlushesDeferredDonationAtomically() (gas: 1434042)\n[PASS] testBuybackIsPermissionlessAndBurnsOnlyLaunchTokens() (gas: 969422)\n[PASS] testBuybackMinimumFailureRollsBackThenCanRetry() (gas: 1042300)\n[PASS] testCannotTradeOrBuybackBeforeOpen() (gas: 270962)\n[PASS] testDeferredDonationFlushesWithoutSpendingBuybackReserve() (gas: 1223521)\n[PASS] testDeploymentAndPermissions() (gas: 114127)\n[PASS] testDustAndZeroFillDoNotChargeUnexecutedFees() (gas: 5523543)\n[PASS] testEmptyManagerCreatesBackedClaimsAndBuybackRedeemsThem() (gas: 1053616)\n[PASS] testExternalAccountsCannotForgeCallbacksOrQuote() (gas: 187905)\n[PASS] testFuzzFeesRoundingAndPartialFills(uint128,uint8,bool,bool,uint128) (runs: 256, μ: 674362, ~: 669759)\n[PASS] testInitializationValidationAndDelayedOpening() (gas: 51543665)\n[PASS] testInitializedPoolCannotBeReplacedAndForeignKeysCannotTrade() (gas: 171152)\n[PASS] testInvalidConfigurationRejected() (gas: 1566314)\n[PASS] testLiquidityGapCannotConsumeFeesAndRecoveryAllowsTrading() (gas: 1569254)\n[PASS] testMalformedBuybackDeltasRevertAtomically() (gas: 1996548)\n[PASS] testManipulatedSpotCannotReplacePriorReferenceInSameBlock() (gas: 1529095)\n[PASS] testMaximumSpecifiedBudgetsAreSafeForPartialFills() (gas: 1369659)\n[PASS] testNextBlockUsesLastObservedPrice() (gas: 912125)\n[PASS] testPartialBuybackPreservesUnspentReserveForAnyone() (gas: 1160276)\n[PASS] testPartialPairSpecifiedFillsHaveExactProportionalFees() (gas: 1372363)\n[PASS] testSpecifiedInvalidAmountsAndPoolErrorsBubble() (gas: 608002)\n[PASS] testTransferAndSettlementFailuresPreserveReserve() (gas: 2327991)\n[PASS] testUnlockMustBeExpectedAndReentrancyIsRejected() (gas: 1047393)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 207.06ms (135.83ms CPU time)\n\nRan 25 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookCurrency1Test\n[PASS] testAntiSnipeEveryBlockAndAllSwapModes() (gas: 26982012)\n[PASS] testBuybackFlushesDeferredClaimsThenUsesCash() (gas: 1482220)\n[PASS] testBuybackFlushesDeferredDonationAtomically() (gas: 1446782)\n[PASS] testBuybackIsPermissionlessAndBurnsOnlyLaunchTokens() (gas: 969744)\n[PASS] testBuybackMinimumFailureRollsBackThenCanRetry() (gas: 1042682)\n[PASS] testCannotTradeOrBuybackBeforeOpen() (gas: 271570)\n[PASS] testDeferredDonationFlushesWithoutSpendingBuybackReserve() (gas: 1236345)\n[PASS] testDeploymentAndPermissions() (gas: 114127)\n[PASS] testDustAndZeroFillDoNotChargeUnexecutedFees() (gas: 5524913)\n[PASS] testEmptyManagerCreatesBackedClaimsAndBuybackRedeemsThem() (gas: 1053954)\n[PASS] testExternalAccountsCannotForgeCallbacksOrQuote() (gas: 190985)\n[PASS] testFuzzFeesRoundingAndPartialFills(uint128,uint8,bool,bool,uint128) (runs: 256, μ: 675324, ~: 670558)\n[PASS] testInitializationValidationAndDelayedOpening() (gas: 259923428)\n[PASS] testInitializedPoolCannotBeReplacedAndForeignKeysCannotTrade() (gas: 172216)\n[PASS] testInvalidConfigurationRejected() (gas: 1566884)\n[PASS] testLiquidityGapCannotConsumeFeesAndRecoveryAllowsTrading() (gas: 1600846)\n[PASS] testMalformedBuybackDeltasRevertAtomically() (gas: 1997140)\n[PASS] testManipulatedSpotCannotReplacePriorReferenceInSameBlock() (gas: 1529522)\n[PASS] testMaximumSpecifiedBudgetsAreSafeForPartialFills() (gas: 1369997)\n[PASS] testNextBlockUsesLastObservedPrice() (gas: 912689)\n[PASS] testPartialBuybackPreservesUnspentReserveForAnyone() (gas: 1160644)\n[PASS] testPartialPairSpecifiedFillsHaveExactProportionalFees() (gas: 1372701)\n[PASS] testSpecifiedInvalidAmountsAndPoolErrorsBubble() (gas: 608192)\n[PASS] testTransferAndSettlementFailuresPreserveReserve() (gas: 2328583)\n[PASS] testUnlockMustBeExpectedAndReentrancyIsRejected() (gas: 1047705)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 207.08ms (236.39ms CPU time)\n\nRan 1 test for test/SIMDTESTHook.t.sol:SIMDTESTHookCurrency0InvariantTest\n[PASS]\nSIMDTESTHookCurrency0InvariantTest invariants:\n[PASS] invariantOnlyPurchasedLaunchTokensReachBurnAddress\n[PASS] invariantPairedSupplyAndImmutablePoolSurviveEverySequence\n[PASS] invariantReservesMatchIndependentFeeLedger\n SIMDTESTHookCurrency0InvariantTest invariants (runs: 128, calls: 10240, reverts: 0)\n\n╭----------------------+-------------------------+-------+---------+----------╮\n| Contract             | Selector                | Calls | Reverts | Discards |\n+=============================================================================+\n| HookInvariantHandler | advanceBlock            | 1664  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | buyback                 | 1641  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | changeLiquidity         | 1721  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | swap                    | 1778  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | swapWithCashlessManager | 1734  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | unauthorizedCallback    | 1702  | 0       | 0        |\n╰----------------------+-------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.59s (2.57s CPU time)\n\nRan 1 test for test/SIMDTESTHook.t.sol:SIMDTESTHookCurrency1InvariantTest\n[PASS]\nSIMDTESTHookCurrency1InvariantTest invariants:\n[PASS] invariantOnlyPurchasedLaunchTokensReachBurnAddress\n[PASS] invariantPairedSupplyAndImmutablePoolSurviveEverySequence\n[PASS] invariantReservesMatchIndependentFeeLedger\n SIMDTESTHookCurrency1InvariantTest invariants (runs: 128, calls: 10240, reverts: 0)\n\n╭----------------------+-------------------------+-------+---------+----------╮\n| Contract             | Selector                | Calls | Reverts | Discards |\n+=============================================================================+\n| HookInvariantHandler | advanceBlock            | 1664  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | buyback                 | 1641  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | changeLiquidity         | 1721  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | swap                    | 1778  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | swapWithCashlessManager | 1734  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | unauthorizedCallback    | 1702  | 0       | 0        |\n╰----------------------+-------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.60s (2.56s CPU time)\n\nRan 5 test suites in 2.61s (5.62s CPU time): 55 tests passed, 0 failed, 0 skipped (55 total tests)\n","passed":true},{"durationMs":23,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SIMDTEST.approve(address,uint256)\",\"SIMDTEST.transfer(address,uint256)\",\"SIMDTEST.transferFrom(address,address,uint256)\",\"SIMDTESTHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SIMDTESTHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"SIMDTESTHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"SIMDTESTHook.buybackAndBurn()\",\"SIMDTESTHook.buybackAndBurn(uint256)\",\"SIMDTESTHook.quotePairedAmount((bool,int256,uint160))\",\"SIMDTESTHook.unlockCallback(bytes)\"],\"files\":{\"src/SIMDTESTHook.sol\":527,\"test/SIMDTESTHook.t.sol\":1226},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"494669abeb641b75cbfa02fa66ac35cb33134fbf5aa043ff98fe8fd99217b8df","verifiedTreeHash":"a496e7d00f587216fc90b35f89684a95f775533d","verifierVersion":"0.1.0+ef8fb83e"},{"checks":[{"durationMs":442,"exitCode":0,"name":"build","output":"Compiling 2 files with Solc 0.8.26\nSolc 0.8.26 finished in 364.91ms\nCompiler run successful!\nwarning[missing-zero-check]: address parameter is used in a state write or value transfer without a zero-address check\n    ╭▸ src/SIMDTESTHook.sol:197:40\n    │\n197 │     constructor(IPoolManager manager_, address pairedCurrency_, uint256 openBlock_) {\n    │                                        ━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/missing-zero-check\n\nwarning[non-reentrant-not-first]: `nonReentrant` is not the first modifier\n    ╭▸ src/SIMDTESTHook.sol:273:9\n    │\n273 │         nonReentrant\n    │         ━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/non-reentrant-not-first\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:286:66\n    │\n286 │         return (IHooks.beforeSwap.selector, BeforeSwapDelta.wrap(int256(fee << 128)), 0);\n    │                                                                  ━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[non-reentrant-not-first]: `nonReentrant` is not the first modifier\n    ╭▸ src/SIMDTESTHook.sol:292:9\n    │\n292 │         nonReentrant\n    │         ━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/non-reentrant-not-first\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:309:9\n    │\n309 │         emit FeesCollected(executed, donation, buyback);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:298:46\n    │\n298 │         uint256 executed = pairedDelta < 0 ? uint256(-int256(pairedDelta)) : uint256(int256(pairedDelta));\n    │                                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:298:78\n    │\n298 │         uint256 executed = pairedDelta < 0 ? uint256(-int256(pairedDelta)) : uint256(int256(pairedDelta));\n    │                                                                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:310:68\n    │\n310 │         return (IHooks.afterSwap.selector, specified ? int128(0) : int128(int256(donation + buyback)));\n    │                                                                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:310:75\n    │\n310 │         return (IHooks.afterSwap.selector, specified ? int128(0) : int128(int256(donation + buyback)));\n    │                                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:340:9\n    │\n340 │         emit BuybackBurned(msg.sender, spent, burned);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:22\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:30\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:67\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:334:75\n    │\n334 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:357:30\n    │\n357 │         BalanceDelta delta = poolManager.swap(_poolKey, SwapParams(zeroForOne, -int256(amount), uint160(limit)), \"\");\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:418:13\n    │\n418 │             poolManager.burn(address(this), uint160(pairedCurrency), claims);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:422:9\n    │\n422 │         poolManager.sync(Currency.wrap(pairedCurrency));\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:423:42\n    │\n423 │           (bool ok, bytes memory result) = pairedCurrency.call(\n    │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n424 │ ┃             abi.encodeWithSelector(bytes4(keccak256(\"transfer(address,uint256)\")), address(poolManager), amount)\n425 │ ┃         );\n    │ ┗━━━━━━━━━┛\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pairedClaims` is updated\n    ╭▸ src/SIMDTESTHook.sol:431:24\n    │\n431 │         uint256 paid = poolManager.settle();\n    │                        ━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `buybackReferenceSqrtPriceX96` is updated\n    ╭▸ src/SIMDTESTHook.sol:367:9\n    │\n367 │         poolManager.take(Currency.wrap(token), BURN_ADDRESS, burned);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:357:81\n    │\n357 │         BalanceDelta delta = poolManager.swap(_poolKey, SwapParams(zeroForOne, -int256(amount), uint160(limit)), \"\");\n    │                                                                                 ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:357:97\n    │\n357 │         BalanceDelta delta = poolManager.swap(_poolKey, SwapParams(zeroForOne, -int256(amount), uint160(limit)), \"\");\n    │                                                                                                 ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint160' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:359:42\n    │\n359 │         int128 tokenDelta = zeroForOne ? int128(BalanceDelta.unwrap(delta)) : int128(BalanceDelta.unwrap(delta) >> 128);\n    │                                          ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:359:79\n    │\n359 │         int128 tokenDelta = zeroForOne ? int128(BalanceDelta.unwrap(delta)) : int128(BalanceDelta.unwrap(delta) >> 128);\n    │                                                                               ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:361:25\n    │\n361 │         uint256 spent = uint256(-int256(pairDelta));\n    │                         ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:362:26\n    │\n362 │         uint256 burned = uint256(int256(tokenDelta));\n    │                          ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:22\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:30\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:67\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:401:75\n    │\n401 │         if (amount > uint256(uint128(type(int128).max))) amount = uint256(uint128(type(int128).max));\n    │                                                                           ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:410:9\n    │\n410 │         emit Donated(amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:409:9\n    │\n409 │         poolManager.donate(_poolKey, pairIs0 ? amount : 0, pairIs0 ? 0 : amount, \"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:424:36\n    │\n424 │             abi.encodeWithSelector(bytes4(keccak256(\"transfer(address,uint256)\")), address(poolManager), amount)\n    │                                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:455:15\n    │\n455 │             ? int128(BalanceDelta.unwrap(delta) >> 128)\n    │               ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:456:15\n    │\n456 │             : int128(BalanceDelta.unwrap(delta));\n    │               ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:476:37\n    │\n476 │         adjusted.amountSpecified += int256(donation + buyback);\n    │                                     ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:480:40\n    │\n480 │             if (reason.length != 36 || bytes4(reason) != SwapQuote.selector) {\n    │                                        ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:485:24\n    │\n485 │             executed = uint256(quoted < 0 ? -quoted : quoted);\n    │                        ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:512:18\n    │\n512 │         amount = uint256(params.amountSpecified < 0 ? -params.amountSpecified : params.amountSpecified);\n    │                  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\n","passed":true},{"durationMs":2536,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SIMDTESTHook.t.sol:SIMDTESTTokenTest\n[PASS] testFixedSupplyMetadataAndFactoryAllocations() (gas: 186028)\n[PASS] testFuzzTransferConservesSupplyAndAllowsZeroAndSelf(uint256) (runs: 256, μ: 209330, ~: 210119)\n[PASS] testTransferFailuresAndAllowanceAccounting() (gas: 385178)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 7.65ms (7.81ms CPU time)\n\nRan 25 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookCurrency0Test\n[PASS] testAntiSnipeEveryBlockAndAllSwapModes() (gas: 26975056)\n[PASS] testBuybackFlushesDeferredClaimsThenUsesCash() (gas: 1469340)\n[PASS] testBuybackFlushesDeferredDonationAtomically() (gas: 1434042)\n[PASS] testBuybackIsPermissionlessAndBurnsOnlyLaunchTokens() (gas: 969422)\n[PASS] testBuybackMinimumFailureRollsBackThenCanRetry() (gas: 1042300)\n[PASS] testCannotTradeOrBuybackBeforeOpen() (gas: 270962)\n[PASS] testDeferredDonationFlushesWithoutSpendingBuybackReserve() (gas: 1223521)\n[PASS] testDeploymentAndPermissions() (gas: 114127)\n[PASS] testDustAndZeroFillDoNotChargeUnexecutedFees() (gas: 5523543)\n[PASS] testEmptyManagerCreatesBackedClaimsAndBuybackRedeemsThem() (gas: 1053616)\n[PASS] testExternalAccountsCannotForgeCallbacksOrQuote() (gas: 187905)\n[PASS] testFuzzFeesRoundingAndPartialFills(uint128,uint8,bool,bool,uint128) (runs: 256, μ: 667903, ~: 637171)\n[PASS] testInitializationValidationAndDelayedOpening() (gas: 51543665)\n[PASS] testInitializedPoolCannotBeReplacedAndForeignKeysCannotTrade() (gas: 171152)\n[PASS] testInvalidConfigurationRejected() (gas: 1566314)\n[PASS] testLiquidityGapCannotConsumeFeesAndRecoveryAllowsTrading() (gas: 1569254)\n[PASS] testMalformedBuybackDeltasRevertAtomically() (gas: 1996548)\n[PASS] testManipulatedSpotCannotReplacePriorReferenceInSameBlock() (gas: 1529095)\n[PASS] testMaximumSpecifiedBudgetsAreSafeForPartialFills() (gas: 1369659)\n[PASS] testNextBlockUsesLastObservedPrice() (gas: 912125)\n[PASS] testPartialBuybackPreservesUnspentReserveForAnyone() (gas: 1160276)\n[PASS] testPartialPairSpecifiedFillsHaveExactProportionalFees() (gas: 1372363)\n[PASS] testSpecifiedInvalidAmountsAndPoolErrorsBubble() (gas: 608002)\n[PASS] testTransferAndSettlementFailuresPreserveReserve() (gas: 2327991)\n[PASS] testUnlockMustBeExpectedAndReentrancyIsRejected() (gas: 1047393)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 206.94ms (126.17ms CPU time)\n\nRan 25 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookCurrency1Test\n[PASS] testAntiSnipeEveryBlockAndAllSwapModes() (gas: 26982012)\n[PASS] testBuybackFlushesDeferredClaimsThenUsesCash() (gas: 1482220)\n[PASS] testBuybackFlushesDeferredDonationAtomically() (gas: 1446782)\n[PASS] testBuybackIsPermissionlessAndBurnsOnlyLaunchTokens() (gas: 969744)\n[PASS] testBuybackMinimumFailureRollsBackThenCanRetry() (gas: 1042682)\n[PASS] testCannotTradeOrBuybackBeforeOpen() (gas: 271570)\n[PASS] testDeferredDonationFlushesWithoutSpendingBuybackReserve() (gas: 1236345)\n[PASS] testDeploymentAndPermissions() (gas: 114127)\n[PASS] testDustAndZeroFillDoNotChargeUnexecutedFees() (gas: 5524913)\n[PASS] testEmptyManagerCreatesBackedClaimsAndBuybackRedeemsThem() (gas: 1053954)\n[PASS] testExternalAccountsCannotForgeCallbacksOrQuote() (gas: 190985)\n[PASS] testFuzzFeesRoundingAndPartialFills(uint128,uint8,bool,bool,uint128) (runs: 256, μ: 668259, ~: 637258)\n[PASS] testInitializationValidationAndDelayedOpening() (gas: 259923428)\n[PASS] testInitializedPoolCannotBeReplacedAndForeignKeysCannotTrade() (gas: 172216)\n[PASS] testInvalidConfigurationRejected() (gas: 1566884)\n[PASS] testLiquidityGapCannotConsumeFeesAndRecoveryAllowsTrading() (gas: 1600846)\n[PASS] testMalformedBuybackDeltasRevertAtomically() (gas: 1997140)\n[PASS] testManipulatedSpotCannotReplacePriorReferenceInSameBlock() (gas: 1529522)\n[PASS] testMaximumSpecifiedBudgetsAreSafeForPartialFills() (gas: 1369997)\n[PASS] testNextBlockUsesLastObservedPrice() (gas: 912689)\n[PASS] testPartialBuybackPreservesUnspentReserveForAnyone() (gas: 1160644)\n[PASS] testPartialPairSpecifiedFillsHaveExactProportionalFees() (gas: 1372701)\n[PASS] testSpecifiedInvalidAmountsAndPoolErrorsBubble() (gas: 608192)\n[PASS] testTransferAndSettlementFailuresPreserveReserve() (gas: 2328583)\n[PASS] testUnlockMustBeExpectedAndReentrancyIsRejected() (gas: 1047705)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 206.92ms (225.59ms CPU time)\n\nRan 1 test for test/SIMDTESTHook.t.sol:SIMDTESTHookCurrency0InvariantTest\n[PASS]\nSIMDTESTHookCurrency0InvariantTest invariants:\n[PASS] invariantOnlyPurchasedLaunchTokensReachBurnAddress\n[PASS] invariantPairedSupplyAndImmutablePoolSurviveEverySequence\n[PASS] invariantReservesMatchIndependentFeeLedger\n SIMDTESTHookCurrency0InvariantTest invariants (runs: 128, calls: 10240, reverts: 0)\n\n╭----------------------+-------------------------+-------+---------+----------╮\n| Contract             | Selector                | Calls | Reverts | Discards |\n+=============================================================================+\n| HookInvariantHandler | advanceBlock            | 1737  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | buyback                 | 1686  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | changeLiquidity         | 1646  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | swap                    | 1685  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | swapWithCashlessManager | 1749  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | unauthorizedCallback    | 1737  | 0       | 0        |\n╰----------------------+-------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.44s (2.42s CPU time)\n\nRan 1 test for test/SIMDTESTHook.t.sol:SIMDTESTHookCurrency1InvariantTest\n[PASS]\nSIMDTESTHookCurrency1InvariantTest invariants:\n[PASS] invariantOnlyPurchasedLaunchTokensReachBurnAddress\n[PASS] invariantPairedSupplyAndImmutablePoolSurviveEverySequence\n[PASS] invariantReservesMatchIndependentFeeLedger\n SIMDTESTHookCurrency1InvariantTest invariants (runs: 128, calls: 10240, reverts: 0)\n\n╭----------------------+-------------------------+-------+---------+----------╮\n| Contract             | Selector                | Calls | Reverts | Discards |\n+=============================================================================+\n| HookInvariantHandler | advanceBlock            | 1737  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | buyback                 | 1686  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | changeLiquidity         | 1646  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | swap                    | 1685  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | swapWithCashlessManager | 1749  | 0       | 0        |\n|----------------------+-------------------------+-------+---------+----------|\n| HookInvariantHandler | unauthorizedCallback    | 1737  | 0       | 0        |\n╰----------------------+-------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.49s (2.44s CPU time)\n\nRan 5 test suites in 2.49s (5.35s CPU time): 55 tests passed, 0 failed, 0 skipped (55 total tests)\n","passed":true},{"durationMs":22,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SIMDTEST.approve(address,uint256)\",\"SIMDTEST.transfer(address,uint256)\",\"SIMDTEST.transferFrom(address,address,uint256)\",\"SIMDTESTHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SIMDTESTHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"SIMDTESTHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"SIMDTESTHook.buybackAndBurn()\",\"SIMDTESTHook.buybackAndBurn(uint256)\",\"SIMDTESTHook.quotePairedAmount((bool,int256,uint160))\",\"SIMDTESTHook.unlockCallback(bytes)\"],\"files\":{\"launch.json\":31,\"src/SIMDTESTHook.sol\":527,\"test/SIMDTESTHook.t.sol\":1226},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"9ee818a1d388b589c9a27be13c9d421f6c3a894d4644ef5df21c047141db9dc3","verifiedTreeHash":"a0a3fe1d4b9514f0f083ab733525a9c008cc9215","verifierVersion":"0.1.0+ef8fb83e"}]}