{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"11c08faf-9da4-401a-9b75-91b3bc1fb324","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"6c93afa8399eb01a08ee7cf271caa866d02cc803bfb6346dfc210c900db7fb90","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"74230e2c657385c0f3a52b0da4174607f69aff6c271861623a7bed1ba648098a","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"099ec1aea2069b59c2907eeac345b8e2c61f0e0307d2ed0c81accc808cb333a0","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"a107994dba89b12fbc6b386655e2da5d47131edc9a0816ae7d37165693d9e2c8","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"1031cfd01e0319d5fb99bfbebac5ced18074badfe71d71c66c47fb39efa678df","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"b0f82c302bb491b820a382205985f8cb7611e858f6a46f5702463e0b52d73ca8","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"816fe39c7efd64504a19175b0f4dd9186d61069f37a22684c90358a18c60bddc","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"816fe39c7efd64504a19175b0f4dd9186d61069f37a22684c90358a18c60bddc","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"866dc45291f077f2ecab79b7b748858da5fba275a28165b816dd94f65e48f2c4","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"8d7bf053833e634373e28eb08e1f86b4608c098a04bd986b32358b27cab28b89","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"ab3f8f2aa4e7f3b3ada558c0dcf522ba733ca3df3b1da92c707a0fe305816d5f","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"ab3f8f2aa4e7f3b3ada558c0dcf522ba733ca3df3b1da92c707a0fe305816d5f","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: Mutually Assured Destruction (MAD).\nToken name: Mutually Assured Destruction\nToken symbol: MAD\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"b60719a71c7e5c088c359576eea6bca397178ae59f2d58d3654591750016ed2a","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"11c08faf-9da4-401a-9b75-91b3bc1fb324","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2566-mutually-assured-destruction"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52200","feedbackHash":"6573bd1c7d2390ed520e370aa2aaa214dfa22991364252b3e27e6d7440a29d2f","nodeKey":"audit_economics","submissionHash":"6c93afa8399eb01a08ee7cf271caa866d02cc803bfb6346dfc210c900db7fb90","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52686","feedbackHash":"cd7ff28c234e3e32ca89edd4646f25211a3a7133080dfd8157f0c90aac0689e6","nodeKey":"audit_flow","submissionHash":"74230e2c657385c0f3a52b0da4174607f69aff6c271861623a7bed1ba648098a","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52606","feedbackHash":"7d80b20d4e578c65ee74f8c7b304f607d01e2ce03914db64364a07c174bcf42c","nodeKey":"audit_judge","submissionHash":"099ec1aea2069b59c2907eeac345b8e2c61f0e0307d2ed0c81accc808cb333a0","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51876","feedbackHash":"28961309e0168227e1c66784a9ca61bf73b7ff207a595b6812ce7c968808dba7","nodeKey":"audit_math","submissionHash":"a107994dba89b12fbc6b386655e2da5d47131edc9a0816ae7d37165693d9e2c8","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50953","feedbackHash":"6df9f3dc319e7a7973ef6ff24219b31fc61f7a54283c2c42ebb8be12d0099e2b","nodeKey":"audit_permissions","submissionHash":"1031cfd01e0319d5fb99bfbebac5ced18074badfe71d71c66c47fb39efa678df","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51364","feedbackHash":"688fdc1d1d602291b9207961d2822e2531c2438779731326929b678d6b08c76e","nodeKey":"build_contract_project","submissionHash":"b0f82c302bb491b820a382205985f8cb7611e858f6a46f5702463e0b52d73ca8","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52643","feedbackHash":"e69c0244a7833b36a11a16cfbb2870faefc3243f2a0d080731379fa8e7f337ec","nodeKey":"manifest","submissionHash":"866dc45291f077f2ecab79b7b748858da5fba275a28165b816dd94f65e48f2c4","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52640","feedbackHash":"ded760f6646755c37e45ed46902094f913058ce4f2f2510f9a8a3a104f664778","nodeKey":"write_foundry_tests","submissionHash":"8d7bf053833e634373e28eb08e1f86b4608c098a04bd986b32358b27cab28b89","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"5f418df055240a46dd0173a02d9a8133148bae51817069b6f43d817e0c8647bb","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"829d84438fb3fdc8","findings":[{"citation":"resolved","description":"Merged from audit_permissions (low) and audit_flow (info): same root cause, one finding. README.md line 63 says dependencies.lock.json records per-file SHA-256 hashes and that 'Vendored files are unmodified upstream copies'. Reproduced: all six lib/openzeppelin-contracts files match the lock, and I fetched each from the v5.1.0 tag and confirmed the lock equals upstream, so the production dependency (ERC20.sol, Context.sol, IERC20.sol, IERC20Metadata.sol, draft-IERC6093.sol) is byte-exact upstream. Seven of the 28 lib/forge-std entries do not match the lock: src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/interfaces/IMulticall3.sol, src/mocks/MockERC721.sol. For src/Vm.sol and src/StdAssertions.sol I fetched upstream v1.9.4 and confirmed that the whitespace-stripped SHA-256 of local and upstream are identical, so the drift is a forge-fmt reformat (foundry.toml sets [fmt] line_length = 120 with no ignore for lib/), not a semantic change. Impact is provenance only: the token imports nothing from forge-std, the deployed bytecode is unaffected, and the full suite (50 tests) passes. But anyone verifying the tree against the lock, as the README invites, gets seven mismatches and cannot tell a cosmetic reformat from a tampered test harness without a whitespace-insensitive diff. Fix: restore the seven files from the v1.9.4 archive so the lock holds (preferred), or regenerate the lock hashes and amend README.md line 63 to say forge-std was reformatted; in either case add ignore = [\"lib/**\"] under [fmt] so a future forge fmt does not reintroduce the drift.","line":28,"path":"dependencies.lock.json","reproduction":"State: this working tree (commit 74d0751). Run from the repository root: node -e 'const fs=require(\"fs\"),cp=require(\"child_process\");let bad=0;for(const d of JSON.parse(fs.readFileSync(\"dependencies.lock.json\",\"utf8\")))for(const [f,h] of Object.entries(d.files_sha256)){const g=cp.execSync(\"sha256sum \"+d.directory+\"/\"+f).toString().slice(0,64);if(g!==h){bad++;console.log(f,g,h)}}console.log(\"mismatches\",bad)'. Expected (per README.md line 63): mismatches 0. Actual: mismatches 7, all under lib/forge-std. Example: sha256sum lib/forge-std/src/StdAssertions.sol = 3fbf4a025b4fc94eaca4c38c1f3dacb37bee10f12ee81994cfaf365ac1ce7384 while dependencies.lock.json line 28 records d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780; sha256sum lib/forge-std/src/Vm.sol = a97ae3a5a13313815470d8b06bc6352c75ecde73761606567872f98cf0d51391 while line 40 records 9ed10705966cec6d7e92a705659039aa8859c8d34bf2e6ba83de7165e984ea91. Whitespace-only confirmation: curl -sfL https://raw.githubusercontent.com/foundry-rs/forge-std/v1.9.4/src/Vm.sol | tr -d '[:space:]' | sha256sum and tr -d '[:space:]' < lib/forge-std/src/Vm.sol | sha256sum both give 4c8f89772cdc760bad5ef68cdc8e4a88226ec4abd60f81c349cd03391f63d45e; the same holds for src/StdAssertions.sol (8fced2eabe1802f7...).","severity":"low","snippet":"      \"src/StdAssertions.sol\": \"d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780\",","title":"Seven vendored forge-std files do not match the per-file SHA-256 hashes dependencies.lock.json records, contradicting the README's 'unmodified upstream copies' claim (whitespace-only reformat, test-on"}],"hash":"099ec1aea2069b59c2907eeac345b8e2c61f0e0307d2ed0c81accc808cb333a0","nodeId":"9c4ca6a0-54a1-4cef-b5ba-12a22973bb93","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written. The tree is otherwise unchanged.\n\n**Outcome.** The MAD token is a bare OpenZeppelin ERC20 v5.1.0 with a constructor that mints the fixed supply to the deployer. No code defect was found. One low provenance finding is kept, merged from the two specialists who reported it.\n\n**What I reproduced**\n\n- **Specialist finding (audit_permissions low, audit_flow info), kept as one low.** Seven forge-std files under `lib/` hash differently from the lock file, while the README claims unmodified upstream copies. I ran the hash check and got the same seven mismatches. I fetched upstream v1.9.4 for two of them and confirmed the whitespace-stripped hashes match, so the drift is a forge-fmt reformat. forge-std is test-only, so the deployed token is unaffected.\n- **Production dependency verified.** All six vendored OpenZeppelin files match both the lock and the files fetched from the v5.1.0 tag.\n\n**My own pass over the entry points**\n\n- approve, transfer and transferFrom are inherited unmodified. Transfers move exactly the stated amount, so the factory, distributor, pool seed and remainder flows arrive whole.\n- Supply is 1e27 minted once to msg.sender and matches the manifest. The ABI has no mint, burn, pause, blacklist or owner function.\n- The constructor takes no arguments, matching the manifest's empty list. Creation and runtime code are well under the size limits, and the disassembled runtime has no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- The project builds on solc 0.8.26 and all 50 tests pass.\n\nThe coverage record answers all three entry points as holds, plus five invariant rows. The static-analysis lead about a large numeric literal is cosmetic and was not promoted.","treeHash":null,"usage":{"cachedInputTokens":296766,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":7083,"runtime":"claude","turns":9,"wallClockMs":134563}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"aad1250d716d3f82","findings":[{"citation":"resolved","description":"README.md line 63 states that dependencies.lock.json records per-file SHA-256 hashes and that 'Vendored files are unmodified upstream copies'. That is true for all five OpenZeppelin v5.1.0 files (each local hash equals both the lock entry and the file fetched from the v5.1.0 tag), but false for seven forge-std v1.9.4 files: src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/interfaces/IMulticall3.sol and src/mocks/MockERC721.sol. Their local SHA-256 differs from the lock entry, and the lock entry equals the upstream v1.9.4 file, so the lock is right and the tree is not. A whitespace-stripped comparison and `diff -w -B` show no token-level difference: the local copies are forge-fmt reformatted versions of upstream (long signatures wrapped, assembly re-indented), and they do not match any neighbouring tag (v1.9.3, v1.9.5 through v1.11.0 checked for Vm.sol). Impact is limited to provenance: anyone verifying the vendored tree against the lock, as the README invites, gets seven mismatches and cannot distinguish a cosmetic reformat from a tampered test harness without doing the whitespace-insensitive diff themselves. Token behaviour and src/ are unaffected; forge-std is test-only. Fix: either restore the seven files to the byte-exact v1.9.4 copies (so the lock holds) or regenerate the lock from the tree and drop the 'unmodified upstream copies' claim; do not run forge fmt over lib/.","line":40,"path":"dependencies.lock.json","reproduction":"From the repository root run: node -e 'const fs=require(\"fs\"),cp=require(\"child_process\");let bad=0;for(const d of JSON.parse(fs.readFileSync(\"dependencies.lock.json\",\"utf8\")))for(const [f,h] of Object.entries(d.files_sha256)){const g=cp.execSync(\"sha256sum \"+d.directory+\"/\"+f).toString().slice(0,64);if(g!==h){bad++;console.log(f,g)}}console.log(\"mismatches\",bad)'. Expected: mismatches 0 (README line 63 claims unmodified copies with recorded hashes). Actual: mismatches 7, all under lib/forge-std, e.g. src/Vm.sol local a97ae3a5a13313815470d8b06bc6352c75ecde73761606567872f98cf0d51391 vs lock/upstream 9ed10705966cec6d7e92a705659039aa8859c8d34bf2e6ba83de7165e984ea91. Confirm the difference is formatting only: curl -sfL https://raw.githubusercontent.com/foundry-rs/forge-std/v1.9.4/src/Vm.sol | tr -d '[:space:]' | sha256sum equals tr -d '[:space:]' < lib/forge-std/src/Vm.sol | sha256sum (both 4c8f89772cdc760b...), while the raw hashes differ.","severity":"low","snippet":"      \"src/Vm.sol\": \"9ed10705966cec6d7e92a705659039aa8859c8d34bf2e6ba83de7165e984ea91\",","title":"Seven vendored forge-std files do not match the hashes dependencies.lock.json records for them (reformatted copies, not upstream v1.9.4 bytes)"}],"hash":"1031cfd01e0319d5fb99bfbebac5ced18074badfe71d71c66c47fb39efa678df","nodeId":"0a98658c-7c43-4669-8f52-ff81b567ff92","outcome":"completed","summary":"Nothing further is needed. The review is complete and the findings file is validated, so this is the closing recap.\n\nThe MAD token holds under the Access Control, Trust Gap and Asymmetry guides. It is a sixteen-line contract inheriting unmodified OpenZeppelin v5.1.0 ERC-20, with a no-argument constructor that mints exactly 10^27 units to the deployer. The compiled ABI exposes only the three state-changing ERC-20 functions, four views and the supply constant. There is no owner, pause, blacklist, mint, burn, upgrade, receive or fallback, and neither the creation nor the runtime bytecode contains a reachable CALL, DELEGATECALL, CALLCODE or SELFDESTRUCT. The three entry points mirror each other's state writes, zero-address and zero-value branches behave consistently, and the deployer cannot pull a holder's balance without an allowance. Each of these claims was exercised with throwaway Foundry tests that I removed afterwards, and the existing suite of 33 tests passes.\n\nOne low-severity finding is recorded in `.imd-findings.json`, outside the token itself:\n\n- **Vendored forge-std provenance.** Seven files under lib/forge-std differ from the SHA-256 hashes that dependencies.lock.json records for them, while the lock hashes match upstream v1.9.4 exactly. A whitespace-insensitive diff shows the local copies are forge-fmt reformatted versions with no code change. README line 63 still claims the vendored files are unmodified upstream copies, so anyone verifying the tree against the lock gets seven mismatches. All five OpenZeppelin files match both the lock and upstream byte for byte. The reproduction in the finding is a single node command.\n\nThe coverage record has six rows: `holds` for approve, transfer, transferFrom, the constructor mint, and the overall access-control surface, and `finding` pointing at the provenance issue. No tracked file was changed, test/scratch is gone, and temp files under /tmp were removed. Nothing in the assigned area was left unreached.","treeHash":null,"usage":{"cachedInputTokens":712446,"inputTokens":50,"model":"claude-fable-5-1","outputTokens":23516,"runtime":"claude","turns":41,"wallClockMs":366728}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fdbedee33322a6ef","findings":[],"hash":"6c93afa8399eb01a08ee7cf271caa866d02cc803bfb6346dfc210c900db7fb90","nodeId":"9149552e-9e62-4d88-b733-af9e487029f6","outcome":"completed","summary":"I found no defects in the MAD token, so `.imd-findings.json` has an empty findings list plus a coverage record for all three entry points. The JSON is valid.\n\n**What the code is:** `src/MADToken.sol` is a plain OpenZeppelin v5.1.0 ERC20. It has no overrides, admin roles, fees, burns or hooks, and its constructor takes no arguments. It mints `1_000_000_000 * 10**18` to `msg.sender` (the factory) once, in the constructor. Every vendored OpenZeppelin file matches its sha256 in `dependencies.lock.json`, so the library code is unmodified.\n\n**Coverage against the three assigned guides:**\n- **Economic Security:**\n  - With no transfer tax, the factory's transfers to the distributor, the distributor's claims, the pool seed and the PoolManager's settlement all move exactly the stated amount.\n  - There are no oracles, outside dependencies or special-case addresses, and no fee formula that could be pushed to zero or to its maximum.\n  - The ERC-20 behaviour is the library's own: transfers to or from the zero address revert, and an unlimited allowance is never reduced.\n- **Invariant:**\n  - The sum of balances equals a total supply that stays fixed at 1e27, because minting happens only in the constructor.\n  - `transferFrom` has no route that skips the allowance check.\n  - The existing invariant suite ran 8,192 calls with 0 reverts.\n- **Flow Gap:** No external calls or callbacks happen mid-transfer, and no value is read before an outside call and reused after it.\n\n**Entry points:** `approve`, `transfer` and `transferFrom` are all `holds`. I also added rows for the fixed-supply invariant, the absence of any privileged power over holders, and exact launch flows.\n\n**Tests:** All 33 existing tests pass. I wrote no proof tests because there were no findings to prove.\n\n**Static analysis:** The aderyn line at `src/MADToken.sol:11` is not a defect. It is the supply constant, written readably and matching the brief. The usual approve front-running race is standard ERC-20 behaviour and I didn't report it.\n\n**Not run:** The protected floor tests in `.imd/reads/protected/` need the launch environment variables and factory harness, which this machine doesn't have. From the code alone, nothing in the token conflicts with them.","treeHash":null,"usage":{"cachedInputTokens":224977,"inputTokens":14,"model":"claude-opus-5-5","outputTokens":3325,"runtime":"claude","turns":7,"wallClockMs":67963}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8a05ec1ea94411ea","findings":[{"citation":"resolved","description":"README.md line 63 states that dependencies.lock.json records per-file SHA-256 hashes and that 'Vendored files are unmodified upstream copies'. For lib/openzeppelin-contracts this is true: all six files match the lock and the lock matches upstream v5.1.0. For lib/forge-std it is not: seven files (src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/interfaces/IMulticall3.sol, src/mocks/MockERC721.sol) hash differently from both the lock and the upstream v1.9.4 archive (archive sha256 9bf19180...96a15, which does match the lock). The differences are whitespace only: `forge fmt` with the project's line_length = 120 re-wrapped multi-line signatures onto single lines (foundry.toml has no [fmt] ignore for lib/). Stripping whitespace, each file is byte-identical to upstream. Impact: none on the deployed token, which imports only OpenZeppelin; forge-std is used only by tests, and test semantics are unchanged (the full suite passes). The defect is that the provenance claim and the lock are not verifiable as written: an attestation or reviewer that checks the lock will see seven mismatches and cannot distinguish them from a tampered test library without diffing. Fix: either restore the seven files from the v1.9.4 archive (so the lock holds), or regenerate the lock hashes and amend the README to say forge-std was reformatted; and add `ignore = [\"lib/**\"]` under [fmt] so a future `forge fmt` does not reintroduce the drift.","line":28,"path":"dependencies.lock.json","reproduction":"State: the working tree at commit 3311dfd. Input: `sha256sum lib/forge-std/src/StdAssertions.sol` -> 3fbf4a025b4fc94e..., while dependencies.lock.json line 28 records d4c89eec70d267de... for the same file. Expected: the two hashes are equal, as README.md line 63 asserts. Actual: they differ for src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/interfaces/IMulticall3.sol and src/mocks/MockERC721.sol (7 of the 28 forge-std entries in the lock); the remaining 21 forge-std files and all 6 OpenZeppelin files match. Verification that it is whitespace-only: `tr -d ' \\n\\t\\r' < lib/forge-std/src/Vm.sol | sha256sum` equals the same command run on src/Vm.sol from the v1.9.4 tarball (https://codeload.github.com/foundry-rs/forge-std/tar.gz/refs/tags/v1.9.4), for each of the seven files.","severity":"info","snippet":"      \"src/StdAssertions.sol\": \"d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780\",","title":"Seven vendored forge-std files do not match the hashes recorded in dependencies.lock.json (whitespace-only reformatting; test-only dependency)"}],"hash":"74230e2c657385c0f3a52b0da4174607f69aff6c271861623a7bed1ba648098a","nodeId":"aedbc96f-9a08-4fdc-9f06-0bd736c4963c","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result. Nothing in the repository was changed; the scratch test was removed after it ran.\n\n**Outcome: the production code holds in my area.** MADToken is sixteen lines over an unmodified OpenZeppelin v5.1.0 ERC20, and I found no defect in it. One info-level provenance discrepancy is reported.\n\n**What I checked**\n\n- **Execution Trace.** Traced `approve`, `transfer` and `transferFrom` through `_transfer`, `_update`, `_approve` and `_spendAllowance` with concrete values. Zero sender and receiver revert, balance is checked before the unchecked subtraction, self-transfers re-read storage and net to zero, and allowance spent before a failing balance check is rolled back by the revert. Max allowance is not decremented, max minus one is. Zero-value `transferFrom` from any account needs no allowance, which is standard and documented in the README.\n- **Periphery.** Verified every vendored OpenZeppelin file against the lock file hashes and the lock against upstream v5.1.0. `decimals()` is hardcoded to 18, `_msgSender` is plain `msg.sender`, and there is no meta-transaction or hook surface.\n- **First Principles.** The constructor mints exactly 10^27 to `msg.sender` once, under CREATE and CREATE2, with no constructor arguments. The compiled ABI exposes no mint, burn, owner, pause, initialize or upgrade entry point. An opcode walk of the compiled runtime found no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL, STATICCALL or CREATE, so transfers cannot call out or reenter and the launch legs arrive whole.\n- **Checks run.** Full project suite with the README's fuzz seed (33 tests, 8192 invariant calls, all passing), `forge fmt --check` (clean), and a scratch probe of six edge cases (all passing). Slither reported nothing; the aderyn large-literal lead is the compile-time supply constant and is not a defect.\n\n**The one finding (info).** Seven forge-std files under `lib/` were re-wrapped by the formatter and no longer match the hashes in `dependencies.lock.json`, which the README says vouch for unmodified upstream copies. I downloaded the pinned v1.9.4 archive and confirmed the differences are whitespace only and the lock itself matches upstream. This touches test tooling only and has no effect on deployed bytecode, so the fix is to restore the files or regenerate the lock, and to exclude `lib/` from `forge fmt`.\n\n**Coverage record.** All three verifier-listed entry points are marked `holds`, plus rows for the fixed-supply invariant, the bytecode floor, and both dependency provenance checks. Nothing in scope was left unreached.","treeHash":null,"usage":{"cachedInputTokens":844082,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":18269,"runtime":"claude","turns":33,"wallClockMs":427476}},{"artifacts":[],"attempt":1,"bundleHash":"948777fca44f85024f7de40a7d1b142930d6c0525f1952526d4d9df82c617124","device":"f6591e7f19d7b066","findings":[],"hash":"866dc45291f077f2ecab79b7b748858da5fba275a28165b816dd94f65e48f2c4","nodeId":"a7b959c9-93c3-491f-b6f0-e82c25e815e0","outcome":"completed","summary":"Created [launch.json](/home/seat/.identitymd/work/11c08faf-9da4-401a-9b75-91b3bc1fb324/a7b959c9-93c3-491f-b6f0-e82c25e815e0/launch.json) matching `MADToken`, its exact supply, empty constructor arguments, and the required pool and economics.\n\nManifest and compiled ABI checks passed. `forge build` succeeded; `forge test` passed all 33 tests with the specified fuzz seed. Only `launch.json` is changed outside permitted scratch artifacts.","treeHash":"c052f66c52f2ea2059da75d62a3ea2324825df81","usage":{"cachedInputTokens":190592,"inputTokens":25753,"model":"gpt-6-astra","outputTokens":3357,"runtime":"codex","turns":3,"wallClockMs":103066}},{"artifacts":[],"attempt":1,"bundleHash":"4f867446d0c6adfaa6431de277b01892f6771382aeb8fae52fd402b8527f59f8","device":"483b1030f62fc40e","findings":[],"hash":"8d7bf053833e634373e28eb08e1f86b4608c098a04bd986b32358b27cab28b89","nodeId":"2bc6ae5b-f370-4c34-a008-f749ce57a9e2","outcome":"completed","summary":"Added 16 adversarial tests and expanded stateful invariants covering failures, rollback, allowance replay, and integer boundaries.\n\nValidation passed:\n- `forge build`\n- Seeded `forge test`: **50 passed**\n- **32,768 invariant calls**\n- **1,000 runs per fuzz test**\n\nAll changes are under `test/`. No implementation defects were found.","treeHash":"4cdd496a37094ebdec5d825d91b55fc4986afd68","usage":{"cachedInputTokens":996608,"inputTokens":61372,"model":"gpt-6-astra","outputTokens":16884,"runtime":"codex","turns":6,"wallClockMs":580301}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"d03fc84904b54d9e","findings":[],"hash":"a107994dba89b12fbc6b386655e2da5d47131edc9a0816ae7d37165693d9e2c8","nodeId":"93e8bef2-8e28-47ab-ab60-e3b4865252b2","outcome":"completed","summary":"The review is complete. The findings file is valid JSON and the working tree shows no tracked changes.\n\n**Result: no defects found in the Math Precision, Boundary or Numerical Gap areas.** The findings file at the repository root holds an empty findings list and nine coverage rows, one for each of the three state-changing entry points plus six invariant and lead rows.\n\nWhat I checked:\n\n- **Source and dependency.** The token is a constructor mint on top of OpenZeppelin v5.1.0 ERC-20. The three vendored Solidity files hash identically to the upstream v5.1.0 archive, so the arithmetic reviewed is the unmodified library code.\n- **Math precision.** The supply constant evaluates exactly to ten to the twenty-seventh. The only arithmetic is OZ's checked balance comparison followed by unchecked subtraction and addition, which cannot wrap because every balance is bounded by the fixed supply. The launch split percentages divide exactly with no dust, and the supply fits the signed 128-bit deltas and sqrt-price range Uniswap v4 uses in either currency order.\n- **Boundary.** The token makes no external calls, has no payable or fallback surface, and decodes no bytes. The zero-address sentinel branches inside the balance update are reachable only through the constructor, because the public transfer and approve paths reject zero addresses first. One wei, exact balance, balance plus one, and both max and max-minus-one values behave as ERC-20 specifies.\n- **Numerical gap.** Zero-amount transfer, transferFrom and approve calls leave every balance and allowance unchanged, and still cannot reach the zero-address paths. The unlimited-allowance sentinel is only the exact maximum value. A balance or receiver failure inside transferFrom leaves the allowance untouched.\n- **Static-analysis lead.** The aderyn large-literal warning is a constant equal to the intended supply, not a defect.\n\nThe existing 33-test suite passes, formatting passes, and the ten scratch probes I wrote under test/scratch all pass. Nothing was left unreached in the assigned area.","treeHash":null,"usage":{"cachedInputTokens":720121,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":13615,"runtime":"claude","turns":23,"wallClockMs":284053}},{"artifacts":[],"attempt":1,"bundleHash":"e145e275f9aef2495fea6b1434fd80b7fda4a3e1922043b84620837cf71bf44a","device":"c5a27b25fa718879","findings":[],"hash":"b0f82c302bb491b820a382205985f8cb7611e858f6a46f5702463e0b52d73ca8","nodeId":"d13e27c9-fadb-4c26-b134-19d39d3f888b","outcome":"completed","summary":"Implemented MAD with 1,000,000,000 tokens, 18 decimals, minted once to the deployer. Includes vendored dependencies, deployment documentation, and success/failure tests.\n\nPassed with Solidity 0.8.26:\n\n- `forge build`, including a clean offline rebuild\n- 32 unit/fuzz tests and both invariant properties\n- `forge fmt --check`\n\nThe separate protected launch harness remains for independent verification.","treeHash":"fbedcb3cf6d24f9ca50e8e69762b4006884dda7b","usage":{"cachedInputTokens":444928,"inputTokens":36518,"model":"gpt-6-astra","outputTokens":14829,"runtime":"codex","turns":5,"wallClockMs":420702}}],"verification":[{"checks":[{"durationMs":1223,"exitCode":0,"name":"build","output":"Compiling 31 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.16s\nCompiler run successful!\n","passed":true},{"durationMs":2540,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 32 tests for test/MADToken.t.sol:MADTokenTest\n[PASS] testFuzz_delegatedTransfer(uint256,uint256) (runs: 512, μ: 167733, ~: 170112)\nLogs:\n  Bound result 668392452534998206599290722\n  Bound result 450824698629309312854910994\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 512, μ: 99789, ~: 99924)\nLogs:\n  Bound result 717257810749606690765892328\n\n[PASS] testFuzz_transferMoreThanBalanceReverts(uint256,uint256) (runs: 512, μ: 129724, ~: 130079)\nLogs:\n  Bound result 668392452534998206599290722\n  Bound result 4903450049063839313644759146801574486511059341874514319\n\n[PASS] testFuzz_unauthorizedTransferFromReverts(uint256,uint256) (runs: 512, μ: 128014, ~: 128701)\nLogs:\n  Bound result 845760159313941342732217694\n  Bound result 154239840686058657267782303\n\n[PASS] test_approveEmitsEventAndReplacesAllowance() (gas: 149795)\n[PASS] test_approveZeroCallerReverts() (gas: 33141)\n[PASS] test_approveZeroSpenderReverts() (gas: 32861)\n[PASS] test_balanceFailureDoesNotConsumeAllowance() (gas: 181803)\n[PASS] test_constructorEmitsExactlyOneMintEvent() (gas: 12250)\n[PASS] test_create2DeploymentNeedsNoArgumentsOrExternalContracts() (gas: 326221)\n[PASS] test_factoryReceivesEverythingNotTransactionOrigin() (gas: 340653)\n[PASS] test_invalidRecipientDoesNotConsumeAllowance() (gas: 174614)\n[PASS] test_launchTransfersClaimsAndTradingLegsArriveWhole() (gas: 698085)\n[PASS] test_metadataAndWholeSupply() (gas: 111893)\n[PASS] test_nativeCurrencyAndUnknownCallsAreRejected() (gas: 61543)\n[PASS] test_noMintBurnFreezeOrUpgradeEntryPointsForAnyone() (gas: 2269676)\n[PASS] test_revokingAllowancePreventsFurtherSpending() (gas: 187723)\n[PASS] test_selfTransferPreservesBalance() (gas: 56763)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 96218)\n[PASS] test_transferEntireSupply() (gas: 154044)\n[PASS] test_transferFromByHolderStillRequiresAllowance() (gas: 93685)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 289469)\n[PASS] test_transferFromOverAllowanceRevertsWithoutChanges() (gas: 176181)\n[PASS] test_transferFromToSameHolderStillConsumesAllowance() (gas: 165710)\n[PASS] test_transferFromUnlimitedAllowanceDoesNotDecreaseIt() (gas: 199757)\n[PASS] test_transferFromWithoutAllowanceReverts() (gas: 115173)\n[PASS] test_transferFromZeroCallerReverts() (gas: 33145)\n[PASS] test_transferInsufficientBalanceRevertsWithoutChanges() (gas: 122950)\n[PASS] test_transferMaximumUintReverts() (gas: 45134)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 75151)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 63069)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 68886)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 20.95ms (78.28ms CPU time)\n\nRan 1 test for test/MADToken.invariant.t.sol:MADTokenInvariantTest\n[PASS]\nMADTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchAuthorizationsAndSpending\n[PASS] invariant_fixedSupplyAndExactBalances\n MADTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-----------------+--------------+-------+---------+----------╮\n| Contract        | Selector     | Calls | Reverts | Discards |\n+=============================================================+\n| MADTokenHandler | approve      | 2794  | 0       | 0        |\n|-----------------+--------------+-------+---------+----------|\n| MADTokenHandler | transfer     | 2740  | 0       | 0        |\n|-----------------+--------------+-------+---------+----------|\n| MADTokenHandler | transferFrom | 2658  | 0       | 0        |\n╰-----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3624\n  Bound result 0\n  Bound result 0\n  Bound result 888084836560744261291376550\n  Bound result 113577536\n  Bound result 398\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 779440671386903547020116409\n  Bound result 1652\n  Bound result 0\n  Bound result 0\n  Bound result 5785\n  Bound result 0\n  Bound result 0\n  Bound result 892\n  Bound result 0\n  Bound result 803\n  Bound result 768814513930747402719875947\n  Bound result 0\n  Bound result 40\n  Bound result 0\n  Bound result 18\n  Bound result 0\n  Bound result 255\n  Bound result 0\n  Bound result 331645609163168\n  Bound result 5210\n  Bound result 0\n  Bound result 1572\n  Bound result 4314\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5731\n  Bound result 24576\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 146\n  Bound result 2\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.44s (2.44s CPU time)\n\nRan 2 test suites in 2.44s (2.46s CPU time): 33 tests passed, 0 failed, 0 skipped (33 total tests)\n","passed":true},{"durationMs":26,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MADToken.approve(address,uint256)\",\"MADToken.transfer(address,uint256)\",\"MADToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"LICENSE\":21,\"README.md\":68,\"dependencies.lock.json\":54,\"foundry.toml\":22,\"launch.json\":20,\"remappings.txt\":2,\"src/MADToken.sol\":16,\"test/MADToken.invariant.t.sol\":101,\"test/MADToken.t.sol\":445},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"866dc45291f077f2ecab79b7b748858da5fba275a28165b816dd94f65e48f2c4","verifiedTreeHash":"c052f66c52f2ea2059da75d62a3ea2324825df81","verifierVersion":"0.1.0+fa479356"},{"checks":[{"durationMs":2926,"exitCode":0,"name":"build","output":"Compiling 32 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.82s\nCompiler run successful!\n","passed":true},{"durationMs":17971,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 32 tests for test/MADToken.t.sol:MADTokenTest\n[PASS] testFuzz_delegatedTransfer(uint256,uint256) (runs: 1000, μ: 167872, ~: 170112)\nLogs:\n  Bound result 662\n  Bound result 50\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 1000, μ: 96759, ~: 96999)\nLogs:\n  Bound result 298686654766943912225589646\n\n[PASS] testFuzz_transferMoreThanBalanceReverts(uint256,uint256) (runs: 1000, μ: 129735, ~: 130115)\nLogs:\n  Bound result 12\n  Bound result 6351\n\n[PASS] testFuzz_unauthorizedTransferFromReverts(uint256,uint256) (runs: 1000, μ: 128011, ~: 128713)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 21301\n\n[PASS] test_approveEmitsEventAndReplacesAllowance() (gas: 149795)\n[PASS] test_approveZeroCallerReverts() (gas: 33141)\n[PASS] test_approveZeroSpenderReverts() (gas: 32861)\n[PASS] test_balanceFailureDoesNotConsumeAllowance() (gas: 181803)\n[PASS] test_constructorEmitsExactlyOneMintEvent() (gas: 12250)\n[PASS] test_create2DeploymentNeedsNoArgumentsOrExternalContracts() (gas: 326221)\n[PASS] test_factoryReceivesEverythingNotTransactionOrigin() (gas: 340653)\n[PASS] test_invalidRecipientDoesNotConsumeAllowance() (gas: 174614)\n[PASS] test_launchTransfersClaimsAndTradingLegsArriveWhole() (gas: 698085)\n[PASS] test_metadataAndWholeSupply() (gas: 111893)\n[PASS] test_nativeCurrencyAndUnknownCallsAreRejected() (gas: 61543)\n[PASS] test_noMintBurnFreezeOrUpgradeEntryPointsForAnyone() (gas: 2269676)\n[PASS] test_revokingAllowancePreventsFurtherSpending() (gas: 187723)\n[PASS] test_selfTransferPreservesBalance() (gas: 56763)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 96218)\n[PASS] test_transferEntireSupply() (gas: 154044)\n[PASS] test_transferFromByHolderStillRequiresAllowance() (gas: 93685)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 289469)\n[PASS] test_transferFromOverAllowanceRevertsWithoutChanges() (gas: 176181)\n[PASS] test_transferFromToSameHolderStillConsumesAllowance() (gas: 165710)\n[PASS] test_transferFromUnlimitedAllowanceDoesNotDecreaseIt() (gas: 199757)\n[PASS] test_transferFromWithoutAllowanceReverts() (gas: 115173)\n[PASS] test_transferFromZeroCallerReverts() (gas: 33145)\n[PASS] test_transferInsufficientBalanceRevertsWithoutChanges() (gas: 122950)\n[PASS] test_transferMaximumUintReverts() (gas: 45134)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 75151)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 63069)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 68886)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 606.05ms (1.39s CPU time)\n\nRan 16 tests for test/MADToken.adversarial.t.sol:MADTokenAdversarialTest\n[PASS] testFuzz_approvalReplacementIsIsolatedAndIdempotent(uint256,uint256) (runs: 1000, μ: 1301009, ~: 1301103)\n[PASS] testFuzz_failedDelegationCanBeRetriedAfterFunding(uint256,uint256,bool) (runs: 1000, μ: 1287475, ~: 1287610)\nLogs:\n  Bound result 999999999999999999999999999\n  Bound result 1\n\n[PASS] testFuzz_failedRecipientCanBeCorrectedWithoutReapproval(uint256,uint256) (runs: 1000, μ: 1243762, ~: 1244151)\nLogs:\n  Bound result 11951\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n\n[PASS] testFuzz_splitDelegatedSpendingMatchesSingleSpend(uint256,uint256,uint256) (runs: 1000, μ: 489463, ~: 487255)\nLogs:\n  Bound result 2\n  Bound result 667543319561716569079074890\n\n[PASS] testFuzz_transferRoundTripRestoresBalancesAndAuthorizations(uint256,uint256,uint256,uint256) (runs: 1000, μ: 1306762, ~: 1307750)\nLogs:\n  Bound result 23\n  Bound result 5474\n  Bound result 15\n\n[PASS] testFuzz_truncatedMutatorCalldataRevertsAtomically(uint256,uint256) (runs: 1000, μ: 1180960, ~: 1181455)\nLogs:\n  Bound result 98\n\n[PASS] test_allowanceCannotBeBorrowedFromAnotherOwnerOrSpender() (gas: 1254109)\n[PASS] test_exhaustedAllowanceRejectsReplayDespiteRemainingBalance() (gas: 1223155)\n[PASS] test_knownMutatorsRejectEtherAtomically() (gas: 2234234)\n[PASS] test_maximumMinusOneApprovalIsFinite() (gas: 210998)\n[PASS] test_oneWeiMovesExactlyByDelegationAndDirectTransfer() (gas: 283201)\n[PASS] test_ownerSpenderAndRecipientMayAllBeTheSameAccount() (gas: 209924)\n[PASS] test_receivingItsOwnSupplyDoesNotBurnTokens() (gas: 92287)\n[PASS] test_replacingUnlimitedApprovalWithFiniteCapsFurtherSpending() (gas: 1252496)\n[PASS] test_selfTransfersCannotExceedBalanceEvenWithApproval() (gas: 1655565)\n[PASS] test_unlimitedApprovalCannotTransferMaximumUint() (gas: 1122828)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 625.92ms (3.62s CPU time)\n\nRan 2 tests for test/MADToken.invariant.t.sol:MADTokenInvariantTest\n[PASS]\nMADTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchAuthorizationsAndSpending\n[PASS] invariant_fixedSupplyAndExactBalances\n[PASS] invariant_metadataRemainsUnchanged\n MADTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭-----------------+---------------------------------+-------+---------+----------╮\n| Contract        | Selector                        | Calls | Reverts | Discards |\n+================================================================================+\n| MADTokenHandler | approve                         | 3672  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| MADTokenHandler | approveAndSpend                 | 3625  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| MADTokenHandler | rejectTransferFromOverAllowance | 3715  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| MADTokenHandler | rejectTransferFromOverBalance   | 3623  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| MADTokenHandler | rejectTransferOverBalance       | 3623  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| MADTokenHandler | rejectZeroRecipient             | 3581  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| MADTokenHandler | rejectZeroSpender               | 3573  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| MADTokenHandler | transfer                        | 3664  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| MADTokenHandler | transferFrom                    | 3692  | 0       | 0        |\n╰-----------------+---------------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1508\n  Bound result 1512\n  Bound result 0\n  Bound result 0\n  Bound result 8915\n  Bound result 999999999999999999999991135\n  Bound result 0\n  Bound result 518212318014\n  Bound result 0\n  Bound result 8916\n  Bound result 0\n  Bound result 0\n  Bound result 999999999999999481787681983\n  Bound result 974145540304311019091704575331984312968674\n  Bound result 0\n  Bound result 3\n  Bound result 24576\n  Bound result 999999999999999481787657418\n  Bound result 20\n  Bound result 0\n  Bound result 3\n  Bound result 581\n  Bound result 12\n  Bound result 4923\n  Bound result 562\n  Bound result 0\n  Bound result 507803274350\n  Bound result 6269\n  Bound result 30\n  Bound result 1\n  Bound result 207\n  Bound result 5200\n  Bound result 1339\n  Bound result 123000000000000000000\n  Bound result 369\n  Bound result 17\n  Bound result 18\n  Bound result 719\n  Bound result 999999876999999481787675456\n  Bound result 2714\n  Bound result 5400\n  Bound result 20\n  Bound result 8845\n  Bound result 16\n  Bound result 9\n  Bound result 9001\n  Bound result 455858450598889261018726851614269708553632428161180538916340491\n  Bound result 8480\n  Bound result 123000000000000000000\n  Bound result 480\n  Bound result 10328763481\n  Bound result 10382345432\n  Bound result 0\n  Bound result 22\n  Bound result 0\n  Bound result 8286\n  Bound result 78688786020279510721436209381368820097491551283448275463586938978301592781642\n  Bound result 100000000000000000000\n  Bound result 10409036606\n  Bound result 1\n  Bound result 23\n  Bound result 9721\n  Bound result 419\n  Bound result 96\n  Bound result 9388067298\n  Bound result 9\n  Bound result 2\n  Bound result 203\n  Bound result 62\n  Bound result 8569\n  Bound result 7105\n  Bound result 1504267684540255775557564451398795328532288793\n  Bound result 6\n  Bound result 999999876999999481787669045\n  Bound result 96\n  Bound result 9868\n  Bound result 1884\n  Bound result 999999899999999989590939693\n  Bound result 21\n  Bound result 9262\n  Bound result 0\n  Bound result 4\n  Bound result 8413\n  Bound result 334649005\n  Bound result 2\n  Bound result 29573711758508056218760847\n  Bound result 970426188241491934436650986\n  Bound result 100\n  Bound result 6904\n  Bound result 255\n  Bound result 1\n  Bound result 95160669\n  Bound result 919344153\n  Bound result 66090038739767060395973755\n  Bound result 493218077763548958780353724\n  Bound result 0\n  Bound result 9\n  Bound result 1542078\n  Bound result 0\n  Bound result 1046363170\n  Bound result 3405356150\n  Bound result 999999899999999986185609644\n  Bound result 69\n  Bound result 16\n  Bound result 10066\n  Bound result 100000000009388072094\n  Bound result 2050\n\n[PASS] test_handlerFailuresDoNotPreventLaterSpending() (gas: 2641538)\nLogs:\n  Bound result 100\n  Bound result 4\n  Bound result 1\n  Bound result 5\n  Bound result 6\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 96\n  Bound result 100\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 17.82s (17.82s CPU time)\n\nRan 3 test suites in 17.83s (19.06s CPU time): 50 tests passed, 0 failed, 0 skipped (50 total tests)\n","passed":true},{"durationMs":49,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MADToken.approve(address,uint256)\",\"MADToken.transfer(address,uint256)\",\"MADToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"LICENSE\":21,\"README.md\":68,\"dependencies.lock.json\":54,\"foundry.toml\":22,\"remappings.txt\":2,\"src/MADToken.sol\":16,\"test/MADToken.adversarial.t.sol\":325,\"test/MADToken.invariant.t.sol\":255,\"test/MADToken.t.sol\":446,\"test/README.md\":41},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"8d7bf053833e634373e28eb08e1f86b4608c098a04bd986b32358b27cab28b89","verifiedTreeHash":"4cdd496a37094ebdec5d825d91b55fc4986afd68","verifierVersion":"0.1.0+fa479356"},{"checks":[{"durationMs":1253,"exitCode":0,"name":"build","output":"Compiling 31 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.17s\nCompiler run successful!\n","passed":true},{"durationMs":2429,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 32 tests for test/MADToken.t.sol:MADTokenTest\n[PASS] testFuzz_delegatedTransfer(uint256,uint256) (runs: 512, μ: 167733, ~: 170112)\nLogs:\n  Bound result 875881616381721246614314084\n  Bound result 105986826840729144853439172\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 512, μ: 99789, ~: 99924)\nLogs:\n  Bound result 38177486\n\n[PASS] testFuzz_transferMoreThanBalanceReverts(uint256,uint256) (runs: 512, μ: 129724, ~: 130079)\nLogs:\n  Bound result 668392452534998206599290722\n  Bound result 4903450049063839313644759146801574486511059341874514319\n\n[PASS] testFuzz_unauthorizedTransferFromReverts(uint256,uint256) (runs: 512, μ: 128014, ~: 128701)\nLogs:\n  Bound result 461018760274170913325621837\n  Bound result 437188812469398497829664518\n\n[PASS] test_approveEmitsEventAndReplacesAllowance() (gas: 149795)\n[PASS] test_approveZeroCallerReverts() (gas: 33141)\n[PASS] test_approveZeroSpenderReverts() (gas: 32861)\n[PASS] test_balanceFailureDoesNotConsumeAllowance() (gas: 181803)\n[PASS] test_constructorEmitsExactlyOneMintEvent() (gas: 12250)\n[PASS] test_create2DeploymentNeedsNoArgumentsOrExternalContracts() (gas: 326221)\n[PASS] test_factoryReceivesEverythingNotTransactionOrigin() (gas: 340653)\n[PASS] test_invalidRecipientDoesNotConsumeAllowance() (gas: 174614)\n[PASS] test_launchTransfersClaimsAndTradingLegsArriveWhole() (gas: 698085)\n[PASS] test_metadataAndWholeSupply() (gas: 111893)\n[PASS] test_nativeCurrencyAndUnknownCallsAreRejected() (gas: 61543)\n[PASS] test_noMintBurnFreezeOrUpgradeEntryPointsForAnyone() (gas: 2269676)\n[PASS] test_revokingAllowancePreventsFurtherSpending() (gas: 187723)\n[PASS] test_selfTransferPreservesBalance() (gas: 56763)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 96218)\n[PASS] test_transferEntireSupply() (gas: 154044)\n[PASS] test_transferFromByHolderStillRequiresAllowance() (gas: 93685)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 289469)\n[PASS] test_transferFromOverAllowanceRevertsWithoutChanges() (gas: 176181)\n[PASS] test_transferFromToSameHolderStillConsumesAllowance() (gas: 165710)\n[PASS] test_transferFromUnlimitedAllowanceDoesNotDecreaseIt() (gas: 199757)\n[PASS] test_transferFromWithoutAllowanceReverts() (gas: 115173)\n[PASS] test_transferFromZeroCallerReverts() (gas: 33145)\n[PASS] test_transferInsufficientBalanceRevertsWithoutChanges() (gas: 122950)\n[PASS] test_transferMaximumUintReverts() (gas: 45134)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 75151)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 63069)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 68886)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 17.72ms (82.31ms CPU time)\n\nRan 1 test for test/MADToken.invariant.t.sol:MADTokenInvariantTest\n[PASS]\nMADTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchAuthorizationsAndSpending\n[PASS] invariant_fixedSupplyAndExactBalances\n MADTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-----------------+--------------+-------+---------+----------╮\n| Contract        | Selector     | Calls | Reverts | Discards |\n+=============================================================+\n| MADTokenHandler | approve      | 2794  | 0       | 0        |\n|-----------------+--------------+-------+---------+----------|\n| MADTokenHandler | transfer     | 2740  | 0       | 0        |\n|-----------------+--------------+-------+---------+----------|\n| MADTokenHandler | transferFrom | 2658  | 0       | 0        |\n╰-----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3624\n  Bound result 0\n  Bound result 0\n  Bound result 888084836560744261291376550\n  Bound result 113577536\n  Bound result 398\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 779440671386903547020116409\n  Bound result 1652\n  Bound result 0\n  Bound result 0\n  Bound result 5785\n  Bound result 0\n  Bound result 0\n  Bound result 892\n  Bound result 0\n  Bound result 803\n  Bound result 768814513930747402719875947\n  Bound result 0\n  Bound result 40\n  Bound result 0\n  Bound result 18\n  Bound result 0\n  Bound result 255\n  Bound result 0\n  Bound result 331645609163168\n  Bound result 5210\n  Bound result 0\n  Bound result 1572\n  Bound result 4314\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5731\n  Bound result 24576\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 146\n  Bound result 2\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.30s (2.29s CPU time)\n\nRan 2 test suites in 2.30s (2.31s CPU time): 33 tests passed, 0 failed, 0 skipped (33 total tests)\n","passed":true},{"durationMs":31,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MADToken.approve(address,uint256)\",\"MADToken.transfer(address,uint256)\",\"MADToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"LICENSE\":21,\"README.md\":68,\"dependencies.lock.json\":54,\"foundry.toml\":22,\"remappings.txt\":2,\"src/MADToken.sol\":16,\"test/MADToken.invariant.t.sol\":101,\"test/MADToken.t.sol\":445},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":366,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":201,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/MADToken.sol:11: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"b0f82c302bb491b820a382205985f8cb7611e858f6a46f5702463e0b52d73ca8","verifiedTreeHash":"fbedcb3cf6d24f9ca50e8e69762b4006884dda7b","verifierVersion":"0.1.0+fa479356"}]}