{"assessments":[],"deployments":[{"attestationHash":"66f28124b65bd7ed8d2a70943336f0fb2d6896b696154c92e44e81661f8d010d","chainId":11155111,"contracts":[],"id":"8fc7b5bc-d474-4d26-a35b-de08c27f39bd","manifestHash":"bda47d2dda4c834cc6b067ecaf87f0c7155bc5ab07a5a8d3e97f7ae30f447241","status":"parked"}],"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":"6555eb68-b39f-4cb0-88c2-393959935260","kind":"impl_tests_review","nodes":[{"acceptedSubmissionHash":"6cd885c741a73675d3cf58dc3e84333dd3a3bfe9e9056cc409f7d5675831c384","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":"c80c57b5346cc7e7b2d156ddc5a56c7668cfbe38cea989fc5c26dbcaa20a8e31","dependsOn":["impl","tests"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"83de5e083ee87bb970d0d8b494d849f7527d19d17529af3c48c939d5badca54c","dependsOn":["impl","tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"c26edc76dc7a76e09a42c3634054429c1679c6e247747d647a03f77e5b332d7e","skillId":"adversarial-review","tools":[]},"key":"review","kind":"code","role":"review","skillHash":"c26edc76dc7a76e09a42c3634054429c1679c6e247747d647a03f77e5b332d7e","skillId":"adversarial-review","state":"accepted"},{"acceptedSubmissionHash":"590f33dfd5dadeccadcf974ae1eee0ea8fbfac5d4b3568b0da2328418df19f99","dependsOn":["impl"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"5891004c5c81aca68ad1dcc551c7bc98f3ec10c61fce5561aee8956a26e95588","skillId":"write-foundry-tests","tools":[]},"key":"tests","kind":"code","role":"tests","skillHash":"5891004c5c81aca68ad1dcc551c7bc98f3ec10c61fce5561aee8956a26e95588","skillId":"write-foundry-tests","state":"accepted"}],"objective":"Build and launch a deflationary ERC-20 token project. The token is named Swarm with symbol SWORM and an initial supply of 1,000,000 tokens minted to the deployer at construction. On every transfer, exactly 1 percent of the transferred amount is burned (permanently removed from total supply) and the remaining 99 percent is delivered to the recipient. Provide a companion BurnTracker contract exposing the cumulative amount burned. Include full unit tests covering normal transfers, exact burn math, zero-amount transfers, self-transfers, and total supply decreasing, a README, and a gas report. Constructor-only, no external dependencies, no owner privileges beyond the initial mint.","parentJobId":null,"planHash":"80d92ac0bd1879e51e23e3b6d1275ceafb1665ca2801e66df211ef3dc6c898f9","previousHash":"ecd647dafa20d51b727d6c38cdf5507d619590eaabcaaa1b98402da7014ce415","projectId":"6555eb68-b39f-4cb0-88c2-393959935260","publication":{"commit":"80c2d93e7549b27ab2c08910959e90cd0f1c8292","deliveredAt":"2026-09-23T18:07:54.951Z","repoUrl":"https://github.com/identity-md-launches/launch-121-swarm-burntracker"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"8a0c769d1dac094632438ed2be58d7344eff25c2163ac46c3500b8b15ed7beb6","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"d89b0bcd7f123b4cfa02f347751af008bb3b859ca104e7b2580a0b5e1411e5d2","device":"90f1f5c3374333a0","findings":[{"description":"Swarm correctly implements the requested deflationary transfer, but cannot serve as the launch token accepted by Token.protected.t.sol:test_transferMovesExactlyWhatItWasAsked. That supplied check requires the recipient to receive the full gross transfer and totalSupply to remain unchanged. The only delivered token is Swarm; no separate fixed-supply launch token is present. A tests-only change cannot reconcile these requirements. The launch token selection or implementation requirements need to be resolved without removing Swarm's requested burn or blessing this incompatibility as passing.","line":79,"path":"src/Swarm.sol","reproduction":"Deploy Swarm with no arguments (initial supply 1000000000000000000000000). From its deployer call transfer(address(0xCAFE), 1000000000000000000000), which is initialSupply / 1000 as in the protected check. The call returns true. Protected expected recipient balance: 1000000000000000000000; actual: 990000000000000000000. Protected expected totalSupply: 1000000000000000000000000; actual: 999990000000000000000000. A minimal local scratch reproducer using each exact protected assertion separately failed with 'recipient received a different amount' and 'a transfer changed the supply' under forge test -vvvv. Swarm's burn is 10000000000000000000, so these failures are intrinsic to the requested behavior, not rounding noise. The delivered unit tests verify deflationary behavior; they do not claim the protected launch checks pass.","severity":"high","title":"Swarm's required burn conflicts with the protected launch-token transfer checks"}],"hash":"301bf3d466377b726b7dce0537c8cca545f4a5496f11eb64a345d53f34e65b7e","nodeId":"bb72e04a-c667-419a-9d93-fee8295c636e","outcome":"completed","summary":"Added 51 passing tests, including five fuzz tests and failure-path coverage. README notes and measured gas figures are embedded in the permitted test files.\n\n`forge build` and `forge test --gas-report` pass.\n\nReported the launch incompatibility in [.imd-findings.json](/Users/surf/.identitymd/work/6555eb68-b39f-4cb0-88c2-393959935260/bb72e04a-c667-419a-9d93-fee8295c636e/.imd-findings.json): Swarm’s required burn conflicts with protected checks requiring full receipt and unchanged supply.","treeHash":"859e4051cb6bf5bc755539d75a7c2a0cabada0df","usage":{"cachedInputTokens":344320,"inputTokens":39201,"model":"gpt-6-astra","outputTokens":17209,"runtime":"codex","turns":5,"wallClockMs":548588}},{"artifacts":[],"attempt":1,"bundleHash":"cfa90247ebdbfc39eac40ecefca618d0031243c4d140338df87ebc66c1b87f5a","device":"90f1f5c3374333a0","findings":[{"description":"The default local build selects solc 0.8.30 and includes IPFS metadata. The protected harness scans all deployed runtime bytes, including metadata, so it rejects the SwarmLaunchToken artifact and the companion BurnTracker artifact. These bytes are in CBOR metadata, not executable DELEGATECALL or SELFDESTRUCT instructions. The same source built with solc 0.8.26 passes both reproduced scans. This is a compiler-dependent artifact compatibility issue, not a failure of token accounting or evidence that a 0.8.26 launch fails. Source and configuration changes are outside this test revision's scope.","line":111,"path":"src/Swarm.sol","reproduction":"Run forge build --use 0.8.30 --offline with the repository defaults (optimizer disabled, bytecode_hash=ipfs). Deploy SwarmLaunchToken(), Swarm(), then BurnTracker(address(swarm)). Apply the exact protected runtime loop to address(contract).code: walk from offset zero, skip the following op-0x5f bytes for PUSH1 through PUSH32, and reject 0xf4, 0xf2, or 0xff. Expected: no rejected opcode for either launch token or tracker. Actual: SwarmLaunchToken fails at byte offset 3073 with 0xf4; BurnTracker fails at offset 760 with 0xff. The CBOR trailers start at offsets 3060 and 724 respectively. Both failures were reproduced on deployed contracts in scratch Foundry tests. Countercheck: rebuilding and running the identical probes with --use 0.8.26 --offline passes both scans. All 65 behavioral tests pass under both compiler versions.","severity":"low","title":"Default solc 0.8.30 artifacts fail protected opcode scans on metadata bytes"}],"hash":"3f89b25cae0cb4872d445555b77d6d48b864040f4c95ab8a5528044e4009df02","nodeId":"bb72e04a-c667-419a-9d93-fee8295c636e","outcome":"completed","summary":"Added 14 regression tests for launch-token behavior, failure paths, and BurnTracker integration. Updated the embedded README and gas report.\n\n`forge build`, `forge test`, and gas reporting succeed. All **65 tests pass** with Solidity 0.8.26 and 0.8.30.\n\nRecorded a compiler-dependent metadata scan issue in [.imd-findings.json](/Users/surf/.identitymd/work/6555eb68-b39f-4cb0-88c2-393959935260/bb72e04a-c667-419a-9d93-fee8295c636e/.imd-findings.json): the reproduced protected scan rejects 0.8.30 artifacts; 0.8.26 passes.","treeHash":"a205056d4e66512170234c0164c5ab7fe3f0ee33","usage":{"cachedInputTokens":662912,"inputTokens":74895,"model":"gpt-6-astra","outputTokens":14436,"runtime":"codex","turns":5,"wallClockMs":482470}},{"artifacts":[],"attempt":1,"bundleHash":"4cfb0db81d193fbfb137b055b5ad902176aee5826c12e42b5f740dd89ed2b82a","device":"90f1f5c3374333a0","findings":[],"hash":"590f33dfd5dadeccadcf974ae1eee0ea8fbfac5d4b3568b0da2328418df19f99","nodeId":"bb72e04a-c667-419a-9d93-fee8295c636e","outcome":"completed","summary":"Updated only the two permitted test files, adding 15 tests for converter accounting, failure rollback, rounding, donations, and BurnTracker integration. Refreshed the embedded README and gas report.\n\nVerification: `forge build` succeeds; all 80 tests pass offline with Solidity 0.8.26 and 0.8.30. All eight protected checks also pass in a local scratch replay.","treeHash":"acbf4b803e42b5def01e1495035c6f2eceb72465","usage":{"cachedInputTokens":897792,"inputTokens":91595,"model":"gpt-6-astra","outputTokens":16521,"runtime":"codex","turns":6,"wallClockMs":653689}},{"artifacts":[],"attempt":1,"bundleHash":"33fec32a80d3b9cf8bbde1070e845e39dc337d3da5c2301f4f9049a9c4074775","device":"98b4506bef931d13","findings":[],"hash":"6cd885c741a73675d3cf58dc3e84333dd3a3bfe9e9056cc409f7d5675831c384","nodeId":"90ebed71-a731-4b89-8d21-8866edf77c7d","outcome":"completed","summary":"The responses file is present and is deliberately excluded from git by the harness's own exclude rules, so the harness picks it up from the working tree. Everything is in place.\n\n**Outcome:** the high finding reproduced and is fixed in `src/Swarm.sol`. The low finding is disputed because it lives in build configuration I cannot touch. Both answers are in `.imd-responses.json`.\n\n**What reproduced.** Deploying the launch token, Swarm and BurnTracker through the exact ProjectDeploymentProbe left all 1,000,000 SWORM with the probe. No transfer or allowance path existed, so both reverts the reviewer described occurred.\n\n**What changed.** One new application contract, SwarmConverter, appended to Swarm.sol. Swarm, SwarmLaunchToken and BurnTracker code is untouched.\n\n- **Deploys its own children.** The converter's constructor creates Swarm, so the converter is the constructor caller that receives the supply, then creates BurnTracker bound to it. It reverts unless the launch token's supply is exactly 1000 times the SWORM supply.\n- **Permissionless two-way exchange.** Anyone can lock launch tokens to receive SWORM at 1000:1, or return SWORM to unlock launch tokens at the same rate on what actually arrives after the 1 percent burn.\n- **No privileges.** No owner, withdraw, pause, rescue or ETH acceptance. The documented invariant is that launch tokens held always back every SWORM outside the converter, so redemption cannot run short.\n- **Launch layout in the natspec README** now says: launch token SwarmLaunchToken, one application contract SwarmConverter with argument `$token`, and never deploy Swarm directly from the factory. The manifest node must follow this, since I cannot edit launch.json.\n\n**Verification.** In a scratch workspace mirroring the harness config, 19 tests pass. They cover the probe-based launch flow, exact burn and backing math, full-supply conversion, rejects, admin-surface probes, a 256-run fuzz round trip, and both protected suites with computed CREATE2 addresses. `forge build` from the repo root succeeds.\n\n**Low finding.** With bytecode_hash set to none, the documented policy setting, the opcode scan passes deterministically on all four contracts under solc 0.8.26 and 0.8.30, optimizer on and off. With IPFS metadata the result is random per digest and flips with every edit and with forge fmt, so I made no source change for it and explained this in the response.","treeHash":"2585590b65bc25104f0405b2133642708d21b28a","usage":{"cachedInputTokens":1580384,"inputTokens":770,"model":"claude-fable-5-1","outputTokens":42216,"runtime":"claude","turns":36,"wallClockMs":557789}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"5b3b071249317936","findings":[],"hash":"83de5e083ee87bb970d0d8b494d849f7527d19d17529af3c48c939d5badca54c","nodeId":"f463877d-2f48-4564-be7a-d8ec654139e0","outcome":"completed","summary":"Confirmed the prior high-severity stranded-supply finding is fixed. All 37 targeted tests passed, including factory deployment, conversion/redemption, and randomized accounting checks. No new reproducible defects found.\n\nWrote `{\"findings\":[]}` to `.imd-findings.json`. Repository contracts and tests remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":490752,"inputTokens":82162,"model":"gpt-6-astra","outputTokens":6432,"runtime":"codex","turns":4,"wallClockMs":229611}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"5b3b071249317936","findings":[{"description":"The current launch.json selects SwarmLaunchToken for distribution and liquidity, and deploys Swarm as an application. Swarm mints all 1,000,000 SWORM to its constructor caller, which is the factory. Under the supplied factory deployment model, there is no application-token distribution or forwarding call, and neither application provides a way to release this balance. Consequently, all SWORM remains inaccessible and BurnTracker stays at zero; users instead receive the unrelated, non-burning SWLT. The constructor test in test/BurnTracker.t.sol uses the impersonated account BOB as the factory and only checks its balance, so it does not establish that the supply can leave a real deployment contract. This prevents the requested deflationary token from becoming usable after launch. Resolving it requires an explicit, supported launch/distribution design consistent with the constructor mint and no-owner requirements.","line":52,"path":"src/Swarm.sol","reproduction":"On local Anvil, deploy the exact ProjectDeploymentProbe defined in Project.protected.t.sol from account A. Through probe.deploy, deploy SwarmLaunchToken with salt bytes32(uint256(1)), Swarm with salt bytes32(uint256(2)), and BurnTracker(address(swarm)) with salt bytes32(uint256(3)), matching the manifest dependency order. Observe swarm.balanceOf(address(probe)) == 1000000000000000000000000, swarm.balanceOf(A) == 0, and swarm.allowance(address(probe), A) == 0. From A, swarm.transfer(B, 1) reverts with ERC20InsufficientBalance(A, 0, 1), and swarm.transferFrom(address(probe), B, 1) reverts with ERC20InsufficientAllowance(A, 0, 1). The probe exposes only deploy and cannot transfer or approve the application balance. Expected: the launch provides a usable distribution path for the requested SWORM; actual: its entire supply is held by the deployment contract without such a path. Separately, deploy the manifest-selected SwarmLaunchToken from A and transfer(B, 100 ether): B receives 100 ether, totalSupply remains 1000000000 ether, and a tracker bound to Swarm reports zero. Thus the distributed launch token does not supply the requested 99 ether receipt and 1 ether burn either. These states were reproduced with solc 0.8.26 and Foundry Anvil 1.8.3.","severity":"high","title":"Factory deployment strands the entire SWORM supply"}],"hash":"c7a524f18fb320e574f64868f6a4415d02a8d766baa04ab9f44a46b28d443f51","nodeId":"f463877d-2f48-4564-be7a-d8ec654139e0","outcome":"completed","summary":"Recorded one **high-severity finding** in `.imd-findings.json`: factory deployment strands the entire SWORM supply while launching non-burning SWLT.\n\nReproduced locally with Anvil. All 65 existing tests pass. Contracts and tests remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":400256,"inputTokens":54731,"model":"gpt-6-astra","outputTokens":6588,"runtime":"codex","turns":4,"wallClockMs":223198}},{"artifacts":[],"attempt":1,"bundleHash":"7baada4dd1f46dc0eea416b23efe9ed1fa11fe81e1370e09c708a57e923e6451","device":"90f1f5c3374333a0","findings":[],"hash":"c80c57b5346cc7e7b2d156ddc5a56c7668cfbe38cea989fc5c26dbcaa20a8e31","nodeId":"09c546fd-cb6a-4489-8c94-d67b7479b6de","outcome":"completed","summary":"Updated `launch.json` to deploy `SwarmConverter(\"$token\")`, which creates Swarm and BurnTracker. Notes now match the accepted implementation.\n\nSchema constraints and constructor ABIs checked. `forge build` succeeded; `forge test --gas-report` passed all 80 tests. Only `launch.json` changed outside permitted scratch artifacts.","treeHash":"1f60c5b5a5cea92f7608bf27998dd88e5f1a3264","usage":{"cachedInputTokens":122112,"inputTokens":63080,"model":"gpt-6-astra","outputTokens":3143,"runtime":"codex","turns":3,"wallClockMs":111213}},{"artifacts":[],"attempt":1,"bundleHash":"d86a8281f2514513d3ca0be795569a5a4e54057b2fe719ac6a859d538ef38b27","device":"98b4506bef931d13","findings":[],"hash":"d18e0b35ce56095c0d0215fa0863501e67c33a1140075a22f85e26e45474cf2a","nodeId":"90ebed71-a731-4b89-8d21-8866edf77c7d","outcome":"completed","summary":"The response file is in place and excluded from git by the harness's own rules, as intended. The work is complete.\n\n**Finding reproduced and fixed.** Running the supplied protected token suite against Swarm's creation code failed exactly as reported: the recipient received 99% and total supply dropped. That is Swarm's required burn, so Swarm cannot be the launch token.\n\n**What changed** (only `src/Swarm.sol`, additive, 79 lines):\n- Added a second contract, `SwarmLaunchToken`, in the same file, since it is the only permitted path. It is a plain fixed-supply ERC-20 with no constructor arguments, 18 decimals, and exactly 10^27 minor units minted to the deployer. It has no mint, owner, pause, upgrade, or initialize path and no forbidden opcodes.\n- Extended the README comment on Swarm to state that Swarm is not the launch token and describe the launch layout: launch token first, then Swarm and BurnTracker as application contracts. The Swarm and BurnTracker code itself is untouched.\n\n**Verification** in the scratch project with Forge 1.8.3 and solc 0.8.26:\n- Protected token suite against the new launch token: 6 of 6 pass, including the transfer check that previously failed.\n- Scratch mirror of the project floor, deploying launch token, Swarm, then BurnTracker through a CREATE2 factory probe: launch supply and factory balance unchanged after each constructor, both application runtimes under the size limit with no forbidden opcodes.\n- Five launch token unit tests pass, including a 256-run fuzz on exact-amount transfers.\n- `forge build` succeeds.\n\n**Answered** the finding as fixed in `.imd-responses.json` at the repository root.\n\n**One point for the manifest author.** Swarm mints its 1,000,000 SWORM to its constructor caller, as the task specifies. Under the factory that caller is the factory itself, which cannot move them. I left this alone because the task states it explicitly and it was not part of the finding.","treeHash":"637a7511fb1c39476c5b8e95a8e56d4238b86499","usage":{"cachedInputTokens":468179,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":13663,"runtime":"claude","turns":19,"wallClockMs":170878}},{"artifacts":[],"attempt":1,"bundleHash":"a758aaacb614c49dc97b5d0d6be32a6414564cb7be2528f69de1ac1f9b85a1ff","device":"90f1f5c3374333a0","findings":[],"hash":"f2a278505795b99dd760dad293d0c3f9683601b05d61e85e25dbf31d0dc95c7f","nodeId":"09c546fd-cb6a-4489-8c94-d67b7479b6de","outcome":"completed","summary":"Created `launch.json` matching the accepted contracts and constructor order. Only the manifest is submitted.\n\nSchema and ABI checks passed; `forge build` succeeded; all 65 tests passed with a gas report.\n\nExisting limitation: Solidity 0.8.30 metadata triggers protected opcode checks for `SwarmLaunchToken` and `BurnTracker`. This cannot be fixed within the manifest-only scope.","treeHash":"7d08a2ac14f12c164eb31de61aa1ee53e2ba6ed1","usage":{"cachedInputTokens":138880,"inputTokens":41830,"model":"gpt-6-astra","outputTokens":3855,"runtime":"codex","turns":4,"wallClockMs":135515}},{"artifacts":[],"attempt":1,"bundleHash":"775ad2404592c23e43941cdd089d1bfc30e27b0f8fe07f49fdffdd9580fd6a8f","device":"90f1f5c3374333a0","findings":[],"hash":"f5beb89f1df6d800cc562dae7e9a5c1b91b68388b73e013df4a90d5e9766885f","nodeId":"90ebed71-a731-4b89-8d21-8866edf77c7d","outcome":"completed","summary":"Implemented Swarm and BurnTracker with the initial mint, 1% transfer burn rounded down in base units, cumulative burn tracking, and no admin privileges or external dependencies.\n\nDocumentation and gas measurements are embedded in the contract comments. Tests remain in `test/scratch/`.\n\n- `forge build`: passed.\n- `forge test`: all 34 scratch tests passed, including fuzz tests.\n- Protected checks: 7/8 passed. The remaining check requires fee-free transfers and unchanged supply, directly contradicting the requested burn behavior.\n\nOnly the two permitted source files are deliverable changes.","treeHash":"1f05c6016b7408a7ed09616f89a71b5769b2240d","usage":{"cachedInputTokens":445440,"inputTokens":58021,"model":"gpt-6-astra","outputTokens":15687,"runtime":"codex","turns":6,"wallClockMs":526891}}],"verification":[{"checks":[{"durationMs":169,"exitCode":0,"name":"build","output":"Compiling 4 files with Solc 0.8.30\nSolc 0.8.30 finished in 127.39ms\nCompiler run successful!\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/BurnTracker.t.sol:98:9\n   │\n98 │         token.transfer(BOB, 100 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:100:9\n    │\n100 │         token.transfer(address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:103:9\n    │\n103 │         token.transferFrom(address(this), BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:279:9\n    │\n279 │         token.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:333:9\n    │\n333 │         token.transfer(BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:341:9\n    │\n341 │         token.transfer(address(this), SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:349:9\n    │\n349 │         token.transfer(ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:355:9\n    │\n355 │         token.transfer(address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:357:9\n    │\n357 │         token.transfer(address(0), 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:373:9\n    │\n373 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:382:9\n    │\n382 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:391:9\n    │\n391 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:394:9\n    │\n394 │         token.transferFrom(ALICE, BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:401:9\n    │\n401 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:410:9\n    │\n410 │         token.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:421:9\n    │\n421 │         token.transferFrom(address(this), ALICE, SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:430:9\n    │\n430 │         token.transferFrom(address(this), address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:434:9\n    │\n434 │         token.transferFrom(address(this), address(0), 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:442:9\n    │\n442 │         token.transferFrom(address(0), ALICE, 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:453:9\n    │\n453 │         token.transferFrom(address(this), ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:520:9\n    │\n520 │         token.transferFrom(address(this), ALICE, amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":123,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 38 tests for test/Swarm.t.sol:SwarmTest\n[PASS] testAllowanceIsBoundToBothOwnerAndSpender() (gas: 92278)\n[PASS] testApproveEmitsEventAndReplacementAndRevocationDoNotBurn() (gas: 74714)\n[PASS] testApproveRejectsZeroSpenderIncludingRevocation() (gas: 60268)\n[PASS] testBurnRoundingAtMinorUnitBoundaries() (gas: 319025)\n[PASS] testCommonAdminAndMintEntrypointsRejectBothDeployerAndStranger() (gas: 266107)\n[PASS] testConsecutiveTransfersChargeEveryHolderIncludingDeployer() (gas: 116636)\n[PASS] testConstructorMetadataAndSupply() (gas: 55654)\n[PASS] testConstructorMintsOnlyToItsCallerAndEmitsMint() (gas: 772048)\n[PASS] testDeployerCannotBypassItsOwnTransferFromAllowance() (gas: 55236)\n[PASS] testDustTransferEmitsDeliveryWithoutBurnEvent() (gas: 74264)\n[PASS] testExactAllowanceCannotBeReused() (gas: 92859)\n[PASS] testFuzzInsufficientAllowancePreservesState(uint256,uint256) (runs: 256, μ: 81795, ~: 82728)\n[PASS] testFuzzSelfTransferConservesSupply(uint256) (runs: 256, μ: 53865, ~: 54662)\n[PASS] testFuzzTransferConservesSupply(uint256) (runs: 256, μ: 75776, ~: 76473)\n[PASS] testFuzzTransferFromConservesSupplyAndSpendsAllowance(uint256,uint256) (runs: 256, μ: 107393, ~: 108675)\n[PASS] testRevokedAllowanceCannotBeSpent() (gas: 66394)\n[PASS] testSelfTransferDebitsOnlyBurnAndEmitsBothEvents() (gas: 65501)\n[PASS] testSelfTransferEntireBalance() (gas: 51200)\n[PASS] testSelfTransferRequiresGrossBalanceEvenWhenBurnIsAffordable() (gas: 54840)\n[PASS] testSpenderCanReceiveDelegatedTransfer() (gas: 84690)\n[PASS] testTransferBurnsExactlyOnePercentAndEmitsNetAndBurn() (gas: 87137)\n[PASS] testTransferEntireSupply() (gas: 70293)\n[PASS] testTransferFromBalanceFailureRollsBackAllowance() (gas: 65300)\n[PASS] testTransferFromInvalidRecipientRollsBackAllowance() (gas: 70438)\n[PASS] testTransferFromMaximumAmountWithUnlimitedAllowanceRevertsOnBalance() (gas: 83937)\n[PASS] testTransferFromRejectsMissingAllowance() (gas: 60041)\n[PASS] testTransferFromRejectsZeroSenderEvenForZeroAmount() (gas: 59861)\n[PASS] testTransferFromRequiresGrossAllowanceNotNetReceipt() (gas: 82174)\n[PASS] testTransferFromSelfBurnsAndConsumesGrossAllowance() (gas: 65319)\n[PASS] testTransferFromSpendsGrossAllowanceAndEmitsNetAndBurn() (gas: 116799)\n[PASS] testTransferRejectsInsufficientBalance() (gas: 55392)\n[PASS] testTransferRejectsMaximumUintAmountWithoutOverflow() (gas: 54448)\n[PASS] testTransferRejectsZeroRecipientEvenForZeroAmount() (gas: 56214)\n[PASS] testUnlimitedAllowanceSurvivesRepeatedSpending() (gas: 117743)\n[PASS] testZeroSelfTransfer() (gas: 60322)\n[PASS] testZeroTransferFromFundedAccountEmitsTransferAndPreservesState() (gas: 59046)\n[PASS] testZeroTransferFromUnfundedAccount() (gas: 59625)\n[PASS] testZeroTransferFromWithoutBalanceOrAllowance() (gas: 65035)\nSuite result: ok. 38 passed; 0 failed; 0 skipped; finished in 76.27ms (95.81ms CPU time)\n\nRan 13 tests for test/BurnTracker.t.sol:BurnTrackerTest\n[PASS] testConstructorBindsTokenAndStartsAtZero() (gas: 48975)\n[PASS] testConstructorRejectsAccountWithoutCode() (gas: 83936)\n[PASS] testConstructorRejectsContractWithoutSupplyInterface() (gas: 84117)\n[PASS] testConstructorRejectsZeroAddress() (gas: 81456)\n[PASS] testFuzzTransferSequenceMaintainsCumulativeBurns(uint256[12]) (runs: 256, μ: 727537, ~: 729581)\n[PASS] testLateDeploymentIncludesEarlierBurnsAndContinuesTracking() (gas: 304771)\n[PASS] testNeitherDeployerNorStrangerCanRebindOrResetTracker() (gas: 849055)\n[PASS] testRepeatedReadsByAnyCallerDoNotResetBurns() (gas: 80599)\n[PASS] testRevertedTransfersDoNotChangePreviouslyAccumulatedBurns() (gas: 96632)\n[PASS] testRoundingIsAppliedPerTransferAndTrackerSumsActualBurns() (gas: 81517)\n[PASS] testTrackerAccumulatesDirectDelegatedAndSelfTransferBurns() (gas: 125134)\n[PASS] testTrackersForDifferentTokensRemainIndependent() (gas: 1051300)\n[PASS] testZeroAndDustTransfersAndApprovalsDoNotChangeExistingBurns() (gas: 125881)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 76.34ms (84.95ms CPU time)\n\nRan 2 test suites in 77.86ms (152.61ms CPU time): 51 tests passed, 0 failed, 0 skipped (51 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"301bf3d466377b726b7dce0537c8cca545f4a5496f11eb64a345d53f34e65b7e","verifiedTreeHash":"859e4051cb6bf5bc755539d75a7c2a0cabada0df","verifierVersion":"0.1.0+23659b86"},{"checks":[{"durationMs":212,"exitCode":0,"name":"build","output":"Compiling 4 files with Solc 0.8.30\nSolc 0.8.30 finished in 166.50ms\nCompiler run successful!\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:148:9\n    │\n148 │         token.transfer(BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:150:9\n    │\n150 │         token.transfer(address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:153:9\n    │\n153 │         token.transferFrom(address(this), BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:292:9\n    │\n292 │         token.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:346:9\n    │\n346 │         token.transfer(BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:354:9\n    │\n354 │         token.transfer(address(this), SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:362:9\n    │\n362 │         token.transfer(ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:368:9\n    │\n368 │         token.transfer(address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:370:9\n    │\n370 │         token.transfer(address(0), 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:386:9\n    │\n386 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:395:9\n    │\n395 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:404:9\n    │\n404 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:407:9\n    │\n407 │         token.transferFrom(ALICE, BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:414:9\n    │\n414 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:423:9\n    │\n423 │         token.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:434:9\n    │\n434 │         token.transferFrom(address(this), ALICE, SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:443:9\n    │\n443 │         token.transferFrom(address(this), address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:447:9\n    │\n447 │         token.transferFrom(address(this), address(0), 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:455:9\n    │\n455 │         token.transferFrom(address(0), ALICE, 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:466:9\n    │\n466 │         token.transferFrom(address(this), ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:533:9\n    │\n533 │         token.transferFrom(address(this), ALICE, amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:629:9\n    │\n629 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:654:9\n    │\n654 │         launchToken.transfer(BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:660:9\n    │\n660 │         launchToken.transfer(ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:666:9\n    │\n666 │         launchToken.transfer(address(this), LAUNCH_SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:675:9\n    │\n675 │         launchToken.transferFrom(address(this), ALICE, LAUNCH_SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:685:13\n    │\n685 │             launchToken.transfer(address(0), amounts[i]);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:688:13\n    │\n688 │             launchToken.transferFrom(address(this), address(0), amounts[i]);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:695:9\n    │\n695 │         launchToken.transferFrom(address(0), ALICE, 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:707:9\n    │\n707 │         launchToken.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:710:9\n    │\n710 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:713:9\n    │\n713 │         launchToken.transferFrom(ALICE, BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:717:9\n    │\n717 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:722:9\n    │\n722 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":126,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 38 tests for test/Swarm.t.sol:SwarmTest\n[PASS] testAllowanceIsBoundToBothOwnerAndSpender() (gas: 92278)\n[PASS] testApproveEmitsEventAndReplacementAndRevocationDoNotBurn() (gas: 74714)\n[PASS] testApproveRejectsZeroSpenderIncludingRevocation() (gas: 60268)\n[PASS] testBurnRoundingAtMinorUnitBoundaries() (gas: 319025)\n[PASS] testCommonAdminAndMintEntrypointsRejectBothDeployerAndStranger() (gas: 266107)\n[PASS] testConsecutiveTransfersChargeEveryHolderIncludingDeployer() (gas: 116636)\n[PASS] testConstructorMetadataAndSupply() (gas: 55654)\n[PASS] testConstructorMintsOnlyToItsCallerAndEmitsMint() (gas: 772048)\n[PASS] testDeployerCannotBypassItsOwnTransferFromAllowance() (gas: 55236)\n[PASS] testDustTransferEmitsDeliveryWithoutBurnEvent() (gas: 74264)\n[PASS] testExactAllowanceCannotBeReused() (gas: 92859)\n[PASS] testFuzzInsufficientAllowancePreservesState(uint256,uint256) (runs: 256, μ: 81950, ~: 82728)\n[PASS] testFuzzSelfTransferConservesSupply(uint256) (runs: 256, μ: 53836, ~: 54662)\n[PASS] testFuzzTransferConservesSupply(uint256) (runs: 256, μ: 75580, ~: 76473)\n[PASS] testFuzzTransferFromConservesSupplyAndSpendsAllowance(uint256,uint256) (runs: 256, μ: 107923, ~: 108675)\n[PASS] testRevokedAllowanceCannotBeSpent() (gas: 66394)\n[PASS] testSelfTransferDebitsOnlyBurnAndEmitsBothEvents() (gas: 65501)\n[PASS] testSelfTransferEntireBalance() (gas: 51200)\n[PASS] testSelfTransferRequiresGrossBalanceEvenWhenBurnIsAffordable() (gas: 54840)\n[PASS] testSpenderCanReceiveDelegatedTransfer() (gas: 84690)\n[PASS] testTransferBurnsExactlyOnePercentAndEmitsNetAndBurn() (gas: 87137)\n[PASS] testTransferEntireSupply() (gas: 70293)\n[PASS] testTransferFromBalanceFailureRollsBackAllowance() (gas: 65300)\n[PASS] testTransferFromInvalidRecipientRollsBackAllowance() (gas: 70438)\n[PASS] testTransferFromMaximumAmountWithUnlimitedAllowanceRevertsOnBalance() (gas: 83937)\n[PASS] testTransferFromRejectsMissingAllowance() (gas: 60041)\n[PASS] testTransferFromRejectsZeroSenderEvenForZeroAmount() (gas: 59861)\n[PASS] testTransferFromRequiresGrossAllowanceNotNetReceipt() (gas: 82174)\n[PASS] testTransferFromSelfBurnsAndConsumesGrossAllowance() (gas: 65319)\n[PASS] testTransferFromSpendsGrossAllowanceAndEmitsNetAndBurn() (gas: 116799)\n[PASS] testTransferRejectsInsufficientBalance() (gas: 55392)\n[PASS] testTransferRejectsMaximumUintAmountWithoutOverflow() (gas: 54448)\n[PASS] testTransferRejectsZeroRecipientEvenForZeroAmount() (gas: 56214)\n[PASS] testUnlimitedAllowanceSurvivesRepeatedSpending() (gas: 117743)\n[PASS] testZeroSelfTransfer() (gas: 60322)\n[PASS] testZeroTransferFromFundedAccountEmitsTransferAndPreservesState() (gas: 59046)\n[PASS] testZeroTransferFromUnfundedAccount() (gas: 59625)\n[PASS] testZeroTransferFromWithoutBalanceOrAllowance() (gas: 65035)\nSuite result: ok. 38 passed; 0 failed; 0 skipped; finished in 19.98ms (81.87ms CPU time)\n\nRan 11 tests for test/Swarm.t.sol:SwarmLaunchTokenTest\n[PASS] testFuzzLaunchTransfersConserveFixedSupply(uint256,uint256,bool) (runs: 256, μ: 163500, ~: 154653)\n[PASS] testLaunchAdminCallsRejectDeployerAndStranger() (gas: 414473)\n[PASS] testLaunchAllowanceIsolationReplacementAndRevocation() (gas: 131569)\n[PASS] testLaunchConstructorMetadataSupplyAndMintEvent() (gas: 799605)\n[PASS] testLaunchEntireSupplyAndRepeatedSelfTransfersPreserveBalances() (gas: 154705)\n[PASS] testLaunchInsufficientBalancesRejectDirectSelfAndDelegatedTransfers() (gas: 114999)\n[PASS] testLaunchInvalidAddressesRevertAndRestoreAllowance() (gas: 130531)\n[PASS] testLaunchTransferFromUsesExactAllowanceAndRejectsReuse() (gas: 124313)\n[PASS] testLaunchTransferMovesExactAmountWithoutBurn() (gas: 108153)\n[PASS] testLaunchUnlimitedAllowanceSurvivesDelegatedSelfAndRepeatedTransfers() (gas: 182039)\n[PASS] testLaunchZeroTransfersWithoutBalanceOrAllowanceEmitEvents() (gas: 100648)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 23.24ms (26.53ms CPU time)\n\nRan 16 tests for test/BurnTracker.t.sol:BurnTrackerTest\n[PASS] testConstructorBindsTokenAndStartsAtZero() (gas: 48975)\n[PASS] testConstructorRejectsAccountWithoutCode() (gas: 83936)\n[PASS] testConstructorRejectsContractWithoutSupplyInterface() (gas: 84117)\n[PASS] testConstructorRejectsLaunchTokenInPlaceOfSwarm() (gas: 786655)\n[PASS] testConstructorRejectsZeroAddress() (gas: 81456)\n[PASS] testFuzzTransferSequenceMaintainsCumulativeBurns(uint256[12]) (runs: 256, μ: 727829, ~: 729603)\n[PASS] testLateDeploymentIncludesEarlierBurnsAndContinuesTracking() (gas: 304771)\n[PASS] testLaunchTransfersAndSwarmBurnsRemainIndependent() (gas: 868922)\n[PASS] testNeitherDeployerNorStrangerCanRebindOrResetTracker() (gas: 849055)\n[PASS] testProjectConstructorsPreserveLaunchSupplyAndBindTrackerToSwarm() (gas: 1662742)\n[PASS] testRepeatedReadsByAnyCallerDoNotResetBurns() (gas: 80599)\n[PASS] testRevertedTransfersDoNotChangePreviouslyAccumulatedBurns() (gas: 96632)\n[PASS] testRoundingIsAppliedPerTransferAndTrackerSumsActualBurns() (gas: 81539)\n[PASS] testTrackerAccumulatesDirectDelegatedAndSelfTransferBurns() (gas: 125134)\n[PASS] testTrackersForDifferentTokensRemainIndependent() (gas: 1051300)\n[PASS] testZeroAndDustTransfersAndApprovalsDoNotChangeExistingBurns() (gas: 125881)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 77.68ms (81.71ms CPU time)\n\nRan 3 test suites in 78.56ms (120.90ms CPU time): 65 tests passed, 0 failed, 0 skipped (65 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"3f89b25cae0cb4872d445555b77d6d48b864040f4c95ab8a5528044e4009df02","verifiedTreeHash":"a205056d4e66512170234c0164c5ab7fe3f0ee33","verifierVersion":"0.1.0+23659b86"},{"checks":[{"durationMs":289,"exitCode":0,"name":"build","output":"Compiling 4 files with Solc 0.8.30\nSolc 0.8.30 finished in 242.60ms\nCompiler run successful!\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:182:9\n    │\n182 │         token.transfer(BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:184:9\n    │\n184 │         token.transfer(address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:187:9\n    │\n187 │         token.transferFrom(address(this), BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:306:9\n    │\n306 │         token.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:360:9\n    │\n360 │         token.transfer(BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:368:9\n    │\n368 │         token.transfer(address(this), SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:376:9\n    │\n376 │         token.transfer(ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:382:9\n    │\n382 │         token.transfer(address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:384:9\n    │\n384 │         token.transfer(address(0), 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:400:9\n    │\n400 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:409:9\n    │\n409 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:418:9\n    │\n418 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:421:9\n    │\n421 │         token.transferFrom(ALICE, BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:428:9\n    │\n428 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:437:9\n    │\n437 │         token.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:448:9\n    │\n448 │         token.transferFrom(address(this), ALICE, SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:457:9\n    │\n457 │         token.transferFrom(address(this), address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:461:9\n    │\n461 │         token.transferFrom(address(this), address(0), 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:469:9\n    │\n469 │         token.transferFrom(address(0), ALICE, 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:480:9\n    │\n480 │         token.transferFrom(address(this), ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:547:9\n    │\n547 │         token.transferFrom(address(this), ALICE, amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:643:9\n    │\n643 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:668:9\n    │\n668 │         launchToken.transfer(BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:674:9\n    │\n674 │         launchToken.transfer(ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:680:9\n    │\n680 │         launchToken.transfer(address(this), LAUNCH_SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:689:9\n    │\n689 │         launchToken.transferFrom(address(this), ALICE, LAUNCH_SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:699:13\n    │\n699 │             launchToken.transfer(address(0), amounts[i]);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:702:13\n    │\n702 │             launchToken.transferFrom(address(this), address(0), amounts[i]);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:709:9\n    │\n709 │         launchToken.transferFrom(address(0), ALICE, 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:721:9\n    │\n721 │         launchToken.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:724:9\n    │\n724 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:727:9\n    │\n727 │         launchToken.transferFrom(ALICE, BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:731:9\n    │\n731 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:736:9\n    │\n736 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":120,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 14 tests for test/Swarm.t.sol:SwarmConverterTest\n[PASS] testConvertInsufficientBalanceRestoresSpentAllowance() (gas: 250982)\n[PASS] testConvertLocksGrossLaunchAmountAndEmitsBurnAndConversion() (gas: 180840)\n[PASS] testConvertRequiresCallersFullAllowanceAndRejectsReuse() (gas: 600689)\n[PASS] testConverterHasNoAdminOrWithdrawalPrivileges() (gas: 533519)\n[PASS] testConverterInvalidAmountsPreserveBalancesAllowancesAndBurns() (gas: 563835)\n[PASS] testConverterRejectsInvalidLaunchDependencies() (gas: 4110390)\n[PASS] testConverterRoundsEachBurnAtMinorUnitBoundaries() (gas: 848439)\n[PASS] testDonationsCannotInflateRedemptionPayment() (gas: 220641)\n[PASS] testEntireSupplyCanConvertRedeemAndConvertAgain() (gas: 265996)\n[PASS] testFuzzConverterRoundTripConservesCollateral(uint256,uint256) (runs: 256, μ: 220787, ~: 221459)\n[PASS] testRedeemInsufficientBalanceRestoresAllowanceAndPreservesBurns() (gas: 412197)\n[PASS] testRedeemPaysForNetSwarmAndEmitsRedemption() (gas: 226535)\n[PASS] testRedeemRequiresGrossAllowanceAndRejectsReuse() (gas: 524949)\n[PASS] testTransferredSwarmCanBeRedeemedByAnotherHolder() (gas: 233337)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 73.33ms (29.88ms CPU time)\n\nRan 11 tests for test/Swarm.t.sol:SwarmLaunchTokenTest\n[PASS] testFuzzLaunchTransfersConserveFixedSupply(uint256,uint256,bool) (runs: 256, μ: 163169, ~: 154653)\n[PASS] testLaunchAdminCallsRejectDeployerAndStranger() (gas: 414473)\n[PASS] testLaunchAllowanceIsolationReplacementAndRevocation() (gas: 131569)\n[PASS] testLaunchConstructorMetadataSupplyAndMintEvent() (gas: 799605)\n[PASS] testLaunchEntireSupplyAndRepeatedSelfTransfersPreserveBalances() (gas: 154705)\n[PASS] testLaunchInsufficientBalancesRejectDirectSelfAndDelegatedTransfers() (gas: 114999)\n[PASS] testLaunchInvalidAddressesRevertAndRestoreAllowance() (gas: 130531)\n[PASS] testLaunchTransferFromUsesExactAllowanceAndRejectsReuse() (gas: 124313)\n[PASS] testLaunchTransferMovesExactAmountWithoutBurn() (gas: 108153)\n[PASS] testLaunchUnlimitedAllowanceSurvivesDelegatedSelfAndRepeatedTransfers() (gas: 182039)\n[PASS] testLaunchZeroTransfersWithoutBalanceOrAllowanceEmitEvents() (gas: 100648)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 73.40ms (20.39ms CPU time)\n\nRan 38 tests for test/Swarm.t.sol:SwarmTest\n[PASS] testAllowanceIsBoundToBothOwnerAndSpender() (gas: 92278)\n[PASS] testApproveEmitsEventAndReplacementAndRevocationDoNotBurn() (gas: 74714)\n[PASS] testApproveRejectsZeroSpenderIncludingRevocation() (gas: 60268)\n[PASS] testBurnRoundingAtMinorUnitBoundaries() (gas: 319025)\n[PASS] testCommonAdminAndMintEntrypointsRejectBothDeployerAndStranger() (gas: 266107)\n[PASS] testConsecutiveTransfersChargeEveryHolderIncludingDeployer() (gas: 116636)\n[PASS] testConstructorMetadataAndSupply() (gas: 55654)\n[PASS] testConstructorMintsOnlyToItsCallerAndEmitsMint() (gas: 772048)\n[PASS] testDeployerCannotBypassItsOwnTransferFromAllowance() (gas: 55236)\n[PASS] testDustTransferEmitsDeliveryWithoutBurnEvent() (gas: 74264)\n[PASS] testExactAllowanceCannotBeReused() (gas: 92859)\n[PASS] testFuzzInsufficientAllowancePreservesState(uint256,uint256) (runs: 256, μ: 81950, ~: 82728)\n[PASS] testFuzzSelfTransferConservesSupply(uint256) (runs: 256, μ: 54042, ~: 54662)\n[PASS] testFuzzTransferConservesSupply(uint256) (runs: 256, μ: 75798, ~: 76473)\n[PASS] testFuzzTransferFromConservesSupplyAndSpendsAllowance(uint256,uint256) (runs: 256, μ: 107853, ~: 108675)\n[PASS] testRevokedAllowanceCannotBeSpent() (gas: 66394)\n[PASS] testSelfTransferDebitsOnlyBurnAndEmitsBothEvents() (gas: 65501)\n[PASS] testSelfTransferEntireBalance() (gas: 51200)\n[PASS] testSelfTransferRequiresGrossBalanceEvenWhenBurnIsAffordable() (gas: 54840)\n[PASS] testSpenderCanReceiveDelegatedTransfer() (gas: 84690)\n[PASS] testTransferBurnsExactlyOnePercentAndEmitsNetAndBurn() (gas: 87137)\n[PASS] testTransferEntireSupply() (gas: 70293)\n[PASS] testTransferFromBalanceFailureRollsBackAllowance() (gas: 65300)\n[PASS] testTransferFromInvalidRecipientRollsBackAllowance() (gas: 70438)\n[PASS] testTransferFromMaximumAmountWithUnlimitedAllowanceRevertsOnBalance() (gas: 83937)\n[PASS] testTransferFromRejectsMissingAllowance() (gas: 60041)\n[PASS] testTransferFromRejectsZeroSenderEvenForZeroAmount() (gas: 59861)\n[PASS] testTransferFromRequiresGrossAllowanceNotNetReceipt() (gas: 82174)\n[PASS] testTransferFromSelfBurnsAndConsumesGrossAllowance() (gas: 65319)\n[PASS] testTransferFromSpendsGrossAllowanceAndEmitsNetAndBurn() (gas: 116799)\n[PASS] testTransferRejectsInsufficientBalance() (gas: 55392)\n[PASS] testTransferRejectsMaximumUintAmountWithoutOverflow() (gas: 54448)\n[PASS] testTransferRejectsZeroRecipientEvenForZeroAmount() (gas: 56214)\n[PASS] testUnlimitedAllowanceSurvivesRepeatedSpending() (gas: 117743)\n[PASS] testZeroSelfTransfer() (gas: 60322)\n[PASS] testZeroTransferFromFundedAccountEmitsTransferAndPreservesState() (gas: 59046)\n[PASS] testZeroTransferFromUnfundedAccount() (gas: 59625)\n[PASS] testZeroTransferFromWithoutBalanceOrAllowance() (gas: 65035)\nSuite result: ok. 38 passed; 0 failed; 0 skipped; finished in 73.47ms (72.75ms CPU time)\n\nRan 17 tests for test/BurnTracker.t.sol:BurnTrackerTest\n[PASS] testConstructorBindsTokenAndStartsAtZero() (gas: 48975)\n[PASS] testConstructorRejectsAccountWithoutCode() (gas: 83936)\n[PASS] testConstructorRejectsContractWithoutSupplyInterface() (gas: 84117)\n[PASS] testConstructorRejectsLaunchTokenInPlaceOfSwarm() (gas: 786655)\n[PASS] testConstructorRejectsZeroAddress() (gas: 81434)\n[PASS] testConverterTrackerIncludesConversionsHolderBurnsAndRedemption() (gas: 2629971)\n[PASS] testFuzzTransferSequenceMaintainsCumulativeBurns(uint256[12]) (runs: 256, μ: 727997, ~: 729581)\n[PASS] testLateDeploymentIncludesEarlierBurnsAndContinuesTracking() (gas: 304749)\n[PASS] testLaunchTransfersAndSwarmBurnsRemainIndependent() (gas: 868900)\n[PASS] testNeitherDeployerNorStrangerCanRebindOrResetTracker() (gas: 849033)\n[PASS] testProjectConstructorsPreserveLaunchSupplyAndBindTrackerToSwarm() (gas: 2284295)\n[PASS] testRepeatedReadsByAnyCallerDoNotResetBurns() (gas: 80687)\n[PASS] testRevertedTransfersDoNotChangePreviouslyAccumulatedBurns() (gas: 96632)\n[PASS] testRoundingIsAppliedPerTransferAndTrackerSumsActualBurns() (gas: 81539)\n[PASS] testTrackerAccumulatesDirectDelegatedAndSelfTransferBurns() (gas: 125112)\n[PASS] testTrackersForDifferentTokensRemainIndependent() (gas: 1051300)\n[PASS] testZeroAndDustTransfersAndApprovalsDoNotChangeExistingBurns() (gas: 125948)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 73.58ms (75.49ms CPU time)\n\nRan 4 test suites in 74.85ms (293.77ms CPU time): 80 tests passed, 0 failed, 0 skipped (80 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"590f33dfd5dadeccadcf974ae1eee0ea8fbfac5d4b3568b0da2328418df19f99","verifiedTreeHash":"acbf4b803e42b5def01e1495035c6f2eceb72465","verifierVersion":"0.1.0+23659b86"},{"checks":[{"durationMs":65,"exitCode":0,"name":"build","output":"Compiling 2 files with Solc 0.8.30\nSolc 0.8.30 finished in 25.25ms\nCompiler run successful!\n","passed":true},{"durationMs":44,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\nNo tests found in project! Forge looks for functions that start with `test`\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"6cd885c741a73675d3cf58dc3e84333dd3a3bfe9e9056cc409f7d5675831c384","verifiedTreeHash":"2585590b65bc25104f0405b2133642708d21b28a","verifierVersion":"0.1.0+23659b86"},{"checks":[{"durationMs":305,"exitCode":0,"name":"build","output":"Compiling 4 files with Solc 0.8.30\nSolc 0.8.30 finished in 257.32ms\nCompiler run successful!\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:182:9\n    │\n182 │         token.transfer(BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:184:9\n    │\n184 │         token.transfer(address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:187:9\n    │\n187 │         token.transferFrom(address(this), BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:306:9\n    │\n306 │         token.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:360:9\n    │\n360 │         token.transfer(BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:368:9\n    │\n368 │         token.transfer(address(this), SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:376:9\n    │\n376 │         token.transfer(ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:382:9\n    │\n382 │         token.transfer(address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:384:9\n    │\n384 │         token.transfer(address(0), 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:400:9\n    │\n400 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:409:9\n    │\n409 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:418:9\n    │\n418 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:421:9\n    │\n421 │         token.transferFrom(ALICE, BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:428:9\n    │\n428 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:437:9\n    │\n437 │         token.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:448:9\n    │\n448 │         token.transferFrom(address(this), ALICE, SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:457:9\n    │\n457 │         token.transferFrom(address(this), address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:461:9\n    │\n461 │         token.transferFrom(address(this), address(0), 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:469:9\n    │\n469 │         token.transferFrom(address(0), ALICE, 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:480:9\n    │\n480 │         token.transferFrom(address(this), ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:547:9\n    │\n547 │         token.transferFrom(address(this), ALICE, amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:643:9\n    │\n643 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:668:9\n    │\n668 │         launchToken.transfer(BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:674:9\n    │\n674 │         launchToken.transfer(ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:680:9\n    │\n680 │         launchToken.transfer(address(this), LAUNCH_SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:689:9\n    │\n689 │         launchToken.transferFrom(address(this), ALICE, LAUNCH_SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:699:13\n    │\n699 │             launchToken.transfer(address(0), amounts[i]);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:702:13\n    │\n702 │             launchToken.transferFrom(address(this), address(0), amounts[i]);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:709:9\n    │\n709 │         launchToken.transferFrom(address(0), ALICE, 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:721:9\n    │\n721 │         launchToken.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:724:9\n    │\n724 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:727:9\n    │\n727 │         launchToken.transferFrom(ALICE, BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:731:9\n    │\n731 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:736:9\n    │\n736 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":133,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 14 tests for test/Swarm.t.sol:SwarmConverterTest\n[PASS] testConvertInsufficientBalanceRestoresSpentAllowance() (gas: 250982)\n[PASS] testConvertLocksGrossLaunchAmountAndEmitsBurnAndConversion() (gas: 180840)\n[PASS] testConvertRequiresCallersFullAllowanceAndRejectsReuse() (gas: 600689)\n[PASS] testConverterHasNoAdminOrWithdrawalPrivileges() (gas: 533519)\n[PASS] testConverterInvalidAmountsPreserveBalancesAllowancesAndBurns() (gas: 563835)\n[PASS] testConverterRejectsInvalidLaunchDependencies() (gas: 4110390)\n[PASS] testConverterRoundsEachBurnAtMinorUnitBoundaries() (gas: 848439)\n[PASS] testDonationsCannotInflateRedemptionPayment() (gas: 220641)\n[PASS] testEntireSupplyCanConvertRedeemAndConvertAgain() (gas: 265996)\n[PASS] testFuzzConverterRoundTripConservesCollateral(uint256,uint256) (runs: 256, μ: 220752, ~: 221459)\n[PASS] testRedeemInsufficientBalanceRestoresAllowanceAndPreservesBurns() (gas: 412197)\n[PASS] testRedeemPaysForNetSwarmAndEmitsRedemption() (gas: 226535)\n[PASS] testRedeemRequiresGrossAllowanceAndRejectsReuse() (gas: 524949)\n[PASS] testTransferredSwarmCanBeRedeemedByAnotherHolder() (gas: 233337)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 28.27ms (40.99ms CPU time)\n\nRan 11 tests for test/Swarm.t.sol:SwarmLaunchTokenTest\n[PASS] testFuzzLaunchTransfersConserveFixedSupply(uint256,uint256,bool) (runs: 256, μ: 163332, ~: 154653)\n[PASS] testLaunchAdminCallsRejectDeployerAndStranger() (gas: 414473)\n[PASS] testLaunchAllowanceIsolationReplacementAndRevocation() (gas: 131569)\n[PASS] testLaunchConstructorMetadataSupplyAndMintEvent() (gas: 799605)\n[PASS] testLaunchEntireSupplyAndRepeatedSelfTransfersPreserveBalances() (gas: 154705)\n[PASS] testLaunchInsufficientBalancesRejectDirectSelfAndDelegatedTransfers() (gas: 114999)\n[PASS] testLaunchInvalidAddressesRevertAndRestoreAllowance() (gas: 130531)\n[PASS] testLaunchTransferFromUsesExactAllowanceAndRejectsReuse() (gas: 124313)\n[PASS] testLaunchTransferMovesExactAmountWithoutBurn() (gas: 108153)\n[PASS] testLaunchUnlimitedAllowanceSurvivesDelegatedSelfAndRepeatedTransfers() (gas: 182039)\n[PASS] testLaunchZeroTransfersWithoutBalanceOrAllowanceEmitEvents() (gas: 100648)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 28.34ms (34.64ms CPU time)\n\nRan 38 tests for test/Swarm.t.sol:SwarmTest\n[PASS] testAllowanceIsBoundToBothOwnerAndSpender() (gas: 92278)\n[PASS] testApproveEmitsEventAndReplacementAndRevocationDoNotBurn() (gas: 74714)\n[PASS] testApproveRejectsZeroSpenderIncludingRevocation() (gas: 60268)\n[PASS] testBurnRoundingAtMinorUnitBoundaries() (gas: 319025)\n[PASS] testCommonAdminAndMintEntrypointsRejectBothDeployerAndStranger() (gas: 266107)\n[PASS] testConsecutiveTransfersChargeEveryHolderIncludingDeployer() (gas: 116636)\n[PASS] testConstructorMetadataAndSupply() (gas: 55654)\n[PASS] testConstructorMintsOnlyToItsCallerAndEmitsMint() (gas: 772048)\n[PASS] testDeployerCannotBypassItsOwnTransferFromAllowance() (gas: 55236)\n[PASS] testDustTransferEmitsDeliveryWithoutBurnEvent() (gas: 74264)\n[PASS] testExactAllowanceCannotBeReused() (gas: 92859)\n[PASS] testFuzzInsufficientAllowancePreservesState(uint256,uint256) (runs: 256, μ: 82183, ~: 82728)\n[PASS] testFuzzSelfTransferConservesSupply(uint256) (runs: 256, μ: 53836, ~: 54662)\n[PASS] testFuzzTransferConservesSupply(uint256) (runs: 256, μ: 75687, ~: 76473)\n[PASS] testFuzzTransferFromConservesSupplyAndSpendsAllowance(uint256,uint256) (runs: 256, μ: 107804, ~: 108675)\n[PASS] testRevokedAllowanceCannotBeSpent() (gas: 66394)\n[PASS] testSelfTransferDebitsOnlyBurnAndEmitsBothEvents() (gas: 65501)\n[PASS] testSelfTransferEntireBalance() (gas: 51200)\n[PASS] testSelfTransferRequiresGrossBalanceEvenWhenBurnIsAffordable() (gas: 54840)\n[PASS] testSpenderCanReceiveDelegatedTransfer() (gas: 84690)\n[PASS] testTransferBurnsExactlyOnePercentAndEmitsNetAndBurn() (gas: 87137)\n[PASS] testTransferEntireSupply() (gas: 70293)\n[PASS] testTransferFromBalanceFailureRollsBackAllowance() (gas: 65300)\n[PASS] testTransferFromInvalidRecipientRollsBackAllowance() (gas: 70438)\n[PASS] testTransferFromMaximumAmountWithUnlimitedAllowanceRevertsOnBalance() (gas: 83937)\n[PASS] testTransferFromRejectsMissingAllowance() (gas: 60041)\n[PASS] testTransferFromRejectsZeroSenderEvenForZeroAmount() (gas: 59861)\n[PASS] testTransferFromRequiresGrossAllowanceNotNetReceipt() (gas: 82174)\n[PASS] testTransferFromSelfBurnsAndConsumesGrossAllowance() (gas: 65319)\n[PASS] testTransferFromSpendsGrossAllowanceAndEmitsNetAndBurn() (gas: 116799)\n[PASS] testTransferRejectsInsufficientBalance() (gas: 55392)\n[PASS] testTransferRejectsMaximumUintAmountWithoutOverflow() (gas: 54448)\n[PASS] testTransferRejectsZeroRecipientEvenForZeroAmount() (gas: 56214)\n[PASS] testUnlimitedAllowanceSurvivesRepeatedSpending() (gas: 117743)\n[PASS] testZeroSelfTransfer() (gas: 60322)\n[PASS] testZeroTransferFromFundedAccountEmitsTransferAndPreservesState() (gas: 59046)\n[PASS] testZeroTransferFromUnfundedAccount() (gas: 59625)\n[PASS] testZeroTransferFromWithoutBalanceOrAllowance() (gas: 65035)\nSuite result: ok. 38 passed; 0 failed; 0 skipped; finished in 78.32ms (80.40ms CPU time)\n\nRan 17 tests for test/BurnTracker.t.sol:BurnTrackerTest\n[PASS] testConstructorBindsTokenAndStartsAtZero() (gas: 48975)\n[PASS] testConstructorRejectsAccountWithoutCode() (gas: 83936)\n[PASS] testConstructorRejectsContractWithoutSupplyInterface() (gas: 84117)\n[PASS] testConstructorRejectsLaunchTokenInPlaceOfSwarm() (gas: 786655)\n[PASS] testConstructorRejectsZeroAddress() (gas: 81434)\n[PASS] testConverterTrackerIncludesConversionsHolderBurnsAndRedemption() (gas: 2629971)\n[PASS] testFuzzTransferSequenceMaintainsCumulativeBurns(uint256[12]) (runs: 256, μ: 727982, ~: 729581)\n[PASS] testLateDeploymentIncludesEarlierBurnsAndContinuesTracking() (gas: 304749)\n[PASS] testLaunchTransfersAndSwarmBurnsRemainIndependent() (gas: 868900)\n[PASS] testNeitherDeployerNorStrangerCanRebindOrResetTracker() (gas: 849033)\n[PASS] testProjectConstructorsPreserveLaunchSupplyAndBindTrackerToSwarm() (gas: 2284295)\n[PASS] testRepeatedReadsByAnyCallerDoNotResetBurns() (gas: 80687)\n[PASS] testRevertedTransfersDoNotChangePreviouslyAccumulatedBurns() (gas: 96632)\n[PASS] testRoundingIsAppliedPerTransferAndTrackerSumsActualBurns() (gas: 81539)\n[PASS] testTrackerAccumulatesDirectDelegatedAndSelfTransferBurns() (gas: 125112)\n[PASS] testTrackersForDifferentTokensRemainIndependent() (gas: 1051300)\n[PASS] testZeroAndDustTransfersAndApprovalsDoNotChangeExistingBurns() (gas: 125948)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 87.02ms (92.11ms CPU time)\n\nRan 4 test suites in 87.89ms (221.95ms CPU time): 80 tests passed, 0 failed, 0 skipped (80 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"c80c57b5346cc7e7b2d156ddc5a56c7668cfbe38cea989fc5c26dbcaa20a8e31","verifiedTreeHash":"1f60c5b5a5cea92f7608bf27998dd88e5f1a3264","verifierVersion":"0.1.0+23659b86"},{"checks":[{"durationMs":61,"exitCode":0,"name":"build","output":"Compiling 2 files with Solc 0.8.30\nSolc 0.8.30 finished in 20.12ms\nCompiler run successful!\n","passed":true},{"durationMs":42,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\nNo tests found in project! Forge looks for functions that start with `test`\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"d18e0b35ce56095c0d0215fa0863501e67c33a1140075a22f85e26e45474cf2a","verifiedTreeHash":"637a7511fb1c39476c5b8e95a8e56d4238b86499","verifierVersion":"0.1.0+23659b86"},{"checks":[{"durationMs":222,"exitCode":0,"name":"build","output":"Compiling 4 files with Solc 0.8.30\nSolc 0.8.30 finished in 178.06ms\nCompiler run successful!\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:148:9\n    │\n148 │         token.transfer(BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:150:9\n    │\n150 │         token.transfer(address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/BurnTracker.t.sol:153:9\n    │\n153 │         token.transferFrom(address(this), BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:292:9\n    │\n292 │         token.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:346:9\n    │\n346 │         token.transfer(BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:354:9\n    │\n354 │         token.transfer(address(this), SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:362:9\n    │\n362 │         token.transfer(ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:368:9\n    │\n368 │         token.transfer(address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:370:9\n    │\n370 │         token.transfer(address(0), 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:386:9\n    │\n386 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:395:9\n    │\n395 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:404:9\n    │\n404 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:407:9\n    │\n407 │         token.transferFrom(ALICE, BOB, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:414:9\n    │\n414 │         token.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:423:9\n    │\n423 │         token.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:434:9\n    │\n434 │         token.transferFrom(address(this), ALICE, SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:443:9\n    │\n443 │         token.transferFrom(address(this), address(0), 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:447:9\n    │\n447 │         token.transferFrom(address(this), address(0), 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:455:9\n    │\n455 │         token.transferFrom(address(0), ALICE, 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:466:9\n    │\n466 │         token.transferFrom(address(this), ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:533:9\n    │\n533 │         token.transferFrom(address(this), ALICE, amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:629:9\n    │\n629 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:654:9\n    │\n654 │         launchToken.transfer(BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:660:9\n    │\n660 │         launchToken.transfer(ALICE, type(uint256).max);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:666:9\n    │\n666 │         launchToken.transfer(address(this), LAUNCH_SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:675:9\n    │\n675 │         launchToken.transferFrom(address(this), ALICE, LAUNCH_SUPPLY + 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:685:13\n    │\n685 │             launchToken.transfer(address(0), amounts[i]);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:688:13\n    │\n688 │             launchToken.transferFrom(address(this), address(0), amounts[i]);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:695:9\n    │\n695 │         launchToken.transferFrom(address(0), ALICE, 0);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:707:9\n    │\n707 │         launchToken.transferFrom(address(this), ALICE, 100 ether);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:710:9\n    │\n710 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:713:9\n    │\n713 │         launchToken.transferFrom(ALICE, BOB, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:717:9\n    │\n717 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Swarm.t.sol:722:9\n    │\n722 │         launchToken.transferFrom(address(this), ALICE, 1);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":127,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 38 tests for test/Swarm.t.sol:SwarmTest\n[PASS] testAllowanceIsBoundToBothOwnerAndSpender() (gas: 92278)\n[PASS] testApproveEmitsEventAndReplacementAndRevocationDoNotBurn() (gas: 74714)\n[PASS] testApproveRejectsZeroSpenderIncludingRevocation() (gas: 60268)\n[PASS] testBurnRoundingAtMinorUnitBoundaries() (gas: 319025)\n[PASS] testCommonAdminAndMintEntrypointsRejectBothDeployerAndStranger() (gas: 266107)\n[PASS] testConsecutiveTransfersChargeEveryHolderIncludingDeployer() (gas: 116636)\n[PASS] testConstructorMetadataAndSupply() (gas: 55654)\n[PASS] testConstructorMintsOnlyToItsCallerAndEmitsMint() (gas: 772048)\n[PASS] testDeployerCannotBypassItsOwnTransferFromAllowance() (gas: 55236)\n[PASS] testDustTransferEmitsDeliveryWithoutBurnEvent() (gas: 74264)\n[PASS] testExactAllowanceCannotBeReused() (gas: 92859)\n[PASS] testFuzzInsufficientAllowancePreservesState(uint256,uint256) (runs: 256, μ: 81872, ~: 82728)\n[PASS] testFuzzSelfTransferConservesSupply(uint256) (runs: 256, μ: 54190, ~: 54662)\n[PASS] testFuzzTransferConservesSupply(uint256) (runs: 256, μ: 76068, ~: 76473)\n[PASS] testFuzzTransferFromConservesSupplyAndSpendsAllowance(uint256,uint256) (runs: 256, μ: 107929, ~: 108675)\n[PASS] testRevokedAllowanceCannotBeSpent() (gas: 66394)\n[PASS] testSelfTransferDebitsOnlyBurnAndEmitsBothEvents() (gas: 65501)\n[PASS] testSelfTransferEntireBalance() (gas: 51200)\n[PASS] testSelfTransferRequiresGrossBalanceEvenWhenBurnIsAffordable() (gas: 54840)\n[PASS] testSpenderCanReceiveDelegatedTransfer() (gas: 84690)\n[PASS] testTransferBurnsExactlyOnePercentAndEmitsNetAndBurn() (gas: 87137)\n[PASS] testTransferEntireSupply() (gas: 70293)\n[PASS] testTransferFromBalanceFailureRollsBackAllowance() (gas: 65300)\n[PASS] testTransferFromInvalidRecipientRollsBackAllowance() (gas: 70438)\n[PASS] testTransferFromMaximumAmountWithUnlimitedAllowanceRevertsOnBalance() (gas: 83937)\n[PASS] testTransferFromRejectsMissingAllowance() (gas: 60041)\n[PASS] testTransferFromRejectsZeroSenderEvenForZeroAmount() (gas: 59861)\n[PASS] testTransferFromRequiresGrossAllowanceNotNetReceipt() (gas: 82174)\n[PASS] testTransferFromSelfBurnsAndConsumesGrossAllowance() (gas: 65319)\n[PASS] testTransferFromSpendsGrossAllowanceAndEmitsNetAndBurn() (gas: 116799)\n[PASS] testTransferRejectsInsufficientBalance() (gas: 55392)\n[PASS] testTransferRejectsMaximumUintAmountWithoutOverflow() (gas: 54448)\n[PASS] testTransferRejectsZeroRecipientEvenForZeroAmount() (gas: 56214)\n[PASS] testUnlimitedAllowanceSurvivesRepeatedSpending() (gas: 117743)\n[PASS] testZeroSelfTransfer() (gas: 60322)\n[PASS] testZeroTransferFromFundedAccountEmitsTransferAndPreservesState() (gas: 59046)\n[PASS] testZeroTransferFromUnfundedAccount() (gas: 59625)\n[PASS] testZeroTransferFromWithoutBalanceOrAllowance() (gas: 65035)\nSuite result: ok. 38 passed; 0 failed; 0 skipped; finished in 20.19ms (77.78ms CPU time)\n\nRan 11 tests for test/Swarm.t.sol:SwarmLaunchTokenTest\n[PASS] testFuzzLaunchTransfersConserveFixedSupply(uint256,uint256,bool) (runs: 256, μ: 164237, ~: 154869)\n[PASS] testLaunchAdminCallsRejectDeployerAndStranger() (gas: 414473)\n[PASS] testLaunchAllowanceIsolationReplacementAndRevocation() (gas: 131569)\n[PASS] testLaunchConstructorMetadataSupplyAndMintEvent() (gas: 799605)\n[PASS] testLaunchEntireSupplyAndRepeatedSelfTransfersPreserveBalances() (gas: 154705)\n[PASS] testLaunchInsufficientBalancesRejectDirectSelfAndDelegatedTransfers() (gas: 114999)\n[PASS] testLaunchInvalidAddressesRevertAndRestoreAllowance() (gas: 130531)\n[PASS] testLaunchTransferFromUsesExactAllowanceAndRejectsReuse() (gas: 124313)\n[PASS] testLaunchTransferMovesExactAmountWithoutBurn() (gas: 108153)\n[PASS] testLaunchUnlimitedAllowanceSurvivesDelegatedSelfAndRepeatedTransfers() (gas: 182039)\n[PASS] testLaunchZeroTransfersWithoutBalanceOrAllowanceEmitEvents() (gas: 100648)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 20.22ms (23.40ms CPU time)\n\nRan 16 tests for test/BurnTracker.t.sol:BurnTrackerTest\n[PASS] testConstructorBindsTokenAndStartsAtZero() (gas: 48975)\n[PASS] testConstructorRejectsAccountWithoutCode() (gas: 83936)\n[PASS] testConstructorRejectsContractWithoutSupplyInterface() (gas: 84117)\n[PASS] testConstructorRejectsLaunchTokenInPlaceOfSwarm() (gas: 786655)\n[PASS] testConstructorRejectsZeroAddress() (gas: 81456)\n[PASS] testFuzzTransferSequenceMaintainsCumulativeBurns(uint256[12]) (runs: 256, μ: 727273, ~: 729603)\n[PASS] testLateDeploymentIncludesEarlierBurnsAndContinuesTracking() (gas: 304771)\n[PASS] testLaunchTransfersAndSwarmBurnsRemainIndependent() (gas: 868922)\n[PASS] testNeitherDeployerNorStrangerCanRebindOrResetTracker() (gas: 849055)\n[PASS] testProjectConstructorsPreserveLaunchSupplyAndBindTrackerToSwarm() (gas: 1662742)\n[PASS] testRepeatedReadsByAnyCallerDoNotResetBurns() (gas: 80599)\n[PASS] testRevertedTransfersDoNotChangePreviouslyAccumulatedBurns() (gas: 96632)\n[PASS] testRoundingIsAppliedPerTransferAndTrackerSumsActualBurns() (gas: 81539)\n[PASS] testTrackerAccumulatesDirectDelegatedAndSelfTransferBurns() (gas: 125134)\n[PASS] testTrackersForDifferentTokensRemainIndependent() (gas: 1051300)\n[PASS] testZeroAndDustTransfersAndApprovalsDoNotChangeExistingBurns() (gas: 125881)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 81.46ms (84.90ms CPU time)\n\nRan 3 test suites in 82.16ms (121.88ms CPU time): 65 tests passed, 0 failed, 0 skipped (65 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f2a278505795b99dd760dad293d0c3f9683601b05d61e85e25dbf31d0dc95c7f","verifiedTreeHash":"7d08a2ac14f12c164eb31de61aa1ee53e2ba6ed1","verifierVersion":"0.1.0+23659b86"},{"checks":[{"durationMs":53,"exitCode":0,"name":"build","output":"Compiling 2 files with Solc 0.8.30\nSolc 0.8.30 finished in 12.34ms\nCompiler run successful!\n","passed":true},{"durationMs":250,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\nNo tests found in project! Forge looks for functions that start with `test`\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f5beb89f1df6d800cc562dae7e9a5c1b91b68388b73e013df4a90d5e9766885f","verifiedTreeHash":"1f05c6016b7408a7ed09616f89a71b5769b2240d","verifierVersion":"0.1.0+23659b86"}]}