{"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":"dca2a69f-128c-4535-8b1c-1ff32b2cf908","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"waiting"},{"acceptedSubmissionHash":"cba31ad527832891bed7de4b04fa588065ddd15cc4f704810948101173bc5343","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"587567a5ef71546b5973ceaf6ef1dbbd590f49503b5ac9a6973ed86b89584857","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"587567a5ef71546b5973ceaf6ef1dbbd590f49503b5ac9a6973ed86b89584857","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"failed"},{"acceptedSubmissionHash":"1522f6bb3db3cc83d824b8943fddc8a35ae6728e5adf9ef0de9503f18a0f7f37","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_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.\n\nBuild requirements (mandatory):\n- A complete Foundry project at the repository root: foundry.toml with solc 0.8.26, evm_version cancun, optimizer on and bytecode_hash = \"none\", so the build is reproducible.\n- Contracts: SIMDTESTHook. The hook is the hook of this launch's pool; keep its creation code within the EIP-3860 size limit.\n- No selfdestruct and no delegatecall anywhere in runtime code. No proxies, no owner, no upgradeability.","parentJobId":null,"planHash":"73fef0e7e9cd6c6bcd595550ea4485940a210a9c395f93f4c994c414d0c40b8f","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"dca2a69f-128c-4535-8b1c-1ff32b2cf908","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-960-simd-launch-project-launches-token"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51527","feedbackHash":"97fc8c60b0bd3fcfd558826ae1b727ed41025855948079d718d11ff7a53e83b8","nodeKey":"build_contract_project","submissionHash":"cba31ad527832891bed7de4b04fa588065ddd15cc4f704810948101173bc5343","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51520","feedbackHash":"13e6ce9c98f8d26acc92bc06a8fc22793f62bb818820516807278dc050bff109","nodeKey":"write_foundry_tests","submissionHash":"1522f6bb3db3cc83d824b8943fddc8a35ae6728e5adf9ef0de9503f18a0f7f37","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"8e4bad6a351e9fabed1aea5f62c4dce2cc5dc8a4722e603562108ef5fd02950d","state":"blocked","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"ba139d0200307f2171abcda1a5f808b1e76592dbfdd10fbd5ff267185d0f91df","device":"95ad198755c46766","findings":[],"hash":"1522f6bb3db3cc83d824b8943fddc8a35ae6728e5adf9ef0de9503f18a0f7f37","nodeId":"1bc551ce-01e4-47eb-a10f-3835e058bc97","outcome":"completed","summary":"Added 34 tests under `test/` covering failure paths, donation accounting, buyback isolation, burning, rounding, and runtime restrictions.\n\nBoth currency orderings passed invariant campaigns of 256 runs × 64 calls.\n\nOffline verification succeeded: `forge build` and `forge test` — **74 passed, 0 failed**. No reproducible defects found; no contracts or configuration changed.","treeHash":"794ae7c9697a543982af6d49031cef55bb7150eb","usage":{"cachedInputTokens":985472,"inputTokens":67581,"model":"gpt-6-astra","outputTokens":17745,"runtime":"codex","turns":5,"wallClockMs":547095}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c0710fe928a45237","findings":[],"hash":"16439e1d665b494e4b52b097d42fad543c30683308c1f50eb39ccbdc7f8989f7","nodeId":"96cb13b9-1e5c-4e7f-99d2-b76646f5c543","outcome":"failed","summary":"needs input: The required pool.initialPrice and pool.tickSpacing are not specified for this launch. The repository uses sqrtPriceX96 = 79228162514264337593543950336 and tickSpacing = 60 only in test fixtures; those do not establish the intended launch parameters. The manifest schema requires concrete values and provides no placeholders for them. — What initialPrice (decimal sqrtPriceX96 for currency1/currency0 with currencies sorted by address) and tickSpacing should the SIMDTEST/IMD launch pool use?","treeHash":null,"usage":{"cachedInputTokens":339328,"inputTokens":45896,"model":"gpt-6-astra","outputTokens":2331,"runtime":"codex","turns":3,"wallClockMs":100754}},{"artifacts":[],"attempt":1,"bundleHash":"c28b4b0c8ad1ccde19d6b24dc5ae4bd70efdf00ab5332b7f25f295c5b9b908e6","device":"29393b39cd68a88a","findings":[],"hash":"cba31ad527832891bed7de4b04fa588065ddd15cc4f704810948101173bc5343","nodeId":"765b5a0f-ad12-4265-98c3-67d8eff3bbb4","outcome":"completed","summary":"Implemented the Foundry project with SIMDTEST, SIMDTESTHook, vendored dependencies, deployment helper, and integration tests.\n\n- `forge build` passed.\n- `forge test`: 40 passed.\n- `forge fmt --check` passed.\n- Hook creation code is below EIP-3860 limits.\n\nDeployment parameters, factory allocation duties, and buyback MEV limitations are documented in [README.md](/home/imd-worker/.identitymd/work/dca2a69f-128c-4535-8b1c-1ff32b2cf908/765b5a0f-ad12-4265-98c3-67d8eff3bbb4/README.md).","treeHash":"940bd77d28dc05e19dc3dd6bdc68e248c7a5f370","usage":{"cachedInputTokens":1084416,"inputTokens":79573,"model":"gpt-6-astra","outputTokens":34632,"runtime":"codex","turns":8,"wallClockMs":1447164}}],"verification":[{"checks":[{"durationMs":2632,"exitCode":0,"name":"build","output":"Compiling 58 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.56s\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:68:40\n   │\n68 │     constructor(IPoolManager manager_, address token_, address factory_) {\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:106:9\n    │\n106 │         nonReentrant\n    │         ━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/non-reentrant-not-first\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:151:64\n    │\n151 │         return (IHooks.beforeSwap.selector, toBeforeSwapDelta((anti + buy).toInt128(), 0), 0);\n    │                                                                ━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:151:71\n    │\n151 │         return (IHooks.beforeSwap.selector, toBeforeSwapDelta((anti + buy).toInt128(), 0), 0);\n    │                                                                       ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[non-reentrant-not-first]: `nonReentrant` is not the first modifier\n    ╭▸ src/SIMDTESTHook.sol:140:9\n    │\n140 │         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:335:9\n    │\n335 │         emit FeesCollected(anti, buy);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pendingDonation` is updated\n    ╭▸ src/SIMDTESTHook.sol:334:9\n    │\n334 │         poolManager.take(pairedCurrency, address(this), anti + buy);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:177:45\n    │\n177 │         return (IHooks.afterSwap.selector, (anti + buy).toInt128());\n    │                                             ━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:177:52\n    │\n177 │         return (IHooks.afterSwap.selector, (anti + buy).toInt128());\n    │                                                    ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[non-reentrant-not-first]: `nonReentrant` is not the first modifier\n    ╭▸ src/SIMDTESTHook.sol:160:32\n    │\n160 │     ) external onlyPoolManager nonReentrant returns (bytes4, int128) {\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:346:9\n    │\n346 │         emit Donated(amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:195:21\n    │\n195 │             limit = uint160(uint256(price) * 9950 / BPS);\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:199:86\n    │\n199 │             limit = upper >= TickMath.MAX_SQRT_PRICE ? TickMath.MAX_SQRT_PRICE - 1 : uint160(upper);\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[reentrancy-no-eth]: external call can be reentered before `_entered` is updated\n    ╭▸ src/SIMDTESTHook.sol:221:9\n    │\n221 │         poolManager.unlock(\"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:221:9\n    │\n221 │         poolManager.unlock(\"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[reentrancy-no-eth]: external call can be reentered before `accumulatedPaired` is updated\n    ╭▸ src/SIMDTESTHook.sol:243:30\n    │\n243 │         BalanceDelta delta = poolManager.swap(_poolKey, params, \"\");\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `accumulatedPaired` is updated\n    ╭▸ src/SIMDTESTHook.sol:291:13\n    │\n291 │         try this.quoteSwap(quoteParams) {\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pendingDonation` is updated\n    ╭▸ src/SIMDTESTHook.sol:254:9\n    │\n254 │         poolManager.take(Currency.wrap(token), BURN_ADDRESS, burned);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pendingDonation` is updated\n    ╭▸ src/SIMDTESTHook.sol:350:9\n    │\n350 │         poolManager.sync(pairedCurrency);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pendingDonation` is updated\n    ╭▸ src/SIMDTESTHook.sol:352:13\n    │\n352 │         if (poolManager.settle() != amount) revert SettlementMismatch();\n    │             ━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\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:252:9\n    │\n252 │         emit FeesCollected(anti, buy);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:236:22\n    │\n236 │         if (budget > uint256(uint128(type(int128).max))) budget = 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:236:30\n    │\n236 │         if (budget > uint256(uint128(type(int128).max))) budget = 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:236:67\n    │\n236 │         if (budget > uint256(uint128(type(int128).max))) budget = 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:236:75\n    │\n236 │         if (budget > uint256(uint128(type(int128).max))) budget = 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:238:62\n    │\n238 │             zeroForOne: pairedIsCurrency0, amountSpecified: -int256(budget), sqrtPriceLimitX96: 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:242:35\n    │\n242 │         params.amountSpecified += int256(anti + buy);\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:246:50\n    │\n246 │         if (pairDelta >= 0 || tokenDelta <= 0 || uint128(tokenDelta) < minOut) revert InsufficientOutput();\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:248:26\n    │\n248 │         uint256 burned = uint128(tokenDelta);\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[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SIMDTESTHook.sol:260:13\n    │\n260 │         if (block.timestamp > deadline) revert Expired();\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\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:265:9\n    │\n265 │         emit BuybackBurned(msg.sender, spent, burned);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:305:51\n    │\n305 │         uint256 filled = _abs(pairedIsCurrency0 ? quote.amount0() : quote.amount1());\n    │                                                   ━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:271:29\n    │\n271 │         uint256 requested = 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\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:272:25\n    │\n272 │         if (requested > uint256(uint128(type(int128).max))) revert InvalidAmount();\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:272:33\n    │\n272 │         if (requested > uint256(uint128(type(int128).max))) revert InvalidAmount();\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:285:55\n    │\n285 │             amountSpecified: params.amountSpecified + int256(total),\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:289:13\n    │\n289 │             uint256(quoteParams.amountSpecified < 0 ? -quoteParams.amountSpecified : quoteParams.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\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:294:40\n    │\n294 │             if (reason.length != 36 || bytes4(reason) != SwapQuoted.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:342:22\n    │\n342 │         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:342:30\n    │\n342 │         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:342:67\n    │\n342 │         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:342:75\n    │\n342 │         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[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:344:9\n    │\n344 │         poolManager.donate(_poolKey, pairedIsCurrency0 ? amount : 0, pairedIsCurrency0 ? 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:370:16\n    │\n370 │         return uint256(amount < 0 ? -int256(amount) : int256(amount));\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":3726,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/SIMDTESTHookAdversarial.t.sol:HookUnopenedTest\n[PASS] testEveryEntryPointRejectsUnopenedPool() (gas: 50316279)\n[PASS] testInvalidInitializationKeysCannotBindAndValidRetryWorks() (gas: 50749913)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 38.57ms (75.07ms CPU time)\n\nRan 13 tests for test/SIMDTESTHookAdversarial.t.sol:HookAdversarialPair0Test\n[PASS] testBuybackCannotRedeemPendingDonation() (gas: 1333873)\n[PASS] testBuybackTransferFailureRestoresPoolAndEscrows() (gas: 1031414)\n[PASS] testDonationIsSharedProportionallyBetweenActiveLPs() (gas: 1858836)\n[PASS] testDonationTransferFailurePreservesPendingAndCanRetry() (gas: 1210792)\n[PASS] testDustBuybackRevertsAtomicallyThenRecoversWithNewFees() (gas: 1057777)\n[PASS] testFactoryHasNoAdministrationAndCannotStopTrading() (gas: 1031513)\n[PASS] testFuzzExactOutputGrossUpUsesSmallestGross(uint16,uint8) (runs: 1000, μ: 446894, ~: 413148)\n[PASS] testIntegerExtremesRejectedBeforeFeeArithmetic() (gas: 967048)\n[PASS] testInvalidPriceLimitRollsBackAndAllowsLaterTrade() (gas: 1293022)\n[PASS] testNextSwapFlushesOldDonationAfterWindow() (gas: 1000568)\n[PASS] testRuntimeContainsNoDelegatecallOrSelfdestruct() (gas: 2771593)\n[PASS] testWrongPoolRejectedByAfterSwapToo() (gas: 263031)\n[PASS] testZeroSwapFailsWithoutTakingFees() (gas: 244459)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 118.49ms (95.88ms CPU time)\n\nRan 4 tests for test/SIMDTESTHook.t.sol:LaunchTest\n[PASS] testConstructorRejectsNonContractsAndWrongHookFlags() (gas: 43379020)\n[PASS] testFactorySeedsExactlyEightyPercentAndDonatesTenPercent() (gas: 43471196)\n[PASS] testFixedTokenAndLaunchAllocations() (gas: 138463)\n[PASS] testInitializationRequiresFactoryAndCorrectPool() (gas: 50005332)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 232.29ms (72.27ms CPU time)\n\nRan 13 tests for test/SIMDTESTHookAdversarial.t.sol:HookAdversarialPair1Test\n[PASS] testBuybackCannotRedeemPendingDonation() (gas: 1320464)\n[PASS] testBuybackTransferFailureRestoresPoolAndEscrows() (gas: 1014617)\n[PASS] testDonationIsSharedProportionallyBetweenActiveLPs() (gas: 1845728)\n[PASS] testDonationTransferFailurePreservesPendingAndCanRetry() (gas: 1198541)\n[PASS] testDustBuybackRevertsAtomicallyThenRecoversWithNewFees() (gas: 1040822)\n[PASS] testFactoryHasNoAdministrationAndCannotStopTrading() (gas: 1023901)\n[PASS] testFuzzExactOutputGrossUpUsesSmallestGross(uint16,uint8) (runs: 1000, μ: 454289, ~: 420152)\n[PASS] testIntegerExtremesRejectedBeforeFeeArithmetic() (gas: 953863)\n[PASS] testInvalidPriceLimitRollsBackAndAllowsLaterTrade() (gas: 1278405)\n[PASS] testNextSwapFlushesOldDonationAfterWindow() (gas: 987125)\n[PASS] testRuntimeContainsNoDelegatecallOrSelfdestruct() (gas: 2771593)\n[PASS] testWrongPoolRejectedByAfterSwapToo() (gas: 263037)\n[PASS] testZeroSwapFailsWithoutTakingFees() (gas: 244477)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 245.44ms (124.28ms CPU time)\n\nRan 18 tests for test/SIMDTESTHook.t.sol:PairCurrency0Test\n[PASS] testBeforeOpenAndUnauthorizedCallbacks() (gas: 663500)\n[PASS] testBuybackAfterWindowBurnsOnlyToken() (gas: 613648)\n[PASS] testBuybackBoundsRollbackAndDust() (gas: 2143992)\n[PASS] testBuybackDuringWindowAlsoPaysDonation() (gas: 626171)\n[PASS] testBuybackPartialFillPreservesUnspentFunds() (gas: 570931)\n[PASS] testDonationsEarnedByInRangeLiquidity() (gas: 731558)\n[PASS] testEmptyRangeQueuesAndLaterDonates() (gas: 944497)\n[PASS] testEveryAntiSnipeBlockAndBoundary() (gas: 4867847)\n[PASS] testFixedPlatformFeeIndependent() (gas: 1102440)\n[PASS] testFuzzAllDirectionsAndModes(uint96,uint8,bool,bool) (runs: 256, μ: 409113, ~: 406347)\n[PASS] testFuzzMixedSwapAndBuybackConservation(uint256) (runs: 256, μ: 3324845, ~: 3325131)\n[PASS] testFuzzPartialFills(uint8,bool,bool,uint24) (runs: 256, μ: 396553, ~: 385343)\n[PASS] testFuzzSmallAmountsRounding(uint16,uint8,bool,bool) (runs: 256, μ: 380640, ~: 385537)\n[PASS] testInitializationPermissionsAndSize() (gas: 62657)\n[PASS] testPartialFillsChargeOnlyExecutedShare() (gas: 828547)\n[PASS] testTokenTransferFailureRollsBackAndReentrancyRejected() (gas: 948177)\n[PASS] testWrongPoolCannotUseHook() (gas: 130438)\n[PASS] testZeroFillWithNoLiquidityDoesNotChargeOrBlock() (gas: 331988)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 252.47ms (426.63ms CPU time)\n\nRan 18 tests for test/SIMDTESTHook.t.sol:PairCurrency1Test\n[PASS] testBeforeOpenAndUnauthorizedCallbacks() (gas: 650317)\n[PASS] testBuybackAfterWindowBurnsOnlyToken() (gas: 598604)\n[PASS] testBuybackBoundsRollbackAndDust() (gas: 2114660)\n[PASS] testBuybackDuringWindowAlsoPaysDonation() (gas: 611187)\n[PASS] testBuybackPartialFillPreservesUnspentFunds() (gas: 557468)\n[PASS] testDonationsEarnedByInRangeLiquidity() (gas: 718376)\n[PASS] testEmptyRangeQueuesAndLaterDonates() (gas: 932226)\n[PASS] testEveryAntiSnipeBlockAndBoundary() (gas: 4843173)\n[PASS] testFixedPlatformFeeIndependent() (gas: 1087178)\n[PASS] testFuzzAllDirectionsAndModes(uint96,uint8,bool,bool) (runs: 256, μ: 409069, ~: 407015)\n[PASS] testFuzzMixedSwapAndBuybackConservation(uint256) (runs: 256, μ: 3319253, ~: 3321293)\n[PASS] testFuzzPartialFills(uint8,bool,bool,uint24) (runs: 256, μ: 396921, ~: 387267)\n[PASS] testFuzzSmallAmountsRounding(uint16,uint8,bool,bool) (runs: 256, μ: 376296, ~: 381454)\n[PASS] testInitializationPermissionsAndSize() (gas: 62657)\n[PASS] testPartialFillsChargeOnlyExecutedShare() (gas: 828516)\n[PASS] testTokenTransferFailureRollsBackAndReentrancyRejected() (gas: 926552)\n[PASS] testWrongPoolCannotUseHook() (gas: 130468)\n[PASS] testZeroFillWithNoLiquidityDoesNotChargeOrBlock() (gas: 322543)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 252.64ms (594.57ms CPU time)\n\nRan 3 tests for test/SIMDTESTHookInvariant.t.sol:HookInvariantPair1Test\n[PASS] invariant_valueConservation() (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------+---------------------+-------+---------+----------╮\n| Contract            | Selector            | Calls | Reverts | Discards |\n+========================================================================+\n| HookSequenceHandler | advanceBlock        | 2679  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| HookSequenceHandler | buyback             | 2828  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| HookSequenceHandler | changeLiquidity     | 2785  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| HookSequenceHandler | flushDonation       | 2674  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| HookSequenceHandler | swap                | 2743  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| HookSequenceHandler | unsolicitedTransfer | 2675  | 0       | 0        |\n╰---------------------+---------------------+-------+---------+----------╯\n\n[PASS] testHandlerExercisesLaunchDonationAndBurn() (gas: 2317672)\n[PASS] testHandlerExercisesQueuedDonationAndRecovery() (gas: 2739297)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.62s (3.62s CPU time)\n\nRan 3 tests for test/SIMDTESTHookInvariant.t.sol:HookInvariantPair0Test\n[PASS] invariant_valueConservation() (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------+---------------------+-------+---------+----------╮\n| Contract            | Selector            | Calls | Reverts | Discards |\n+========================================================================+\n| HookSequenceHandler | advanceBlock        | 2679  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| HookSequenceHandler | buyback             | 2828  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| HookSequenceHandler | changeLiquidity     | 2785  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| HookSequenceHandler | flushDonation       | 2674  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| HookSequenceHandler | swap                | 2743  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| HookSequenceHandler | unsolicitedTransfer | 2675  | 0       | 0        |\n╰---------------------+---------------------+-------+---------+----------╯\n\n[PASS] testHandlerExercisesLaunchDonationAndBurn() (gas: 2333877)\n[PASS] testHandlerExercisesQueuedDonationAndRecovery() (gas: 2637056)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.67s (3.65s CPU time)\n\nRan 8 test suites in 3.67s (8.43s CPU time): 74 tests passed, 0 failed, 0 skipped (74 total tests)\n","passed":true},{"durationMs":32,"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,uint160,uint256)\",\"SIMDTESTHook.donatePending()\",\"SIMDTESTHook.quoteSwap((bool,int256,uint160))\",\"SIMDTESTHook.unlockCallback(bytes)\"],\"files\":{\".gitignore\":3,\"DEPENDENCIES.md\":13,\"README.md\":98,\"SECURITY.md\":17,\"foundry.toml\":14,\"script/DeploySIMDTESTHook.sol\":36,\"src/SIMDTEST.sol\":11,\"src/SIMDTESTHook.sol\":372,\"test/SIMDTESTHook.t.sol\":542,\"test/SIMDTESTHookAdversarial.t.sol\":331,\"test/SIMDTESTHookInvariant.t.sol\":412,\"test/Support.sol\":118},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"1522f6bb3db3cc83d824b8943fddc8a35ae6728e5adf9ef0de9503f18a0f7f37","verifiedTreeHash":"794ae7c9697a543982af6d49031cef55bb7150eb","verifierVersion":"0.1.0+ad90ce4c"},{"checks":[{"durationMs":1799,"exitCode":0,"name":"build","output":"Compiling 55 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.72s\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:68:40\n   │\n68 │     constructor(IPoolManager manager_, address token_, address factory_) {\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:106:9\n    │\n106 │         nonReentrant\n    │         ━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/non-reentrant-not-first\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:151:64\n    │\n151 │         return (IHooks.beforeSwap.selector, toBeforeSwapDelta((anti + buy).toInt128(), 0), 0);\n    │                                                                ━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:151:71\n    │\n151 │         return (IHooks.beforeSwap.selector, toBeforeSwapDelta((anti + buy).toInt128(), 0), 0);\n    │                                                                       ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[non-reentrant-not-first]: `nonReentrant` is not the first modifier\n    ╭▸ src/SIMDTESTHook.sol:140:9\n    │\n140 │         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:335:9\n    │\n335 │         emit FeesCollected(anti, buy);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pendingDonation` is updated\n    ╭▸ src/SIMDTESTHook.sol:334:9\n    │\n334 │         poolManager.take(pairedCurrency, address(this), anti + buy);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:177:52\n    │\n177 │         return (IHooks.afterSwap.selector, (anti + buy).toInt128());\n    │                                                    ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:177:45\n    │\n177 │         return (IHooks.afterSwap.selector, (anti + buy).toInt128());\n    │                                             ━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[non-reentrant-not-first]: `nonReentrant` is not the first modifier\n    ╭▸ src/SIMDTESTHook.sol:160:32\n    │\n160 │     ) external onlyPoolManager nonReentrant returns (bytes4, int128) {\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:346:9\n    │\n346 │         emit Donated(amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:195:21\n    │\n195 │             limit = uint160(uint256(price) * 9950 / BPS);\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:199:86\n    │\n199 │             limit = upper >= TickMath.MAX_SQRT_PRICE ? TickMath.MAX_SQRT_PRICE - 1 : uint160(upper);\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[reentrancy-no-eth]: external call can be reentered before `_entered` is updated\n    ╭▸ src/SIMDTESTHook.sol:221:9\n    │\n221 │         poolManager.unlock(\"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:221:9\n    │\n221 │         poolManager.unlock(\"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[reentrancy-no-eth]: external call can be reentered before `accumulatedPaired` is updated\n    ╭▸ src/SIMDTESTHook.sol:243:30\n    │\n243 │         BalanceDelta delta = poolManager.swap(_poolKey, params, \"\");\n    │                              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `accumulatedPaired` is updated\n    ╭▸ src/SIMDTESTHook.sol:291:13\n    │\n291 │         try this.quoteSwap(quoteParams) {\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pendingDonation` is updated\n    ╭▸ src/SIMDTESTHook.sol:254:9\n    │\n254 │         poolManager.take(Currency.wrap(token), BURN_ADDRESS, burned);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pendingDonation` is updated\n    ╭▸ src/SIMDTESTHook.sol:350:9\n    │\n350 │         poolManager.sync(pairedCurrency);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\n\nwarning[reentrancy-no-eth]: external call can be reentered before `pendingDonation` is updated\n    ╭▸ src/SIMDTESTHook.sol:352:13\n    │\n352 │         if (poolManager.settle() != amount) revert SettlementMismatch();\n    │             ━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-no-eth\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:252:9\n    │\n252 │         emit FeesCollected(anti, buy);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:236:22\n    │\n236 │         if (budget > uint256(uint128(type(int128).max))) budget = 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:236:30\n    │\n236 │         if (budget > uint256(uint128(type(int128).max))) budget = 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:236:67\n    │\n236 │         if (budget > uint256(uint128(type(int128).max))) budget = 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:236:75\n    │\n236 │         if (budget > uint256(uint128(type(int128).max))) budget = 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:238:62\n    │\n238 │             zeroForOne: pairedIsCurrency0, amountSpecified: -int256(budget), sqrtPriceLimitX96: 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:242:35\n    │\n242 │         params.amountSpecified += int256(anti + buy);\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:246:50\n    │\n246 │         if (pairDelta >= 0 || tokenDelta <= 0 || uint128(tokenDelta) < minOut) revert InsufficientOutput();\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:248:26\n    │\n248 │         uint256 burned = uint128(tokenDelta);\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[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SIMDTESTHook.sol:260:13\n    │\n260 │         if (block.timestamp > deadline) revert Expired();\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\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:265:9\n    │\n265 │         emit BuybackBurned(msg.sender, spent, burned);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:305:51\n    │\n305 │         uint256 filled = _abs(pairedIsCurrency0 ? quote.amount0() : quote.amount1());\n    │                                                   ━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:271:29\n    │\n271 │         uint256 requested = 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\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:272:25\n    │\n272 │         if (requested > uint256(uint128(type(int128).max))) revert InvalidAmount();\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:272:33\n    │\n272 │         if (requested > uint256(uint128(type(int128).max))) revert InvalidAmount();\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:285:55\n    │\n285 │             amountSpecified: params.amountSpecified + int256(total),\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:289:13\n    │\n289 │             uint256(quoteParams.amountSpecified < 0 ? -quoteParams.amountSpecified : quoteParams.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\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:294:40\n    │\n294 │             if (reason.length != 36 || bytes4(reason) != SwapQuoted.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:342:22\n    │\n342 │         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:342:30\n    │\n342 │         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:342:67\n    │\n342 │         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:342:75\n    │\n342 │         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[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:344:9\n    │\n344 │         poolManager.donate(_poolKey, pairedIsCurrency0 ? amount : 0, pairedIsCurrency0 ? 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:370:16\n    │\n370 │         return uint256(amount < 0 ? -int256(amount) : int256(amount));\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":301,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 18 tests for test/SIMDTESTHook.t.sol:PairCurrency0Test\n[PASS] testBeforeOpenAndUnauthorizedCallbacks() (gas: 663500)\n[PASS] testBuybackAfterWindowBurnsOnlyToken() (gas: 613648)\n[PASS] testBuybackBoundsRollbackAndDust() (gas: 2143992)\n[PASS] testBuybackDuringWindowAlsoPaysDonation() (gas: 626171)\n[PASS] testBuybackPartialFillPreservesUnspentFunds() (gas: 570931)\n[PASS] testDonationsEarnedByInRangeLiquidity() (gas: 731558)\n[PASS] testEmptyRangeQueuesAndLaterDonates() (gas: 944497)\n[PASS] testEveryAntiSnipeBlockAndBoundary() (gas: 4867847)\n[PASS] testFixedPlatformFeeIndependent() (gas: 1102440)\n[PASS] testFuzzAllDirectionsAndModes(uint96,uint8,bool,bool) (runs: 256, μ: 410251, ~: 406347)\n[PASS] testFuzzMixedSwapAndBuybackConservation(uint256) (runs: 256, μ: 3321744, ~: 3320114)\n[PASS] testFuzzPartialFills(uint8,bool,bool,uint24) (runs: 256, μ: 398160, ~: 385343)\n[PASS] testFuzzSmallAmountsRounding(uint16,uint8,bool,bool) (runs: 256, μ: 375428, ~: 385525)\n[PASS] testInitializationPermissionsAndSize() (gas: 62657)\n[PASS] testPartialFillsChargeOnlyExecutedShare() (gas: 828547)\n[PASS] testTokenTransferFailureRollsBackAndReentrancyRejected() (gas: 948177)\n[PASS] testWrongPoolCannotUseHook() (gas: 130438)\n[PASS] testZeroFillWithNoLiquidityDoesNotChargeOrBlock() (gas: 331988)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 240.67ms (383.83ms CPU time)\n\nRan 4 tests for test/SIMDTESTHook.t.sol:LaunchTest\n[PASS] testConstructorRejectsNonContractsAndWrongHookFlags() (gas: 43379020)\n[PASS] testFactorySeedsExactlyEightyPercentAndDonatesTenPercent() (gas: 43471196)\n[PASS] testFixedTokenAndLaunchAllocations() (gas: 138463)\n[PASS] testInitializationRequiresFactoryAndCorrectPool() (gas: 50005332)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 244.14ms (94.15ms CPU time)\n\nRan 18 tests for test/SIMDTESTHook.t.sol:PairCurrency1Test\n[PASS] testBeforeOpenAndUnauthorizedCallbacks() (gas: 650317)\n[PASS] testBuybackAfterWindowBurnsOnlyToken() (gas: 598604)\n[PASS] testBuybackBoundsRollbackAndDust() (gas: 2114660)\n[PASS] testBuybackDuringWindowAlsoPaysDonation() (gas: 611187)\n[PASS] testBuybackPartialFillPreservesUnspentFunds() (gas: 557468)\n[PASS] testDonationsEarnedByInRangeLiquidity() (gas: 718376)\n[PASS] testEmptyRangeQueuesAndLaterDonates() (gas: 932226)\n[PASS] testEveryAntiSnipeBlockAndBoundary() (gas: 4843173)\n[PASS] testFixedPlatformFeeIndependent() (gas: 1087178)\n[PASS] testFuzzAllDirectionsAndModes(uint96,uint8,bool,bool) (runs: 256, μ: 408714, ~: 407015)\n[PASS] testFuzzMixedSwapAndBuybackConservation(uint256) (runs: 256, μ: 3314258, ~: 3313347)\n[PASS] testFuzzPartialFills(uint8,bool,bool,uint24) (runs: 256, μ: 398969, ~: 397419)\n[PASS] testFuzzSmallAmountsRounding(uint16,uint8,bool,bool) (runs: 256, μ: 376312, ~: 385111)\n[PASS] testInitializationPermissionsAndSize() (gas: 62657)\n[PASS] testPartialFillsChargeOnlyExecutedShare() (gas: 828516)\n[PASS] testTokenTransferFailureRollsBackAndReentrancyRejected() (gas: 926552)\n[PASS] testWrongPoolCannotUseHook() (gas: 130468)\n[PASS] testZeroFillWithNoLiquidityDoesNotChargeOrBlock() (gas: 322543)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 244.16ms (378.86ms CPU time)\n\nRan 3 test suites in 244.93ms (728.97ms CPU time): 40 tests passed, 0 failed, 0 skipped (40 total tests)\n","passed":true},{"durationMs":38,"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,uint160,uint256)\",\"SIMDTESTHook.donatePending()\",\"SIMDTESTHook.quoteSwap((bool,int256,uint160))\",\"SIMDTESTHook.unlockCallback(bytes)\"],\"files\":{\".gitignore\":3,\"DEPENDENCIES.md\":13,\"README.md\":98,\"SECURITY.md\":17,\"foundry.toml\":14,\"script/DeploySIMDTESTHook.sol\":36,\"src/SIMDTEST.sol\":11,\"src/SIMDTESTHook.sol\":372,\"test/SIMDTESTHook.t.sol\":542,\"test/Support.sol\":118},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":1431,"exitCode":0,"name":"slither","output":"[medium/high] incorrect-equality at src/SIMDTESTHook.sol:268: SIMDTESTHook._specifiedFees(IPoolManager.SwapParams) (src/SIMDTESTHook.sol#268-314) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/SIMDTESTHook.sol:330: SIMDTESTHook._collect(uint256,uint256) (src/SIMDTESTHook.sol#330-336) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/SIMDTESTHook.sol:338: SIMDTESTHook._donateIfPossible() (src/SIMDTESTHook.sol#338-347) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/SIMDTESTHook.sol:320: SIMDTESTHook._grossUpFees(uint256,uint256) (src/SIMDTESTHook.sol#320-328) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/SIMDTESTHook.sol:259: SIMDTESTHook._buyback(uint256,uint160,uint256) (src/SIMDTESTHook.sol#259-266) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/SIMDTESTHook.sol:225: Reentrancy in SIMDTESTHook.unlockCallback(bytes) (src/SIMDTESTHook.sol#225-257):\n[medium/medium] reentrancy-no-eth at src/SIMDTESTHook.sol:225: Reentrancy in SIMDTESTHook.unlockCallback(bytes) (src/SIMDTESTHook.sol#225-257):\n[medium/medium] reentrancy-no-eth at src/SIMDTESTHook.sol:154: Reentrancy in SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#154-178):\n[medium/medium] uninitialized-local at src/SIMDTESTHook.sol:145: SIMDTESTHook.beforeSwap(address,PoolKey,IPoolManager.SwapParams,bytes).buy (src/SIMDTESTHook.sol#145) is a local variable never initialized\n[medium/medium] uninitialized-local at src/SIMDTESTHook.sol:162: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes).anti (src/SIMDTESTHook.sol#162) is a local variable never initialized\n[medium/medium] uninitialized-local at src/SIMDTESTHook.sol:144: SIMDTESTHook.beforeSwap(address,PoolKey,IPoolManager.SwapParams,bytes).anti (src/SIMDTESTHook.sol#144) is a local variable never initialized\n[medium/medium] uninitialized-local at src/SIMDTESTHook.sol:163: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes).buy (src/SIMDTESTHook.sol#163) is a local variable never initialized\n[medium/medium] unused-return at src/SIMDTESTHook.sol:338: SIMDTESTHook._donateIfPossible() (src/SIMDTESTHook.sol#338-347) ignores return value by poolManager.donate(_poolKey,0,amount,) (src/SIMDTESTHook.sol#344)\n[medium/medium] unused-return at src/SIMDTESTHook.sol:216: SIMDTESTHook.donatePending() (src/SIMDTESTHook.sol#216-223) ignores return value by poolManager.unlock() (src/SIMDTESTHook.sol#221)\n[medium/medium] unused-return at src/SIMDTESTHook.sol:190: SIMDTESTHook.buybackAndBurn() (src/SIMDTESTHook.sol#190-202) ignores return value by (price,None,None,None) = poolManager.getSlot0(poolId) (src/SIMDTESTHook.sol#192)\n[medium/medium] unused-return at src/SIMDTESTHook.sol:338: SIMDTESTHook._donateIfPossible() (src/SIMDTESTHook.sol#338-347) ignores return value by poolManager.donate(_poolKey,amount,0,) (src/SIMDTESTHook.sol#344)\n[low/medium] reentrancy-benign at src/SIMDTESTHook.sol:216: Reentrancy in SIMDTESTHook.donatePending() (src/SIMDTESTHook.sol#216-223):\n[low/medium] reentrancy-benign at src/SIMDTESTHook.sol:259: Reentrancy in SIMDTESTHook._buyback(uint256,uint160,uint256) (src/SIMDTESTHook.sol#259-266):\n[low/medium] reentrancy-benign at src/SIMDTESTHook.sol:225: Reentrancy in SIMDTESTHook.unlockCallback(bytes) (src/SIMDTESTHook.sol#225-257):\n[low/medium] reentrancy-events at src/SIMDTESTHook.sol:225: Reentrancy in SIMDTESTHook.unlockCallback(bytes) (src/SIMDTESTHook.sol#225-257):\n[low/medium] reentrancy-events at src/SIMDTESTHook.sol:338: Reentrancy in SIMDTESTHook._donateIfPossible() (src/SIMDTESTHook.sol#338-347):\n[low/medium] reentrancy-events at src/SIMDTESTHook.sol:225: Reentrancy in SIMDTESTHook.unlockCallback(bytes) (src/SIMDTESTHook.sol#225-257):\n[low/medium] timestamp at src/SIMDTESTHook.sol:259: SIMDTESTHook._buyback(uint256,uint160,uint256) (src/SIMDTESTHook.sol#259-266) uses timestamp for comparisons","passed":true},{"durationMs":370,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/SIMDTESTHook.sol:221: Reentrancy: State change after external call (2 places)\n[low] large-numeric-literal at src/SIMDTEST.sol:9: Large Numeric Literal (2 places)\n[low] non-reentrant-not-first at src/SIMDTESTHook.sol:106: `nonReentrant` is Not the First Modifier (3 places)\n[low] state-change-without-event at src/SIMDTESTHook.sol:216: State Change Without Event\n[low] unchecked-return at src/SIMDTESTHook.sol:221: Unchecked Return (2 places)\n[low] unsafe-erc20-operation at src/SIMDTESTHook.sol:351: Unsafe ERC20 Operation","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"cba31ad527832891bed7de4b04fa588065ddd15cc4f704810948101173bc5343","verifiedTreeHash":"940bd77d28dc05e19dc3dd6bdc68e248c7a5f370","verifierVersion":"0.1.0+ad90ce4c"}]}