{"assessments":[],"deployments":[{"attestationHash":"4eeaed6a03bb2acf00fda2b7fedbcce0c57bf770d25622782c2ef3f1722bfcc7","chainId":11155111,"contracts":[{"address":"0xde8334d251c65a9007f290a7cb71f0c98887bc54","blockNumber":11893845,"name":"Seasons","role":"other","txHash":"0x2a68ba654318661a7922474d26719db715300db42481dc6e6558a364e02ca47d"},{"address":"0xe3717b69977d73b68aa2af798ddd4eec3609a4ed","blockNumber":11893845,"name":"CabalGate","role":"other","txHash":"0x2a68ba654318661a7922474d26719db715300db42481dc6e6558a364e02ca47d"},{"address":"0x04dd54ece5aa7771918f6c038f8e575bb774a699","blockNumber":11893845,"name":"PleaDistributor","role":"other","txHash":"0x2a68ba654318661a7922474d26719db715300db42481dc6e6558a364e02ca47d"},{"address":"0x2f04b2b697b6da6c1c4db8a01f3cd0b88574b852","blockNumber":11893845,"name":"PleaLaunch","role":"other","txHash":"0x2a68ba654318661a7922474d26719db715300db42481dc6e6558a364e02ca47d"},{"address":"0x2f4ad5c8b4cd47a80356e07ef47d8ae875e9c795","blockNumber":11893845,"name":"PLEA","role":"other","txHash":"0x2a68ba654318661a7922474d26719db715300db42481dc6e6558a364e02ca47d"},{"address":"0xd03e3fb2e916f8614891f68e2976c1481a6dc306","blockNumber":11893845,"name":"Laureates","role":"other","txHash":"0x2a68ba654318661a7922474d26719db715300db42481dc6e6558a364e02ca47d"}],"id":"3b03eacf-0b04-488d-9dfb-bab5b99d352a","manifestHash":"ba283e5d804478ffb31eb13bf7ae4b1f07f89018342c702c8933087f12a80e69","status":"live"}],"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":"4aca2460-33f9-477b-9480-cd229f874c9a","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"62e2c746703f7089c59050d0321c8c16f34450ad9ddb04a3b1aa65524e427d9d","dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","state":"accepted"},{"acceptedSubmissionHash":"127b329ad62019382210e5e2997696e4bf91ba520ae3435015a599b430b81c1b","dependsOn":["adapt_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":"0c9d859e2c4e30f91f92fdb611e03c6ca6bf8ba16facf70dafc0ad112c30cb04","dependsOn":["adapt_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":"3fbae4413b28d0a6e0ce53a94e2bfa113fa8a06cdfc34fdd8534c1af0901a663","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","state":"accepted"},{"acceptedSubmissionHash":"cea10b759d6a4100fc5881da0c251050959a864cb4f025e932695f658b8023cd","dependsOn":["adapt_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":"1fdd3fd57254c8b9fef0981d9144b973f815d8b52e6d9dced87c7abe6d9f95ad","dependsOn":["adapt_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":"2449e22023ce7bc490c3dbe8729bb8c91ec1794aed4857ff3b60e4d94e7651e1","dependsOn":["adapt_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":"49e0510793c0a8eb97a1e0102a02930565bf36f1fa7578dadaef0bad2640f2b4","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"89eed82d3322e017d40dc10618afac4c72013b0610334c583e6483562dc4fdf2","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"Launch PLEA test run 2 on Sepolia from this Foundry repository exactly as launch.json lists it: six contracts (PLEA, CabalGate, Seasons, Laureates, PleaDistributor, PleaLaunch), deployed in order in one transaction with the constructor arguments in launch.json. This is the code of launch #1242 (your accepted adaptation kept) plus four changes: a PLEA season bonus (PLEA.init mints 88% to the hook, 2% to Seasons, 10% to the distributor; each of the first four seasons pays 5,000,000 PLEA to its qualifying top 10 and burns the unpaid rest; flushToWall burns what is left; nobody can withdraw it), the cap decays to its floor in 25 days, a POOL4-style wall placement guard, and Intake v2 0xa43e6f75ee006411f79ac1c84120606c2330de82 (pleas ask with requestWithFailure; onPleaFailure only clears our own still-pending plea, emits PleaFailed and never moves value; expire() stays as the fallback). The cashback Stacker is imd/acc launch #1294 (0x0457276d7b036818b3eddc1a4a3fceda61e9314d), as launch.json lists. Audit the imported code and deploy it unchanged; fix only what the audit proves is a real bug, and keep every number as it is (fees, timings, panel 30, quorum 17, 5-hour seasons, 33-hour dead-man, START 1792162800, credit gas 1300000). Keep the full failure function and its event: on Sepolia the six-contract deploy may exceed 16,777,216 gas (launch #1242 used 81.8M in one transaction); the manifest test reports that margin instead of asserting it. PleaHook is not a launch.json entry: PleaLaunch.deployHook deploys it after launch with a salt mined off chain. Keep PLEA.setLauncher accepting either the deploy-transaction flag or PLEA's deployment block. Keep foundry.toml as it is, including [lint] lint_on_build = false.","parentJobId":null,"planHash":"36f9cbb77c6d5440e1d42aeed89e95e2a6f4074b4543b7cb9e6e75520063a59c","previousHash":"af70dfc161defd7638169d0974d2c3bf46b7dda8349af1856d20d62c78008ecf","projectId":"4aca2460-33f9-477b-9480-cd229f874c9a","publication":{"commit":"fb8c0ae57aab2c270b36a61720a2f567e5183e5f","deliveredAt":"2026-10-11T19:30:35.035Z","repoUrl":"https://github.com/identity-md-launches/launch-1311-launch-plea-test-run"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"1374d168d7a1b491bee6d3a6c71db9ae6cc2423d4fdf576e60602237562e20d5","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"4209f02ed21755328bafb72c182612d5350989b2450fea2dc4b3d716fd12e90f","device":"66ceb1fcb4b0b455","findings":[],"hash":"0ab100dd882f07b842f9bb9472d9a3b4e025b0c7d3b680c5a095d58ad9af511f","nodeId":"71215153-a217-4c6a-8834-04efa476bb09","outcome":"completed","summary":"I added two test files. `forge build` and the full `forge test` run pass: 272 tests passed, 0 failed, 1 skipped. The skipped one is the existing Sepolia fork suite, which only runs when `SEPOLIA_RPC_URL` is set. I didn't find a defect I could reproduce, so there is no `.imd-findings.json`. Nothing outside `test/` was touched, and nothing is committed.\n\n**`test/BonusInvariant.t.sol`**: the new 2% PLEA season bonus, which is value held by Seasons.\n- **Invariant suite** (128 runs × 64 calls): random approvals by 14 sellers, time passing, closes, the Cabal dying, PLEA donations, flushes and attempts to pull PLEA out of Seasons. One of the sellers is the gate itself, whose PLEA transfers fail while the Cabal is watching. Each close is checked against the top 10 recorded just before it: each rank gets its share, a bonus season pays out or burns exactly 5,000,000 PLEA, and seasons 4 onward pay no PLEA. The invariants are:\n  - Every bonus PLEA is still in Seasons, was paid to a winner, or was burned.\n  - Total supply falls only by what Seasons burned.\n  - Each bonus season not yet closed stays fully funded until the final flush.\n  - No wallet gets more than four first-place shares.\n  - Once flushed, the seasons stay finished.\n- **Edge tests**:\n  - Exactly 60 points qualifies and 59 doesn't.\n  - Only a wallet's best three pleas count.\n  - Ten qualifiers take the whole 5M and nothing is burned.\n  - An 11th wallet tied on points stays unpaid.\n  - A season can't be paid twice by closing again.\n  - Closing during the one-hour grace period is refused.\n  - A late approval counts if it's listed when the season closes, but recording it after the close is refused.\n  - If the Cabal dies during season 0, the other three seasons' bonuses are burned, and flushing again changes nothing.\n  - Bonus PLEA paid after the Cabal dies can be transferred freely.\n  - A fuzz test (512 runs) checks that, for any ranking, what is paid plus what is burned equals exactly 5M.\n\n**`test/GateFailureInvariant.t.sol`**: CabalGate's plea flow with Intake v2 failures, built on the real launch setup (`Fixture`).\n- **Each failure is checked in place**: it emits `PleaFailed` and clears only its own pending plea. It leaves no score or verdict, doesn't touch the dead-man clock or any cooldown, and moves no PLEA, IMD or oracle IMD for the seller or the gate. A failed appeal can be appealed again.\n- **Other failure paths**: a stranger's own request that fails while naming the gate isn't delivered, calls to the failure function from anyone but the Intake revert `NotIntake`, and a failure arriving after `expire()` is refused.\n- **Invariants** (64 runs × 64 calls): the gate never holds tokens, and oracle fees paid equal 0.5 × the number of requests. Each seller's open plea is theirs and is either pending or approved. A request id points to a plea exactly while that plea is pending. Only a signed verdict moves the dead-man clock, and once the Cabal is dead it stays dead.\n\n**One problem caught along the way:** both suites now include a fixed-sequence test that drives the random-call driver through every path it claims to cover. That test showed my first version of the gate suite was exercising nothing. Every plea reverted with `AmountTooLarge`, because 10% of a buyer's ~247M PLEA is over the 2.5M per-sell maximum, so the invariants passed vacuously. I capped the plea amount; the check now confirms pleas, failures, denials, appeals, approvals, sells and expiries all actually happen.\n\n**Not verified offline:** the gate's expiry check reads `requests(id)` from the live Intake and assumes the fourth value returned is the \"completed\" flag. Only the Sepolia fork suite covers that, and it was skipped here.","treeHash":"5cd01eb640cbb3367b7b8eba4b8807608c5ec976","usage":{"cachedInputTokens":1872170,"inputTokens":44,"model":"claude-opus-5-5","outputTokens":33503,"runtime":"claude","turns":23,"wallClockMs":1161791}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3bed38612db34f32","findings":[{"citation":"resolved","description":"CabalGate.factScore (src/CabalGate.sol:239-253) takes `latest = h.latestPrice()` and `ago = h.price24hAgo()` and awards 9 trend points when latest > ago*1.02, 5 when flat, 0 when down; `latest` also sets the P&L points. The README and the gate's NatSpec promise these prices are 'the hook's hourly checkpoints, never the spot price'. But `_checkpoint` is called from afterSwap (src/PleaHook.sol:524) with `currentSqrtPriceX96()` AFTER the swap, and only writes when `c.hour != hour`: the checkpoint of an hour is exactly the post-swap spot price of whoever trades first in that hour. Nothing stops the plea's own beneficiary (or a helper wallet, so the seller's cost basis is untouched) from being that first trade with a buy that lifts the price just above `ago * 102 / 100`, then calling submitSell in the same hour. The buy is a gain for the pumper (the PLEA is kept, only the 1.75% fee and price impact are spent), the trend reads 'up' for every plea opened that hour, and `need` (70 - factScore) drops by 4 points against a flat market and by 9 against a falling one (down 0 -> up 9). In a falling market, the state the Cabal is meant to be strict in, that 9-point swing turns a `CannotPass` (need 46+) into a passable plea at need 37+. The existing test test/Hook.t.sol:116 `test_factScoreUsesCheckpointsNotSpot` only shows a pump AFTER the hour's first trade is ignored; it never tests the first trade being the pump. Fix options that keep every number: checkpoint the price BEFORE the swap (call `_checkpoint(sqrtPriceBefore)` from beforeSwap, or in afterSwap use the pre-swap price saved in transient storage), so the hour's checkpoint is a price the first trader of the hour did not choose; and/or have the gate read the checkpoint of the previous hour rather than the current one.","line":926,"path":"src/PleaHook.sol","reproduction":"Fixture (test/utils/Fixture.sol, Sepolia chain id, mocks, past the 90-minute launch window). 1) buy(alice, 100e18). 2) skip(1 hours); buy(bob, 1e18) -> this hour's checkpoint, price `ago` = 471345743584764894368881 (X96). 3) skip(25 hours) so no trade exists in the current hour; price24hAgo() == latestPrice() == ago; gate.factScore(alice, balance/10) == 37 (trend flat, 5 pts). 4) carol (a helper wallet) buys 60e18 IMD: first trade of the hour, so afterSwap writes the post-swap price 482262814873440205388229 as the hour's checkpoint (ratio 102.3%). 5) gate.factScore(alice, same amount) == 41: trend flat(5) -> up(9). 6) vm.prank(alice); gate.submitSell(amount, text) stores need = 70 - 41 = 29 instead of 33. Expected: the fact score of a plea cannot be moved by a trade made in the same hour by the seller's side; actual: +4 points (or +9 when the market was down >2%) for one 60 IMD buy whose PLEA the helper keeps. Verified with test/scratch/Checkpoint.t.sol (passes on this code, printing before 37 / after 41).","severity":"medium","snippet":"    function _checkpoint(uint160 sqrtP) internal {\n        uint64 hour = uint64(block.timestamp / 1 hours);\n        Checkpoint storage c = ring[hour % 25];\n        if (c.hour != hour) {\n            uint256 p = _priceX96(sqrtP);\n            c.hour = hour;\n            c.priceX96 = p;\n            emit PriceCheckpoint(hour, p);\n        }\n    }","title":"Fact-score price checkpoint is the post-swap spot of the hour's first trade, so a seller's helper wallet sets the 24h trend (and P&L reference) right before pleading"},{"citation":"resolved","description":"At seed the hook approves the Stacker (imd/acc launch #1294, 0x0457...314d, a fixed external contract) for type(uint256).max IMD. The hook's IMD balance is not only the cashback in flight: `retainedImd` (trim proceeds, closed-wall IMD, appeal shares, Seasons' flushToWall) sits in the same balance between rebalances. A Stacker that pulled more than `amount` in `credit` would take the wall reserve. This is a dependency trust assumption, not a defect in this tree; an allowance of exactly `amount` before each credit (forceApprove inside _payCashback) would bound it at no change to the agreed numbers.","line":393,"path":"src/PleaHook.sol","reproduction":"State: after any trim or rebalance, hook holds retainedImd > 0 as ERC-20 IMD. Any swap -> _payCashback -> stacker.credit(trader, amount). The Stacker's transferFrom may pull up to the hook's full IMD balance because the allowance is unlimited. With the live Stacker behaving (pulling exactly `amount`, as the Sepolia fork suite shows), nothing is lost; the note records the trust boundary.","severity":"info","snippet":"        if (address(stacker).code.length != 0) imd.approve(address(stacker), type(uint256).max);","title":"Trust assumption: the hook gives the Stacker an unlimited IMD allowance over its whole balance, which includes the wall reserve"},{"citation":"resolved","description":"PleaLaunch reads PLEA.owner() once in its constructor and commits it into the hook's init-code hash; PleaHook stores it as an immutable `owner` that receives the 0.5% IMD fee and may seed early. PLEA and PleaDistributor are OZ Ownable with transferOwnership/renounceOwnership, so after a transfer the new owner controls `allow` and the Merkle root while the fee keeps going to the original address. Not a defect in the accepted design (the brief fixes the owner), recorded so the operator does not expect ownership transfer to move fees.","line":65,"path":"src/PleaLaunch.sol","reproduction":"Owner calls plea.transferOwnership(B). Any later swap: _payFees -> _payImd(owner, toOwner, ...) still pays the launch-time owner, hook.owner() != plea.owner().","severity":"info","snippet":"        address owner_ = IPLEAForLaunch(plea_).owner();\n        owner = owner_;","title":"PleaHook.owner (fee recipient) is frozen to PLEA's owner at launch; PLEA.transferOwnership does not move the 0.5% owner fee"}],"hash":"0c9d859e2c4e30f91f92fdb611e03c6ca6bf8ba16facf70dafc0ad112c30cb04","nodeId":"9a1081cf-eb80-4900-ba6c-8139107fab10","outcome":"completed","summary":"Review complete. The findings file is in place with 3 findings and a full coverage record (41 of 41 entry points answered).\n\n**What I found**\n\n- **Medium, PleaHook `_checkpoint` (src/PleaHook.sol:926).** The hourly price the fact score relies on is the post-swap spot price of whoever trades first in that hour. A seller's helper wallet can be that first trade with a small pump and then plead in the same hour. In the fixture, a 60 IMD buy whose PLEA the helper keeps raised alice's fact score from 37 to 41 before her plea, cutting her need by 4 points. In a falling market the swing is 9 points, enough to turn a plea the gate would refuse into a passable one. The README's \"never the spot price\" guarantee does not hold for the hour's first trade. Verified with a scratch test that passes on this code.\n- **Info, Stacker allowance (src/PleaHook.sol:393).** The hook grants the Stacker an unlimited IMD allowance, and the wall reserve sits in the same balance between rebalances. A trust boundary on imd/acc, not a defect.\n- **Info, frozen fee owner (src/PleaLaunch.sol:65).** The hook's fee recipient is PLEA's owner at launch and never moves, so a later ownership transfer does not move the 0.5% fee.\n\n**What I verified beyond reading**\n\n- All five live Sepolia dependencies in launch.json have code, the Intake prices the action at 0.5 IMD, and the `requestWithFailure` and `credit` selectors are present.\n- The project's Sepolia fork suite, which the previous pass had skipped, passes 17 of 17 tests against the live Intake v2, PoolManager, TestIMD and Stacker, including failure delivery and the `requests` getter decode.\n\n**Coverage.** I traced the full plea lifecycle, the oracle callback and failure paths, the gate sell through the hook, the cap and wall guard flow, seasons accounting and the bonus burn, and the launch sequence. Every entry point is marked `holds` except `afterSwap`, which carries finding 1. No static-analysis lead reproduced as a defect.","treeHash":null,"usage":{"cachedInputTokens":1726011,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":50727,"runtime":"claude","turns":30,"wallClockMs":1108468}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2dc755dfe7bd177c","findings":[{"citation":"resolved","description":"Economic Security / first-principles seam. `_checkAmount` (src/CabalGate.sol:385) only refuses `amount == 0`, so a plea for 1 wei is valid. In `factScore` that amount gives `shareBps == 0` and the maximum 18 share points, on top of the holding-time, P&L and trend points, so the smallest possible sell has the lowest `need`. `Seasons.record` counts any plea whose `result()` is Approved, Executed or Lapsed, so an approval that is simply left to lapse scores the same as a real sell, and `_payBonus`/`closeSeason` pay the IMD prize pot and the 5,000,000 PLEA season bonus to the top 10 by those points. The incentive the prize pot and the 2% bonus are meant to reward (writing pleas to sell) is therefore farmable for 0.5 oracle IMD per plea with no PLEA ever leaving the wallet, every 4 hours per wallet (the lapse cooldown), by any number of wallets that each bought once. On Sepolia the oracle asset is open-mint, so the cost is zero. The gate's own checks cannot tell such a plea from a real one; only the judges' subjective score stands between a holder and the prizes.","line":225,"path":"src/CabalGate.sol","reproduction":"Fixture (test/utils/Fixture.sol), default orientation. alice buys 100 IMD of PLEA; 7 days pass with the Cabal kept alive by bob's denied verdicts. Then: gate.factScore(alice, 1) == 46 (need 24) while gate.factScore(alice, bal*35/100) == 33 (need 37). alice calls submitSell(1, text); the oracle answers 24; the plea is Approved; alice never calls executeSell; 8 minutes later seasons.record(id) succeeds and seasons.topOf(0)[0].points == 24 while plea.balanceOf(alice) is unchanged. Expected: a plea that sells nothing (or 1 wei) should not be the cheapest route to prize points (a minimum share or amount in _checkAmount, or points scaled by the executed share). Actual: it is the best-scoring plea possible and earns full points without any sale. Probe: test/scratch/Probe2.t.sol (passes on this code, logging the numbers above).","severity":"low","snippet":"        uint256 shareBps = amount * 10_000 / bal;\n        if (shareBps <= 1_500) score += 18;","title":"Season prizes and the PLEA bonus are earned by 1-wei pleas that never sell: the fact score rewards the smallest amount and points do not depend on executing"},{"citation":"resolved","description":"Economic Security: dependency failure. The hook keeps its wall reserve (`retainedImd`, fed by trims, appeal fees, Seasons.flushToWall and fundWall) as plain IMD in its own balance, and at seed grants the external imd/acc Stacker (0x0457…314d, a third-party contract this repository does not control) an unlimited allowance over that balance. `_payCashback` only ever needs `amount` per credit, so the max approval is pure excess exposure: any bug, upgrade or compromise of the Stacker lets it `transferFrom(hook, …, retainedImd)` at any time, including outside swaps. After such a pull `retainedImd` no longer matches the balance: `_rebalance` computes `amount = retainedImd - KEEPER_TIP` and `_settleImd` reverts in `safeTransfer`, so `rebalance()` reverts for good (and `pendingRebalance()` stays true), the wall can never be redeployed, and the IMD meant for the buy wall is gone. Low because the Stacker is a trusted dependency by design; the fix (forceApprove(stacker, amount) right before each `credit`, or approving only the cashback just taken) keeps the agreed design and numbers.","line":393,"path":"src/PleaHook.sol","reproduction":"Fixture default setUp (seeded). alice approves the hook and calls hook.fundWall(1000e18): retainedImd == 1000e18 and imd.allowance(hook, stacker) == type(uint256).max. vm.prank(address(stacker)); imd.transferFrom(hook, 0xBEEF, 1000e18) succeeds: hook IMD balance 0 while retainedImd still 1000e18. hook.rebalance() now reverts (ERC20InsufficientBalance inside _settleImd) and keeps reverting. Expected: the Stacker can move at most the cashback it is being credited; actual: it can move every IMD the hook holds. Probe: test/scratch/Probe.t.sol::test_stackerApprovalCoversWholeHookBalance.","severity":"low","snippet":"        if (address(stacker).code.length != 0) imd.approve(address(stacker), type(uint256).max);","title":"Unlimited IMD allowance to the Stacker exposes the whole wall reserve and cashback float; a Stacker that pulls more than `amount` bricks rebalance()"},{"citation":"resolved","description":"Flow gap (execution × first principles). README: 'Prices come from the hook's hourly checkpoints, never the spot price'. `_checkpoint` writes `ring[hour % 25]` only when the hour has no entry yet, and afterSwap calls it with the price after the swap, so whoever makes the first trade of an hour chooses that hour's `latestPrice()` by sizing the trade. `CabalGate.factScore` reads `latestPrice()` for the P&L bucket (14/9/5/0) and `price24hAgo()` for the trend bucket (9/5/0) of every plea submitted during that hour. A buy that lifts the price just over 2% above the 24h-old checkpoint turns the trend bucket from +5 (flat) to +9 for all sellers (or, through a gate sell at the top of the hour, from +5 to 0 for everyone else), and moves the P&L bucket of holders near their basis, at the cost of one trade's 1.75% fee. The reference is a spot price at an instant the trader picks, which is what the design says it avoids. Low: the buyer keeps PLEA exposure and the score still passes through the judges; a pre-swap checkpoint or a time-weighted reference would remove the single-trade lever without changing any agreed number.","line":524,"path":"src/PleaHook.sol","reproduction":"Fixture default. bob buys 100 IMD; after 1 hour carol buys 1 IMD (checkpoint C0 = 471345743584764894368881 X96). Skip 25 hours: latestPrice() == price24hAgo() == C0, so every seller is in the 'flat' trend bucket (+5); gate.factScore(bob, bal/10) == 37. bob's 60 IMD buy is the first trade of the new hour: latestPrice() == priceX96() == 482262814873440205388229 == 102.3% of C0, i.e. the stored hourly reference is exactly the post-trade spot price and now clears the >2% 'up' bucket (+9) for every other seller pleading this hour. Expected: the hour's reference price is not settable by the trade that creates it. Actual: it equals that trade's closing price. Probe: test/scratch/Probe.t.sol::test_checkpointIsPostSwapPriceOfFirstTradeInHour.","severity":"low","snippet":"        _checkpoint(currentSqrtPriceX96());","title":"Hourly price checkpoint records the post-swap price of the hour's first trade, so one trader sets the fact-score reference for every seller that hour"}],"hash":"127b329ad62019382210e5e2997696e4bf91ba520ae3435015a599b430b81c1b","nodeId":"cf528799-fba6-46dd-afce-63567609a0a4","outcome":"completed","summary":"The findings file is valid, the snippets match the tree line for line, and the working tree shows no tracked changes.\n\n## Recap\n\n**Scope covered.** I audited the economics of the PLEA Sepolia test run 2 against the Economic Security, Invariant and Flow Gap guides: the 88/2/10 mint and Seasons bonus, the 25-day cap decay, the wall placement guard, the Intake v2 failure path, every value flow in the hook and Seasons, and the manifest's constructor arguments. The 256-test suite passes, and I also ran the 17-test Sepolia fork rehearsal against the live Intake v2, which passes. I confirmed on chain that the live Intake's `requests` getter has the four-word layout the gate decodes and that the PoolManager, Stacker and pool IMD addresses hold code.\n\n**Findings written to `.imd-findings.json`** (three, all low, each with a reproducing probe under `test/scratch/`):\n\n1. **Prize points without selling.** A 1-wei plea gets fact score 46 against 33 for a real 35% sell, so it has the lowest need. A lapsed approval scores the same as an executed one, so the IMD pot and the 20M PLEA bonus can be farmed for the oracle fee alone.\n2. **Unlimited Stacker allowance.** The hook grants the external Stacker a max IMD allowance at seed, exposing the whole wall reserve. After an over-pull, `rebalance()` reverts permanently.\n3. **Manipulable hourly checkpoint.** The hour's first trade stores its own post-swap price as the fact-score reference for every seller that hour. A 60 IMD buy moved the trend bucket for all other sellers.\n\n**No critical, high or medium defects were found.** The Seasons accounting cannot revert a swap, claims are always backed, the cap arithmetic stays within its budget, and the bonus has no withdrawal path. Coverage rows answer all 41 entry points plus four invariants and the manifest check. No repository file was changed.","treeHash":null,"usage":{"cachedInputTokens":2535644,"inputTokens":546,"model":"claude-fable-5-1","outputTokens":67754,"runtime":"claude","turns":38,"wallClockMs":1248104}},{"artifacts":[],"attempt":1,"bundleHash":"59b7914a0089bb0eb0c9cee96a84b9bfe3596d37a180e97ca25e8d48e2134a2c","device":"0476c44a80aa9574","findings":[],"hash":"132504759fd013103bb8cd00777fd7364457ba464d4eff8dcad9c1d5f3f5c438","nodeId":"25581a3d-23b0-4a50-9c05-33ad7818c66f","outcome":"completed","summary":"Done. launch.json is rewritten and verified, and it is the only changed file.\n\n**What I did**\n- Re-checked every constructor in the six accepted contracts against the manifest. Names, order, argument count and declaration order all match, so no argument changed.\n- Rewrote launch.json so this round actually produces a change, which is what the last attempt failed on. Addresses are now in the checksummed form the manifest test pins, and the notes now spell out each constructor's arguments, the retained behaviour, the post-launch hook step, and the measured gas.\n- Only the two owner arguments use `$owner`. Nothing is handed to the factory or the launch wallet, and no constructor calls a live external contract.\n\n**Checks**\n- Schema check passed: only the three allowed keys, string arguments, unique short names, backward-only contract references, notes under 4,000 characters.\n- `forge build` succeeded without changes to foundry.toml.\n- `forge test` passed 262 of 262 tests, with the Sepolia fork tests in `test/fork/` left out since they need network access.\n- `git status` shows launch.json as the only modified file.\n\n**Gas note**\nThe manifest test deployed exactly this manifest on an empty Sepolia chain and reported the margin without asserting it, as the brief requires:\n\n| Measurement | Value |\n|---|---|\n| Six-contract deploy gas | 17,229,747 |\n| Margin to the 16,777,216 cap | -452,531 |\n\nThe deployment service's simulation of the real factory transaction remains the authoritative gas check.","treeHash":"0039261a4484ce5cc21bf2134f03da500fdb1534","usage":{"cachedInputTokens":258927,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":5081,"runtime":"claude","turns":7,"wallClockMs":667283}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8d428b115b0ebd64","findings":[{"citation":"resolved","description":"Boundary x precision. `_updateWallGuard` treats every post-swap tick as a traded PLEA price and moves `wallGuardTick` at once to any lower one (line 921-922). Once the Cabal is dead, sells are free and run with sqrtPriceLimit = MIN_SQRT_PRICE+1 (or MAX-1). A sell larger than the IMD held by the market band and the wall exhausts all liquidity below the band and the swap ends at the pool's price limit, so `currentTick()` in `afterSwap` is TickMath.MIN_TICK (-887272) when PLEA is token0 (MAX_TICK-1 when it is token1). That empty-pool tick is not a price anything traded at, but the guard adopts it. From then on `_rebalance` (line 760-762 / 767-770) places the wall against the guard, which only recovers toward `refTick` at WALL_GUARD_TICKS_PER_DAY = 400 ticks per day. Concrete numbers (PLEA token0, 10 IMD reserve, 12 hours after the drain): allowed = 400*43200/86400 = 200, g = -887272+200 = -887072, upper = _alignDown(-887072) = -887100, lower = minTick = -887220. hi - lo = sqrtPrice(-887100) - sqrtPrice(-887220) = 4.33e9 - 4.30e9 = 2.6e7. `_liquidityForSingleSide` computes l = 1e19 * 2^96 / 2.6e7 = 3.0e40 > type(uint128).max = 3.4e38, so line 953 reverts InvalidLiquidity() and the whole `rebalance()` reverts (it is not the early `upper <= lower` return). The liquidity only fits uint128 once hi - lo > amount/2^32, i.e. once the guard is about 7,000 ticks above the extreme: ~17.5 days during which every `rebalance()` call reverts while `pendingRebalance()` stays true (no keeper can ever satisfy it). After that the wall is deployed at a tick ~766,000 below spot (a price e^-76 of spot), which can never fill, and the guard needs 766,000/400 = ~1,916 days (5.2 years) to return to the trading range. The same holds mirrored with PLEA as token1 (guard = 887272, lower = _alignUp(guard - allowed) at the top). Effect: every IMD the hook retains after a drain (pool fee share, trims, appeal fees, and the whole leftover prize pot that `Seasons.flushToWall` sends to `fundWall` after the last season) is either unreachable (rebalance reverts) or parked in a band that cannot buy PLEA, for years; the buy wall that is supposed to be the only support after the Cabal dies does not exist. The project's own `TradingPleaZeroInvariantTest` fails with this exact error (custom error 0x1fff9681 = InvalidLiquidity()) in the shrunk sequence advance,advance,buy,advance,advance,buy,freeSell,freeSell,buy,advance,rebalance.","line":921,"path":"src/PleaHook.sol","reproduction":"State: Sepolia timings (SEASON 18000, DEADMAN 118800), seeded pool, 91 minutes past the launch window. 1) alice buys with 100 IMD (band now holds ~98.5 IMD). 2) warp DEADMAN+1 so gate.cabalAlive() == false. 3) alice obtains 50,000,000 PLEA (one-leaf distributor claim) and sells it exact-in through a plain v4 router: the swap consumes the band's IMD and ends at MIN_SQRT_PRICE+1; hook.currentTick() == -887272 and hook.wallGuardTick() == -887272 (PLEA token0; 887271 / 887272 when PLEA is token1). 4) 1 hour later bob buys with 50 IMD, spot returns to about -120,560. 5) 12 hours later anyone calls fundWall(10e18) so pendingRebalance() is true, then rebalance(). Expected: the 10 IMD is deployed as a wall just below spot (POOL4 behaviour, wall.tickUpper within a few hundred ticks of spot). Actual: rebalance() reverts InvalidLiquidity() from line 953 (l = 3.0e40 > 2^128-1); it keeps reverting for ~17 days, then deploys the wall ~766k ticks below spot and crawls back at 400 ticks/day. Proof test (both orientations) reverts with InvalidLiquidity() on this tree and passes when out-of-range ticks (observedTick <= minTick or >= maxTick) are ignored by the guard.","severity":"high","snippet":"        int24 seen = _guardFor(observedTick);\n        if (pleaIsZero ? seen < g : seen > g) g = seen;","title":"Wall guard adopts the pool's price-limit tick after a draining sell: rebalance() reverts InvalidLiquidity (uint128 overflow) and the IMD reserve cannot be placed near the price for years"},{"citation":"resolved","description":"Boundary (hour edge) x invariant. `latestPrice()` is documented as 'the price at the first trade of that hour' (line 261) and CabalGate.factScore relies on checkpoints being insulated from the spot price ('never the spot price', CabalGate line 221, README line 69). But `_checkpoint` runs at the end of `afterSwap` with `currentSqrtPriceX96()` read after the swap, and `ring[hour % 25]` is only written when `c.hour != hour`, so the single trade that happens first in an hour stores its own post-impact price as the hour's price and nothing in that hour can change it. A buyer who makes the first trade of the hour therefore writes a spot price of their own making into the exact value `factScore` uses for the trend bucket (`latest > ago*102/100` = +9 instead of +5/0) and the P&L bucket (`value = heldPlea*latest`), and 24 hours later that same value is `price24hAgo` for every plea in that hour. Measured on the test fixture (Sepolia timings, 91 minutes after seed): pre-trade spot 453250947750297829343545 (X96), after a single 1,000 IMD buy at the first second of a new hour the post-trade spot is 648013053801819800035011 (+43%), and `latestPrice()` returns the post-trade value. Impact is bounded (at most the 9-point trend bucket and the 14/9/5 P&L bucket of a 0-55 fact score, at the cost of the buy's 1.5% fee and price impact), so low; but the stated guarantee does not hold at the hour boundary.","line":524,"path":"src/PleaHook.sol","reproduction":"State: seeded pool past the launch window; alice funded. 1) warp to the first second of a new hour (timestamp % 3600 == 0). 2) read hook.priceX96() = P0 (453250947750297829343545 on the fixture). 3) alice buys with 1,000 IMD; hook.priceX96() = P1 = 648013053801819800035011. Expected per the comment and README: hook.latestPrice() == P0 (the price at the first trade of the hour). Actual: hook.latestPrice() == P1, and no later trade in the hour changes it. Scratch test test/scratch/Checkpoint.t.sol logged these values.","severity":"low","snippet":"        _checkpoint(currentSqrtPriceX96());","title":"Hourly price checkpoint records the first trade's own post-swap price, so one buy at the top of the hour sets latestPrice (and, 24h later, price24hAgo) used by factScore"}],"hash":"1fdd3fd57254c8b9fef0981d9144b973f815d8b52e6d9dced87c7abe6d9f95ad","nodeId":"6a9f8bd7-740d-44c2-898b-ba6ab44d1083","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds two findings and a 44-row coverage record. The working tree is clean apart from the findings file and the proof test under `test/scratch/`.\n\n**What I found**\n\n1. **High. Wall guard adopts the pool's price-limit tick, then `rebalance()` reverts for weeks and parks the reserve years away from the price** (`src/PleaHook.sol:921`). After the Cabal dies, a sell larger than the IMD held by the market band runs the swap to `MIN_SQRT_PRICE+1`, so `afterSwap` observes tick -887272 and the guard moves there at once. Twelve hours later the guard has recovered only 200 ticks, so the wall band is a 120-tick sliver next to the extreme and `_liquidityForSingleSide` computes about 3e40 liquidity for 10 IMD, above `uint128`, so `rebalance()` reverts `InvalidLiquidity()`. It keeps reverting for about 17 days, then deploys the wall roughly 766,000 ticks below spot, and the guard needs about 5 years to walk back. Every retained IMD, including the leftover prize pot that `Seasons.flushToWall` sends to the hook, is unusable as a buy wall for that time. Both currency orientations reproduce. The project's own `TradingPleaZeroInvariantTest` already fails with this error. The proof test fails on the current tree in both orientations and passes when the guard ignores ticks outside the usable range (I verified that with a temporary patch and restored the file).\n\n2. **Low. Hourly checkpoint stores the first trade's own post-swap price** (`src/PleaHook.sol:524`). A single 1,000 IMD buy at the top of an hour moved the fixture's spot 43% and `latestPrice()` returned that post-trade value, contrary to the comment and the README's \"never the spot price\" claim. It bounds the fact-score trend and P&L buckets, so impact is small.\n\n**What I covered**\n\nAll 41 listed entry points have a row. I traced the swap fee split, the exact-in fee formula and its 1-wei cap, the cap-decay accounting units, the season fee and bonus arithmetic, the `accountedPot` invariant, the seed price and liquidity math in both orientations, and the guard's rate limiting. I ran the full non-fork suite once (255 pass, the one invariant failure above) and did not run the fork tests.\n\n**Not reached**\n\nStatic-analysis leads outside the math area (reentrancy ordering in `CabalGate._ask`, `abi.encodePacked` in `PleaLaunch`) were only checked enough to see they do not produce a numerical defect. The live Sepolia Stacker and Intake v2 ABIs were not verified against the chain.","treeHash":null,"usage":{"cachedInputTokens":3490595,"inputTokens":706,"model":"claude-fable-5-1","outputTokens":69599,"runtime":"claude","turns":36,"wallClockMs":1230772}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c722c2e9ac9aa084","findings":[{"citation":"resolved","description":"Not a permission bypass in this code: only the Stacker contract's own code can spend the allowance, and IStacker.credit pulls exactly `amount` from msg.sender. It is recorded as the one external dependency whose code, not this repository, bounds how much IMD can leave the hook. The hook's IMD balance is retainedImd (the buy wall's reserve, fed by the 0.25% pool share, appeal fees and fundWall) plus the cashback of the swap in flight. If imd/acc launch #1294 at 0x0457276d7b036818b3eddc1a4a3fceda61e9314d ever exposes a path that transfers from an arbitrary approver, or is upgradeable, the entire reserve is reachable without any call from the hook. The owner chose this Stacker in launch.json, so this is a documented trust assumption, not a defect to fix.","line":393,"path":"src/PleaHook.sol","reproduction":"State after PleaLaunch.seed(): imd.allowance(hook, 0x0457...314d) == type(uint256).max; hook.retainedImd() grows with every trade. Expected: the Stacker spends only the `amount` of each credit(trader, amount) the hook calls. Actual in this code: identical; the bound comes from the Stacker's code, which this review could not read on Sepolia within budget.","severity":"info","snippet":"        if (address(stacker).code.length != 0) imd.approve(address(stacker), type(uint256).max);","title":"Trust assumption: the hook grants the Stacker an unlimited IMD allowance over its whole wall reserve"},{"citation":"resolved","description":"closeSeason is permissionless and the caller chooses which pleaIds to record first. Once closed[season] is set, record() reverts SeasonClosed for that season, so an approved plea nobody recorded during the season or the 1-hour CLOSE_GRACE loses its points and its Laureate eligibility for good. Anyone may call record() at any time before the close, and a verdict always lands in the season running at callback time, so every plea has at least one hour of permissionless recording. This matches the NatSpec ('the seller has every reason to') and is reported only so the judge can confirm it is intended on the 5-hour Sepolia clock, where the grace is 20% of a season.","line":257,"path":"src/Seasons.sol","reproduction":"Sepolia timings (SEASON 18000, CLOSE_GRACE 3600). Alice's plea is approved at t0+17999 (season 0). Nobody calls seasons.record(id). At t0+18000+3600 Bob calls seasons.closeSeason([]) with an empty list. Then seasons.record(id) reverts SeasonClosed(0); Alice's points and any Laureate for that plea are never counted. Expected per the documented design: the same, with the seller responsible for recording within the grace hour.","severity":"info","snippet":"        if (!exists || !ended || block.timestamp < uint256(end) + CLOSE_GRACE) revert NotReady(season);","title":"Design note: an approved plea not recorded within one hour after its season ends is permanently excluded by whoever closes the season"}],"hash":"2449e22023ce7bc490c3dbe8729bb8c91ec1794aed4857ff3b60e4d94e7651e1","nodeId":"5f8d34f1-47d1-402e-82e0-fcb6877c9fc6","outcome":"completed","summary":"The review is complete and the findings file is written and validated.\n\n**Outcome.** No access-control, trust-gap or asymmetry defect survived tracing. The permission model of all six launch contracts plus PleaHook holds as designed, and the 247 existing tests plus my 8 scratch probes pass.\n\n**What I checked, per the Pashov Access Control, Trust Gap and Asymmetry guides:**\n- Every role and inline guard: launcher-only `init`, `begin` and `seed`; intake-only verdict and failure callbacks; pool-manager-only hook and unlock callbacks; Seasons-only Laureate minting; owner-only `allow`, root setting and early seed.\n- The sell gate from both sides: PLEA's transfer rule and the hook's `SellsOnlyViaGate` and exact-output refusal together keep PLEA out of the pool unless the gate or hook moves it. An allowlisted sender still cannot reach the pool or the gate.\n- Paired paths: `submitSell` versus `appeal` cooldowns, `expire` versus `onPleaFailure`, Approved versus Denied verdict writes, `record` versus `_tryRecord`, IMD prize versus PLEA bonus payout, `closeSeason` versus `flushToWall`. No write is mirrored on one side and missing on the other.\n- The manifest matches the brief's addresses and numbers for Sepolia test run 2.\n\n**Recorded in `.imd-findings.json`:**\n- Two info notes, not defects: the hook's unlimited IMD allowance to the Stacker as the one external trust assumption over the wall reserve, and the one-hour recording cutoff at season close as a design property to confirm on the 5-hour test clock.\n- 44 coverage rows: all 41 listed entry points, the manifest, and two invariants, each with a one-line reason.\n\n**Not reached:** the Stacker's bytecode on Sepolia was not read, so the allowance bound rests on its interface description. Math, economics and ranking logic were outside my area and left to the other specialists.","treeHash":null,"usage":{"cachedInputTokens":1278999,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":41291,"runtime":"claude","turns":30,"wallClockMs":1418348}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"39da99ded7f125c8","findings":[{"citation":"resolved","description":"The manifest rehearsal (test/LaunchManifest.t.sol:157, AtomicManifestTest) measures the one-transaction deployment of PLEA, CabalGate, Seasons, Laureates, PleaDistributor and PleaLaunch with the launch.json arguments at 17,190,214 gas, a margin of -412,998 to the EIP-7825 cap of 2^24. The README documents the overrun as about 21k, which understates it twenty-fold. Not a code defect and not blocking on this Sepolia branch: on 2026-10-11 two public Sepolia nodes (publicnode, drpc) accepted a 17,190,214-gas raw transaction into pool validation and rejected it only for insufficient funds, so the cap is not applied there. It is blocking for the mainnet branch, where the same tree cannot deploy in one transaction, and the brief's instruction to keep the full failure function and its event means the adapter must not expect to recover the margin by trimming onPleaFailure alone; the 413k has to come from somewhere else (for example PleaLaunch embedding PleaHook's creation code, src/PleaLaunch.sol:69).","line":165,"path":"README.md","reproduction":"Run `forge test --match-path test/LaunchManifest.t.sol -vv`. Expected per the README: margin about -21,000. Actual log: `six-contract factory deployment gas: 17190214` and `margin to the 16,777,216 mainnet cap: -412998`. On a chain that enforces EIP-7825 (Ethereum mainnet) a transaction with gas limit 17,190,214 is invalid and the launch cannot be mined; on Sepolia today it is accepted.","severity":"low","snippet":"This branch keeps the full Intake v2 failure function (explicit checks and the `PleaFailed` event); the six-contract deploy is about 21k gas over Ethereum's 16,777,216 per-transaction cap, which Sepolia does not enforce. `test/fork/ForkTestnet.t.sol` rehearses the whole run on a Sepolia fork against the live Intake v2:","title":"Six-contract launch transaction is 412,998 gas over the 16,777,216 per-transaction cap, not the ~21k the README states"},{"citation":"resolved","description":"While the Cabal lives every holder's transfer reverts CabalIsWatching (src/PLEA.sol:113-118) so that PLEA can leave a wallet only through CabalGate after a scored plea. `allow(account)` is an add-only, owner-only switch that removes a sender from that rule entirely: an allowed wallet can send PLEA to any address except the PoolManager and the gate, which includes a Uniswap v2/v3 pair, a Seaport-style OTC contract or a buyer's wallet, and so sell without a plea, without the 1.75% swap fee and without the cap trim while everyone else is gated. The allowance can never be revoked. This is a documented owner power in the accepted #1242 code, so it is reported as a trust assumption for the adapter and the final panel, not as a bypass by an unauthorised caller; it is the one path by which the 'only through the gate while the Cabal lives' guarantee in the README does not hold.","line":89,"path":"src/PLEA.sol","reproduction":"State: trading opened, Cabal alive, alice holds PLEA bought through the hook. 1) `vm.prank(alice); plea.transfer(bob, 1e18)` reverts CabalIsWatching. 2) `vm.prank(OWNER); plea.allow(alice)`. 3) `vm.prank(alice); plea.transfer(bob, 1e18)` succeeds (test/Token.t.sol:34-44, test_distributorAndAllowlistMaySend, shows exactly this). 4) Replace bob by a UniswapV2 pair address and call its swap: alice has sold without a plea. Expected by the README's rule: step 3 reverts for every holder; actual: it succeeds for any wallet the owner names, forever.","severity":"low","snippet":"    function allow(address account) external onlyOwner {","title":"PLEA.allow lets the owner exempt any wallet from the Cabal's sell gate for good"},{"citation":"resolved","description":"setLauncher has no caller check; it relies on being reached only inside the deployment transaction (transient flag) or, as a fallback the brief asks to keep, in PLEA's deployment block. The fallback means that if PLEA and PleaLaunch are ever deployed in separate transactions of the same block (the rehearsal mode in test/LaunchManifest.t.sol:184), any account whose transaction lands between them can call setLauncher with its own gate/seasons/laureates/distributor addresses. The genuine PleaLaunch constructor then reverts AlreadySet, the launch fails, and the attacker holds `launcher`, i.e. the right to call `init` and receive the 88/2/10 mint into contracts of its choosing. In the real launch the factory deploys all six in one transaction, so the window does not exist there; this is a note for the adapter not to use the non-atomic path on a public chain.","line":57,"path":"src/PLEA.sol","reproduction":"Block N, tx 1: factory deploys PLEA(owner). Block N, tx 2 (attacker, any EOA): `plea.setLauncher(attackerGate, attackerSeasons, attackerLaureates, attackerDistributor)` succeeds because block.number == deployBlock and launcher == 0. Block N, tx 3: factory deploys PleaLaunch(...) whose constructor calls setLauncher and reverts AlreadySet. Expected: only the launch's own PleaLaunch can register; actual: first caller in the block wins. test/LaunchManifest.t.sol:184 (test_separateConstructorCallsInDeploymentBlockStillWork) demonstrates that the same-block call is accepted from a different transaction.","severity":"low","snippet":"        if (flag != 1 && block.number != deployBlock) revert NotDeployTx();","title":"PLEA.setLauncher is open to any caller in PLEA's deployment block when the six contracts are not deployed atomically"},{"citation":"resolved","description":"The launch policy normally forbids minting after launch, contract creation after launch and configuration outside constructors. This tree does all three by design and the brief instructs to keep them: PleaLaunch.deployHook (src/PleaLaunch.sol:84, `create2`) deploys PleaHook after the launch transaction with an off-chain mined salt, then calls PLEA.init which mints the whole 1e9 supply (88% hook, 2% Seasons, 10% distributor) at that later time; PLEA.setLauncher (src/PLEA.sol:52) is an initializer-style registration; PleaDistributor.setMerkleRoot (src/PleaDistributor.sol:30) is owner configuration after deployment, with the 100,000,000 PLEA unclaimable until it is set and no deadline or sweep if it never is; PLEA._update (src/PLEA.sol:106-121) freezes every holder's transfers while the Cabal lives, which is the product itself. Reported so the adapter and the final review see them listed, not as defects: the mint is bounded to one call of exactly TOTAL_SUPPLY by `if (hook != address(0)) revert AlreadySet()` (src/PLEA.sol:78) and the committed init-code hash (src/PleaLaunch.sol:80), test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit covers it, and the runtime of all six contracts carries no DELEGATECALL, CALLCODE or SELFDESTRUCT.","line":82,"path":"src/PLEA.sol","reproduction":"After the launch transaction, totalSupply() == 0. Anyone calls `launch.deployHook(salt, initCode)` with the committed initCode and a salt whose address carries flags 0x2ACC: PleaHook is created and PLEA.init mints 880,000,000e18 to it, 20,000,000e18 to Seasons and 100,000,000e18 to the distributor. A second deployHook reverts HookAlreadyDeployed; a second init reverts AlreadySet. Expected under the generic policy: no mint after launch; actual and intended here: one mint of the full supply after launch.","severity":"info","snippet":"        _mint(hook_, TOTAL_SUPPLY * 88 / 100);","title":"Launch-forbidden patterns the brief explicitly keeps: supply minted after launch by a post-launch CREATE2 and PLEA.init"}],"hash":"3fbae4413b28d0a6e0ce53a94e2bfa113fa8a06cdfc34fdd8534c1af0901a663","nodeId":"2696dc0f-46ab-46cd-8fc3-39c1cd479504","outcome":"completed","summary":"The findings file is written and validated. All four entries match their tree lines, the compiled runtimes of all seven contracts contain no DELEGATECALL, CALLCODE or SELFDESTRUCT, and the workspace holds nothing but the findings file.\n\n## Scope\n\nFiles read in full: `src/PLEA.sol`, `src/CabalGate.sol`, `src/Seasons.sol`, `src/Laureates.sol`, `src/PleaDistributor.sol`, `src/PleaLaunch.sol`, `src/PleaHook.sol`, `src/OracleAttestation.sol`, `src/interfaces/*`, `launch.json`, `README.md`, plus the test fixtures and mocks. Nothing in the launch set was out of reach. The fork rehearsal was not run; instead I checked the live Sepolia addresses directly: the Intake v2, TestIMD, pool IMD, PoolManager and Stacker all have code, the signer is an EOA, the intake's `requests` getter returns the four words the gate decodes, the price is 0.5 IMD, and the Stacker exposes `credit(address,uint256)`. The existing 255 tests pass.\n\n**Severity counts:** 0 Critical · 0 High · 0 Medium · 3 Low · 1 Info\n\n## Findings\n\n- **[L-1] Launch transaction gas margin is -412,998, not the ~21k the README states.** The manifest rehearsal measures the six-contract deploy at 17,190,214 gas. Two public Sepolia nodes accepted a raw transaction of that gas limit today and rejected it only for lack of funds, so the brief's assumption holds for this run. The same tree cannot deploy in one transaction on mainnet, and trimming the failure function alone will not recover 413k.\n- **[L-2] PLEA.allow is an irrevocable owner switch out of the sell gate.** An allowed wallet can send PLEA to any address except the PoolManager and the gate, which includes a v2 pair or an OTC contract, and so sell without a plea or fee while every other holder is frozen. It is the documented power from launch #1242, reported as a trust assumption.\n- **[L-3] PLEA.setLauncher accepts any caller in PLEA's deployment block.** Only matters if the six contracts are ever deployed in separate transactions of one block; the factory's atomic deploy has no window. The brief asks to keep the fallback, so this is a note for the adapter not to use the non-atomic path on a public chain.\n- **[I-1] Brief-authorised patterns the launch normally forbids.** Supply minted after launch by `deployHook` plus `PLEA.init`, the initializer-style `setLauncher`, owner-set Merkle root, and the transfer freeze while the Cabal lives. All are bounded as the brief describes and are listed so the final panel sees them.\n\n## Coverage\n\nI traced every state-changing entry point and found no reproducible defect in the four new mechanisms. The season bonus pays exactly 5,000,000 PLEA per season over four seasons with unpaid shares burned, `flushToWall` cannot run before the last close, and no withdrawal path exists. The cap decay units are consistent and never let the cap fall below holdings or the 900k floor. The wall guard moves at once toward a lower PLEA price and at most 400 ticks a day toward a higher one, and the wall is always placed below spot, the reference tick and the guard. `onPleaFailure` only clears a still-pending plea of the gate's own request and moves no value; a foreign request naming the gate reverts `UnknownRequest`. The transfer rule, the hook's take-all-PLEA delivery on exact-input buys, the exact-output refusal, and the seller-only `executeSell` path together leave no way to move PLEA to a venue while the Cabal lives except through the owner allowlist. Two things could not be verified offline: whether the body keys `toleranceBps` and `guards` are accepted by the paid door's schema (a refused body would spend 0.5 IMD per plea and clear it through the failure function), and the Stacker's `credit` behaviour under a 1.3M gas stipend, which only the fork run exercises.","treeHash":null,"usage":{"cachedInputTokens":1860584,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":60444,"runtime":"claude","turns":31,"wallClockMs":1365781}},{"artifacts":[],"attempt":1,"bundleHash":"ac896c5355ced86131fab4fff31fac3eab398daab7de0e1290c6edb9379a5eb3","device":"3baa2091028c32c1","findings":[],"hash":"49e0510793c0a8eb97a1e0102a02930565bf36f1fa7578dadaef0bad2640f2b4","nodeId":"25581a3d-23b0-4a50-9c05-33ad7818c66f","outcome":"completed","summary":"I revised the manifest's notes and verified the whole tree. Only `launch.json` changed.\n\n**What was wrong.** The previous attempt submitted nothing, so it was rejected for producing no changes. The one genuinely stale item in the manifest was the gas figure in the notes. PleaLaunch embeds PleaHook's creation code, and the latest accepted commit changed the hook's wall-guard, so the deploy gas moved. The notes still quoted the older measurement.\n\n**What I changed.** The notes now state the current rehearsal measurement, which matches the README:\n\n| Item | Value |\n|---|---|\n| Six-contract deploy gas | 17,246,276 |\n| Over the 16,777,216 cap by | 469,060 |\n\nThe manifest test only reports that margin and does not assert it, as the brief requires.\n\n**What I confirmed unchanged.** The contract list and every constructor argument match the source constructors, one per parameter in declaration order: PLEA, CabalGate, Seasons, Laureates, PleaDistributor, PleaLaunch. Only the two owner arguments use `$owner`. There are no token, pool, or funding fields, and PleaHook is correctly absent since PleaLaunch deploys it later.\n\n**Checks.** The file has exactly the keys kind, contracts, and notes, every argument is a string, names are unique identifiers, every contract reference points backward, and the notes are 2,843 characters. The build succeeded and 266 of 266 tests passed. I skipped the fork tests under `test/fork/`, which need network access. The git diff touches only `launch.json`.","treeHash":"34193d655a32c837ec953b5dc279b4718691523c","usage":{"cachedInputTokens":319655,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":3849,"runtime":"claude","turns":8,"wallClockMs":271719}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"5061b3ff85c1f0c1","findings":[{"citation":"resolved","description":"Settles finding 07e31e695b0bfca6a4be1ff062929e781866b22daa0d081071841bf564c082e6: the fix does not hold. The revised _updateWallGuard (src/PleaHook.sol:936-939) adopts any observed tick strictly inside the usable range. That only excludes TickMath.MIN_TICK / MAX_TICK-1, the ticks a sell with the DEFAULT router limit stops at. After the Cabal dies sells are free and the seller supplies sqrtPriceLimitX96 themself. An exact-in sell larger than the IMD on the pool's IMD side (the market band plus any wall) empties it and then runs through the liquidity-free region to the seller's own limit; a limit one tick spacing inside the usable range (minTick+60 when PLEA is token0, maxTick-60 when PLEA is token1) satisfies the new check, so afterSwap -> _updateWallGuard(currentTick()) (line 529) moves wallGuardTick there at once, exactly as it adopted the extreme before the fix. Measured in both orientations: guard -120721 -> -887160 (PLEA token0) and 120721 -> 887161 (PLEA token1), with poolManager.getLiquidity(poolId) == 0 at that tick. Consequences are unchanged from the first round: _rebalance (lines 766-786) places the wall against the guard, the band between the guard and the tick extreme is 60-120 ticks wide at a sqrt price of ~4.3e9 (or ~1.46e48), _liquidityForSingleSide computes l ~ 3e40 for 10 IMD > type(uint128).max and line 970 reverts InvalidLiquidity(); rebalance() reverts for ~17 days while pendingRebalance() stays true, then deploys the wall ~766,000 ticks from spot where it can never fill, and the guard returns at 400 ticks/day (~5.2 years). The seller pays only the ordinary fee on the filled part (the exact-in sell stops at the limit, so the unfilled PLEA is not taken) and can buy back in the same block. Every IMD the hook retains after the drain (pool fee share, trims, appeal fees, Seasons.flushToWall) is either unreachable or parked. This is the state the pool spends the rest of its life in once the dead-man expires. Merged with write_foundry_tests finding da5d65c9 (same root cause, reproduced here). The accepted regression test test_wallGuardIgnoresTheEmptyPoolsPriceLimit only sells at the default extreme limit. Fix that keeps every number: do not feed _updateWallGuard a tick the swap reached with no active liquidity, e.g. in afterSwap call _updateWallGuard(currentTick()) only when poolManager.getLiquidity(poolId()) != 0 (verified: with that one-line change the attached proof passes in both orientations and the full suite still passes), or clamp the observed tick to the market band's near edge.","line":936,"path":"src/PleaHook.sol","reproduction":"State: Sepolia timings (SEASON 18000, DEADMAN 118800), seeded pool, 91 minutes past the launch window, either orientation (IMD etched at 1<<32 or at type(uint160).max-100). 1) alice buys with 100 IMD. 2) skip DEADMAN+1: gate.cabalAlive() == false; g0 = hook.wallGuardTick() (= -120721 PLEA token0 / 120721 PLEA token1). 3) the distributor transfers 50,000,000 PLEA to alice; alice sells it exact-in through a plain v4 router with sqrtPriceLimitX96 = TickMath.getSqrtPriceAtTick(pleaIsZero ? minTick+60 : maxTick-60). Observed: hook.currentTick() == that limit tick (-887160 / 887160), poolManager.getLiquidity(poolId) == 0, hook.wallGuardTick() == -887160 / 887161. Expected: hook.wallGuardTick() == g0 (a tick reached with zero liquidity is not a traded price). 4) 1 hour later bob buys with 50 IMD (spot is back near the market); 12 hours later alice calls hook.fundWall(10e18) (pendingRebalance() == true) and keeper calls hook.rebalance(). Expected: a wall whose near edge is within 1,000 ticks below spot (as the accepted fix delivers when the same drain stops at the extreme). Actual: rebalance() reverts InvalidLiquidity() (custom error 0x1fff9681) from src/PleaHook.sol:970 in both orientations. Proof: test/scratch/WallGuardPriceLimit.t.sol, `forge test --match-path test/scratch/WallGuardPriceLimit.t.sol -vv` fails on this code with 'the guard adopted a price limit reached through an empty pool: -887160 != -120721' (PleaZero) and '887161 != 120721' (ImdZero); with the guard assertion removed it fails with InvalidLiquidity() at rebalance(). It passes once afterSwap skips _updateWallGuard when the pool has no active liquidity.","severity":"high","snippet":"        if (observedTick > minTick && observedTick < maxTick) {\n            int24 seen = _guardFor(observedTick);\n            if (pleaIsZero ? seen < g : seen > g) g = seen;\n        }","title":"Wall guard still adopts a seller-chosen price limit reached through an empty pool: the fix for 07e31e69 only excludes the two extreme ticks, so rebalance() reverts InvalidLiquidity and the IMD wall is"}],"hash":"4f0b3c12c68985c6ad3de8dc05f5aa70f0f398b67e0cb9d194fc4e85bf253f45","nodeId":"abf80d06-d44b-4bc6-818d-4b453f18572e","outcome":"completed","summary":"Review settled. One earlier finding is not fixed; the other two are confirmed fixed; the disputed one is accepted as design.\n\n**Not fixed, still high (finding 1, with proof):** the wall placement guard. The revision made `_updateWallGuard` ignore only ticks at or beyond the usable range at `src/PleaHook.sol:936`. A seller after the Cabal's death picks their own price limit. An exact-in sell that empties the pool's IMD side runs through the liquidity-free region to a limit one tick spacing inside the range, which passes the new check, and the guard adopts it at once. I reproduced it in both currency orientations with the pool's active liquidity at zero:\n\n| Orientation | Guard before | Guard after the sell |\n| --- | --- | --- |\n| PLEA token0 | -120721 | -887160 |\n| PLEA token1 | 120721 | 887161 |\n\nAfterwards a 50 IMD buy, `fundWall(10e18)` and `rebalance()` revert with `InvalidLiquidity()`, the same outcome as the first round. The seller pays only the ordinary fee on the filled part. This merges the independent tester's finding of the same root cause. A one-line candidate fix, skipping the guard update when the pool has no active liquidity after the swap, makes the proof pass in both orientations and leaves the full suite green. I reverted that patch; no source file is changed.\n\n**Confirmed fixed:** the hourly checkpoint now records the pre-swap price from transient storage, and the Stacker is approved only for the cashback in flight with the allowance reset on a reverted credit. The author's regression tests for both pass, and the full suite passed 297 tests with only my scratch proofs failing.\n\n**Dispute accepted:** the 1-wei plea scoring reproduces but is the documented product and the brief keeps every number, so it is not restated.\n\nThe findings file holds one high finding with its self-contained proof at `test/scratch/WallGuardPriceLimit.t.sol` and 44 coverage rows answering all 41 entry points plus three invariants. The only other changes in the revision, the added `agreed < quorum` check and the checksum casing in the manifest, read correctly.","treeHash":null,"usage":{"cachedInputTokens":1982104,"inputTokens":610,"model":"claude-fable-5-1","outputTokens":21236,"runtime":"claude","turns":20,"wallClockMs":580936}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"004eae350f695d24","findings":[],"hash":"51b0700c0e906497c7c3aa4edacb37acc3b90a19a48f52108f76895926c17846","nodeId":"fed5a193-b80d-491d-8ac1-bcb135047f78","outcome":"failed","summary":"This content was flagged for possible cybersecurity risk. If this seems wrong, try rephrasing your request. If you’re doing authorized security work that requires more cyber permissive safeguards, apply for Daybreak access via https://platform.openai.com/settings/organization/status-and-access before retrying.","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":"gpt-6-astra","outputTokens":0,"runtime":"codex","turns":7,"wallClockMs":673862}},{"artifacts":[],"attempt":1,"bundleHash":"834fd44e547ea1862c9d0873d7c73b1a9b7c355f7ae034050523fa6d63cabc64","device":"0e3b71e2ffcd200b","findings":[{"description":"The revision fixed reviewer finding 07e31e69 by making _updateWallGuard ignore an observed tick at or beyond the usable range (observedTick > minTick && observedTick < maxTick). That condition only excludes the two extreme ticks. After the Cabal dies, sells are free and a seller chooses sqrtPriceLimitX96 themself: an exact-in sell large enough to empty the pool's IMD side then runs through the liquidity-free region to the seller's limit, and a limit one tick spacing inside the usable range (minTick + 60 when PLEA is token0, maxTick - 60 when PLEA is token1) satisfies the new condition. The guard adopts that tick at once (it is the 'safe direction'), exactly as it adopted the extreme before the fix, with the same consequences: rebalance() reverts InvalidLiquidity because the band between the guard and the tick extreme is too narrow for a uint128 liquidity, and once it stops reverting the wall is parked ~766k ticks below the market with the guard returning at 400 ticks a day (over five years). The wall reserve (retainedImd, fed by the 0.25% pool share, trims, appeal fees and fundWall) is then not deployable as the IMD buy wall. The seller pays only the ordinary trade (they receive the pool's IMD for their PLEA, minus the 1.75% fee) and can buy back in the same block; nothing in the sell has to be left at the far price. While the Cabal lives the gate's own sell uses the extreme as its limit, so this path opens the moment the dead-man expires, which is the state the pool spends the rest of its life in. Expected: a tick the swap reached with zero active liquidity is not a price PLEA traded at and must not move the guard (for example, ignore the observed tick when poolManager.getLiquidity(poolId) == 0 after the swap, or clamp the guard to the market band's edge the sell actually traded down to). Actual: the guard moves to the seller's limit. The accepted regression test test_wallGuardIgnoresTheEmptyPoolsPriceLimit only sells at the default extreme limit and so does not see this.","line":936,"path":"src/PleaHook.sol","reproduction":"Default fixture (either currency orientation). 1) buy 100 IMD of PLEA; 2) skip DEADMAN + 1 so plea.restricted() is false; 3) give a seller 50,000,000 PLEA from the distributor; 4) seller swaps exact-in 50,000,000 PLEA for IMD with sqrtPriceLimitX96 = TickMath.getSqrtPriceAtTick(pleaIsZero ? minTick + 60 : maxTick - 60). Observed: hook.currentTick() == that limit tick (strictly inside the usable range), poolManager.getLiquidity(poolId) == 0, and hook.wallGuardTick() moved from -120721 (PLEA token0) / 120721 (PLEA token1) to -887160 / 887161. Expected: wallGuardTick unchanged. 5) One hour later a 50 IMD buy brings the price back to the market; 12 hours later fundWall(10e18) and rebalance(): observed revert InvalidLiquidity(); expected a wall whose near edge sits within 1,000 ticks below spot (as the accepted fix delivers when the same drain stops at the extreme instead). Proof test: test/scratch/WallGuardPriceLimitProof.t.sol fails on this code with 'the guard adopted a price limit reached through an empty pool: 887161 != 120721'.","severity":"high","title":"Wall placement guard still adopts a seller's price limit reached through an empty pool (the fix only excludes the usable-range extremes)"}],"hash":"5cb439e1d44697a0b63e23139f06d75e2f0ec9ec0acb9c817f66c67a8b76c46d","nodeId":"71215153-a217-4c6a-8834-04efa476bb09","outcome":"completed","summary":"The findings file is in place at the repository root (excluded from git by the harness, as intended), the deliverable test paths are the only tracked changes, and the full suite is green. Work is complete.\n\n## Recap\n\n**Result:** `forge test` passes with 297 tests and the optional fork suite skipped. One high-severity defect in the revised hook is reported in `.imd-findings.json` with a self-contained failing proof.\n\n**The finding (high): the wall-guard fix is incomplete.** The revision made the guard ignore an observed tick at or beyond the usable range, closing the reviewer's drain-to-the-extreme case. But after the Cabal dies a seller picks their own price limit. A sell that empties the pool's IMD and names a limit one tick spacing inside the range runs through the empty region to that limit, the guard adopts it at once, and `rebalance()` then reverts with InvalidLiquidity, the same outcome the fix was meant to prevent. The seller pays only an ordinary trade and can buy back in the same block. The proof in `test/scratch/WallGuardPriceLimitProof.t.sol` fails on the current code in both currency orientations and expects the guard to ignore a tick reached with zero active liquidity.\n\n**Tests added:**\n- `test/HookRevision.t.sol`, run in both orientations, covers the three hook fixes adversarially: the hour's checkpoint is the found price for any trade size and a same-hour pump cannot move a plea's fact score; a credit that burns all gas or a Stacker that pulls double leaves no allowance and cannot reach the wall reserve; repeated drains to the extreme never move the guard, the guard climbs at most 400 ticks a day, and a sell that stops where the market has liquidity is followed with the wall placed right below it.\n- `test/TradingInvariant.t.sol` gained an invariant that the Stacker never holds a standing allowance across random call sequences.\n\n**Left alone:** the previously accepted bonus and gate-failure invariant files still pass unchanged, and the implementer's own quorum fuzz test already covers the gate change.","treeHash":"0a5cced7d5ef379522134642880885133481cb6a","usage":{"cachedInputTokens":2691418,"inputTokens":930,"model":"claude-fable-5-1","outputTokens":49985,"runtime":"claude","turns":30,"wallClockMs":1606820}},{"artifacts":[],"attempt":1,"bundleHash":"bbf47393fb8f4c34596b16b4f789a430ef7536747b434b5841abf50e2612fe15","device":"5061b3ff85c1f0c1","findings":[],"hash":"62e2c746703f7089c59050d0321c8c16f34450ad9ddb04a3b1aa65524e427d9d","nodeId":"fed5a193-b80d-491d-8ac1-bcb135047f78","outcome":"completed","summary":"The responses file is in place and excluded by the harness's own git exclude list, as expected. The work is complete.\n\n**Finding 356e430a reproduced and fixed.** A free-trading sell with a seller-chosen price limit one spacing inside the usable range drained the market band, stopped at a tick with zero active liquidity, and the guard adopted it in both orientations (−120721 to −887160 with PLEA as token0, 120721 to 887161 with PLEA as token1). The previous fix only excluded the two extreme ticks.\n\n**The change**, in `src/PleaHook.sol`:\n- `_updateWallGuard` now adopts an observed tick only when it is strictly inside the usable range and the pool has active liquidity at it. A tick reached with no liquidity is where a swap stopped for lack of IMD, not a traded price.\n- The check sits inside `_updateWallGuard`, so it covers both the swap path and the rebalance path. The time-paced return toward the reference tick, the band geometry and every number are unchanged.\n\n**Tests**, in `test/Hook.t.sol`, running in both orientations:\n- The empty-pool test replays the reviewer's sequence with the interior limit through a new limit-taking sell on the mock router. It fails on the accepted code and passes with the fix, ending with a wall placed within 1,000 ticks below spot.\n- The in-band test holds a pump for 30 days, then sells to a limit 600 ticks below spot where liquidity is active, and checks the guard still drops at once. It passes on both the old and new code, pinning the behaviour the fix must keep.\n\n**Verification.** The build passes and the full suite runs 268 tests with 0 failures and the fork suite skipped. All seven runtimes scan clean for forbidden opcodes, and the hook runtime stays under the size limit. The manifest rehearsal reports the mainnet-cap margin as before:\n\n| Measure | Value |\n| --- | --- |\n| Six-contract deployment gas | 17,246,276 |\n| Margin to 16,777,216 | −469,060 |\n\nADAPTATION.md and the README describe the change and one transient state left alone: while the pool sits at a drained interior tick before the next buy, a rebalance reverts rather than placing a wall there. The reviewer's answer is in `.imd-responses.json` with verdict fixed.","treeHash":"87aac6da8961eb7ed2fe5806ca0575aec5e7861e","usage":{"cachedInputTokens":2385584,"inputTokens":898,"model":"claude-fable-5-1","outputTokens":25738,"runtime":"claude","turns":40,"wallClockMs":844961}},{"artifacts":[],"attempt":1,"bundleHash":"68b39015a440f78f98bbd927197525ac654e14dff038e1fcdb3646de15bd3220","device":"b3e0a28d5c3d1a63","findings":[],"hash":"7929138400aaeabfcdb9431cbe723fa150e6ee02ec550f3ca46fb0c3deaa55fe","nodeId":"fed5a193-b80d-491d-8ac1-bcb135047f78","outcome":"completed","summary":"Fixed wall price tracking, checkpoint timing, and Stacker allowance exposure. Preserved the documented tiny-plea reward policy.\n\nValidation: `forge build` passed; **285 tests passed, 0 failed, 1 skipped**. All 10 isolated launch checks passed.\n\nAll eight findings are answered in `.imd-responses.json`; changes and verification are documented in `ADAPTATION.md`. Protected configuration and launch.json remain unchanged.","treeHash":"b86fbeefaf2174fad75e7340c6a87b8274922e36","usage":{"cachedInputTokens":6493440,"inputTokens":172115,"model":"gpt-6-astra","outputTokens":51285,"runtime":"codex","turns":14,"wallClockMs":2180836}},{"artifacts":[],"attempt":2,"bundleHash":"befaf3b0c4bc9265ffc2a82bb76ffda45ec6b4bc61e7b4352302ce0bc46618fa","device":"d6415252dcd668d9","findings":[],"hash":"7bb870797eed3b1db7b44242fcf169894080aa09e1e7de02ac2044e74c0c943f","nodeId":"25581a3d-23b0-4a50-9c05-33ad7818c66f","outcome":"completed","summary":"Updated [launch.json](/home/imd/.identitymd-3/work/4aca2460-33f9-477b-9480-cd229f874c9a/25581a3d-23b0-4a50-9c05-33ad7818c66f/launch.json) with clearer deployment notes, preserving all six contracts and constructor arguments.\n\n- Schema and compiled ABI checks passed.\n- `forge build` passed.\n- `forge test`: 257 passed, including the protected harness; Sepolia fork suite skipped without RPC configuration.\n- Deployment rehearsal: 17,204,975 gas; margin reported as requested.\n\nOnly `launch.json` changed.","treeHash":"a712fe1448b15d84db65ec448a2b680d8fe2057e","usage":{"cachedInputTokens":821120,"inputTokens":78530,"model":"gpt-6-astra","outputTokens":7457,"runtime":"codex","turns":5,"wallClockMs":264404}},{"artifacts":[],"attempt":3,"bundleHash":"49ff9eb3ee1849c5ddd59c87b9b9a933a88a5e478bca73874752d12b1f0bf33c","device":"03845cacb54c3a73","findings":[],"hash":"85a5fda62cb6ef7517ca7d4a8c5c728b9ec0c39fec883c5952aa171283222fe5","nodeId":"fed5a193-b80d-491d-8ac1-bcb135047f78","outcome":"completed","summary":"All 262 tests pass with the fork suite skipped, and the build is current. The work is complete.\n\n**Outcome.** The three reviewer findings that held are fixed in the hook, each with a regression test that runs in both currency orientations. The fourth is answered as disputed. All answers are in `.imd-responses.json` in the repository root. The verifier's own full-suite run and my final run both pass.\n\n**Changes made**\n\n- **Wall guard after a draining sell** (high, fixed). In `src/PleaHook.sol` the guard now adopts an observed tick only when it lies strictly inside the usable tick range. A tick at or beyond that range is the pool's price limit after a sell that exhausted the IMD side, not a price PLEA traded at. The regression test replays the reviewer's exact sequence and checks the guard does not move on the drain and the wall deploys within 1,000 ticks below spot.\n- **Hourly price checkpoint** (medium, fixed). The swap hook saves the pre-swap sqrt price in transient storage and the checkpoint records that price, so the hour's reference is what the first trade found, not what it made. The test checks a later-hour pump leaves the latest price, the 24-hour price and the gate's fact score unchanged while spot moves. The README states the remaining limitation: a pump held as the last trade of the previous hour still becomes the next hour's checkpoint.\n- **Stacker allowance** (low, fixed). The unlimited approval at seed is gone. Each credit is preceded by an approval for exactly the cashback and the allowance is reset to zero if the credit reverts. The test checks the Stacker cannot pull a funded wall reserve and no allowance remains after a credited or a reverted credit.\n- **1-wei plea** (low, disputed). It reproduces, but it is the documented accepted design, and each proposed remedy adds a number the brief does not give or changes the accepted scoring. Recorded in ADAPTATION.md as an open design point for the requester.\n\n**Numbers unchanged.** Fees, timings, panel 30, quorum 17, season and dead-man lengths, START, credit gas, and the 400 ticks per day guard pace all stay as they were. The README and ADAPTATION.md describe each change and the measured six-contract deployment gas, which rose slightly because PleaLaunch embeds the hook's creation code.\n\n**One note on the process.** The first background test run was stopped by its own time limit mid-compile, and the first draft of the checkpoint test compared against the wrong earlier price. Both were corrected, and the final run is clean.","treeHash":"7099ac09007c30c3550e2fe8ef008381434832fe","usage":{"cachedInputTokens":2828414,"inputTokens":588,"model":"claude-fable-5-1","outputTokens":43324,"runtime":"claude","turns":53,"wallClockMs":2730340}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fb1af3f11ddf6470","findings":[],"hash":"87742939897748680743c207cf8e5431cf93eee03db72483b69ef38498eae9ec","nodeId":"25581a3d-23b0-4a50-9c05-33ad7818c66f","outcome":"failed","summary":"the task produced no changes; the agent's last message was: I didn't change anything: the `launch.json` already in the tree matches the accepted code and the brief. `forge build` succeeded and `forge test` passed 256 of 256 tests (I left out the Sepolia fork tests in `test/fork/`, which need network access).\n\n**Format.** The file has only `kind: \"evm_contracts\"`, `contracts` and `notes`. Every constructor argument is a string, the notes are 1,536 characters, and the six names are unique, short identifiers.\n\n**Order and arguments.** The contracts are listed in dependency order: PLEA, CabalGate, Seasons, Laureates, PleaDistributor, PleaLaunch. Each one's arguments match its constructor in the source, one per parameter and in declaration order:\n- **PLEA** takes `$owner`.\n- **CabalGate** takes PLEA, Intake v2 `0xa43e6f75…de82`, the oracle fee asset `0x44a1…f89a`, TestIMD `0x2B69…1E82`, the oracle signer `0x5598…2982`, 18000-second seasons and the 118800-second dead-man.\n- **Seasons** takes PLEA, CabalGate and TestIMD.\n- **Laureates** takes PLEA.\n- **PleaDistributor** takes PLEA and `$owner`.\n- **PleaLaunch** takes the five earlier contracts, the Sepolia v4 PoolManager `0xE03A…3543`, TestIMD, the #1294 Stacker `0x0457…314d`, credit gas 1300000 and START 1792162800.\n\n**Matches the brief.**\n- Only owner arguments use `$owner`. Nothing hands ownership to `msg.sender` or `tx.origin`.\n- There are no token, pool or funding fields.\n- PleaHook is correctly left out; PleaLaunch deploys it later.\n- The constructors weren't touched by the latest accepted commit, which only tightened the signed-quorum check in `CabalGate` and changed a comment in `PLEA`.\n- The README's Sepolia table and the manifest test's fixed values agree with the manifest.\n\n**Gas.** `test/LaunchManifest.t.sol` deploys exactly this manifest from an empty Sepolia chain. It used **17,204,975 gas**, 427,759 over the 16,777,216 cap. As the brief requires, the test only reports that margin and doesn't fail on it. If Sepolia enforces that cap per transaction, the one-transaction deploy won't fit, and the deployment service's simulation is what will show it.","treeHash":null,"usage":{"cachedInputTokens":298934,"inputTokens":16,"model":"claude-opus-5-5","outputTokens":3088,"runtime":"claude","turns":9,"wallClockMs":529563}},{"artifacts":[],"attempt":1,"bundleHash":"d7c4528de0e8ab16ac927199970e92d9ad309f279abfc720f11cafbfc4f5ad6f","device":"11e4593175677f7e","findings":[{"description":"The second revision made _updateWallGuard ignore a tick the pool sits at with no active liquidity, and ADAPTATION.md states that while the pool sits at such an interior drained tick rebalance() reverts InvalidLiquidity. That holds only next to the tick extreme, where the band [minTick, spot] is too narrow for a uint128. _rebalance (lines 764-776 and 779-784) takes spot = currentTick() and uses it directly as the band's edge: edge = min(spot, refTick), then min(edge, guard). When spot is a drained tick far below the market the guard never matters, because spot is already the lowest of the three, and the band is placed there. Precondition: a rebalance is pending (retainedImd + retainClaims >= WALL_THRESHOLD, from appeal fees, the 0.25% pool share or Seasons.flushToWall) and no wall is deployed yet, which is the state before every first rebalance (the keeper tip only pays for at least 100 IMD of work, so small reserves wait). After the Cabal's death a seller empties the market band's IMD and continues through the liquidity-free region to any limit they choose (no PLEA is taken and no IMD is paid in that region), calls rebalance() at that tick, and buys back the IMD they received in the same block. The market returns to where it was; the whole reserve is deployed as a wall whose near edge is tens or hundreds of thousands of ticks below the market, where nobody sells, until a later rebalance becomes pending and is called while spot is back at the market. The guard the revision added is not consulted because spot itself is the drained tick. The seller's cost is the swap fees of the round trip through the market band's IMD (about 3.5% of it), the same order as the free parked-wall finding this revision set out to fix, and the sequence can be repeated whenever a rebalance is pending while the pool has a liquidity-free region below the market, which the parked wall itself leaves in place (it spans from the extreme only up to the drained tick). No funds are lost; the buy wall's support is removed for the duration. Suggested fix, keeping every number: in _rebalance refuse to place a band while poolManager.getLiquidity(poolId()) == 0 at spot (return without acting, so rebalance() reverts RebalanceNotNeeded as the notes assume), or clamp the edge to the guard and refTick instead of a spot the pool has no liquidity at.","line":764,"path":"src/PleaHook.sol","reproduction":"Fixture as test/utils/Fixture.sol (Sepolia chain id, 33-hour dead-man, 300k credit gas), PLEA token0; the mirrored orientation behaves the same with the signs flipped. 1) alice buys 300 IMD; alice fundWall(50e18): pendingRebalance() == true, wall.liquidity == 0. 2) skip(DEADMAN + 1): plea.restricted() == false. 3) distributor transfers 100,000,000 PLEA to the attacker. market() = [-120720, maxTick]; spot = -119579; wallGuardTick = -120721. 4) attacker: router.sellExactInLimit(100_000_000e18, hookData, getSqrtPriceAtTick(-150720)) receives 291.13 IMD; currentTick() == -150720; poolManager.getLiquidity(poolId()) == 0; wallGuardTick still -120721 (the guard correctly ignores it). 5) attacker: hook.rebalance() succeeds: wall = [-887220, -150720], wallImd = 55.90 IMD (the entire reserve including the redeemed claims), retainedImd = 0.01 IMD. 6) attacker: router.buyExactIn(291.13e18): spot back at -119609; the attacker's net position is -1.61M PLEA (about 10 IMD of fees) and 0 IMD. Expected: no wall deployed at a tick without active liquidity (ADAPTATION.md: rebalance() reverts there), or a wall placed against the market. Actual: the wall's near edge is 31,111 ticks (price divided by 22) below spot. With a limit of -220720 the gap is 101,131 ticks; with -420720 it is 301,111 ticks and the rebalance still succeeds (wall liquidity 7.6e28, under the uint128 limit). With a 5,000 IMD reserve the same sequence parks 5,005.9 IMD. The proof fails on the current code with `31172 >= 1000` and passes once the band is not placed at a drained tick (or is placed against the market).","severity":"medium","title":"rebalance() deploys the whole IMD reserve at a seller-chosen drained tick, bypassing the wall placement guard"},{"description":"The guard adopts any observed tick that is inside the usable range and has active liquidity. Once a wall is deployed it spans from the tick extreme up to just below spot, so every tick a sell can reach has the wall's liquidity and counts as a traded price. A trader can therefore sell PLEA through the wall to a deep tick and buy it back in the same block: the PLEA and IMD round-trip, only the fees (0.25% PLEA burn and 1.75% IMD each way) are lost, the market ends where it started, but the guard stays at the deep tick and the next rebalance() places the whole wall there. The guard then needs depth / 400 days to climb back. This follows from the accepted POOL4-style rule that the guard drops at once to any lower traded price, and the price was momentarily traded, so it is reported as a design limitation rather than a bug: the design treats a price touched and reversed inside one block as a price PLEA sold down to. The cost is proportional to the wall's depth (the PLEA needed scales with the wall's liquidity), so it is griefing at a material price, not a free lever. A possible mitigation that changes no number: adopt a lower tick only from the previous block's closing tick (as refTick already uses curBlockTick), so a round trip inside one block leaves the guard alone; or pace downward moves by the IMD the wall actually spent and burned at rebalance.","line":938,"path":"src/PleaHook.sol","reproduction":"Fixture as test/utils/Fixture.sol, PLEA token0. alice buys 300 IMD and fundWall(100e18); skip(DEADMAN + 1); bob buys 1 IMD; rebalance(): wall = [-887220, -120720], wallImd = 104.43 IMD. One hour later spot = -119576, wallGuardTick = -120705. distributor sends carol 100,000,000 PLEA. carol: sellExactInLimit(100_000_000e18, hookData, getSqrtPriceAtTick(spot - 30000)): all 100M PLEA are spent before the limit, currentTick() = -147331, getLiquidity(poolId()) = 4.37e22 (the wall), wallGuardTick = -147331. carol: buyExactIn(367.77e18, the IMD received): spot = -119554, wallGuardTick still -147331; carol's net is -2.37M PLEA (about 15 IMD) and 0 IMD. One hour later rebalance(): wall near edge = -147360, 27,806 ticks below spot, about 70 days of climb at 400 ticks a day. With a limit 10,000 ticks down: 59.3M PLEA round-tripped, net -1.98M PLEA, wall parked 10,051 ticks below spot for about 25 days. Expected (README): the wall is placed just below the price it protects; actual: the wall is parked at a price that held for one block.","severity":"low","title":"A same-block sell-and-buy-back through the deployed wall drags the placement guard down by any depth the trader's PLEA reaches"}],"hash":"89eed82d3322e017d40dc10618afac4c72013b0610334c583e6483562dc4fdf2","nodeId":"71215153-a217-4c6a-8834-04efa476bb09","outcome":"completed","summary":"The revision is complete. The suite passes against the updated hook, I extended my revision tests to the second wall-guard change, and I reported one defect that the change did not close.\n\n**What changed since my last round.** The other contributor's second revision made `_updateWallGuard` adopt an observed tick only when the pool has active liquidity there, on top of the usable-range check. All 301 existing tests pass against it, including the invariant suites from earlier rounds.\n\n**Tests added** in `test/HookRevision.t.sol`, run in both currency orientations:\n\n- A fuzzed seller-chosen limit anywhere in the liquidity-free region below the market band, up to 700,000 ticks deep, never moves the guard on the drain or on the buy that restores the price, and the wall is then placed against the market.\n- A fuzzed limit at any depth inside the liquid market band moves the guard to exactly the stop tick, pinning the behaviour the fix must keep.\n\n**Reported in `.imd-findings.json`** rather than tested around:\n\n- Medium, with a self-contained proof. `_rebalance` places the band against spot directly, so with a reserve pending and no wall deployed yet, a post-death seller can drain the market band, continue to a limit of their choosing, call `rebalance()` there, and buy back in the same block. The whole reserve deploys 31,000 to 301,000 ticks below the market, the guard is never consulted, and the attacker loses only fees. The adaptation notes claim this call reverts, which is true only next to the tick extreme. The proof fails on the current code and passes under either a refuse-at-drained-tick fix or a clamp-to-guard fix.\n- Low, design-adjacent. Once a wall is deployed it spans to the tick extreme, so a same-block sell through it and buy-back drags the guard down at fee cost and parks the next wall for weeks.\n\n**Verification.** The full `forge test` run reports 321 passed, 1 failed, 1 skipped. The failure is the scratch proof, which is meant to fail and is deleted before the build. The skip is the optional fork suite. The working tree shows only my test file modified. The findings file and scratch directory exist on disk and are hidden from git by the harness's exclude list.","treeHash":"c03fb4df047dc9a48d778462d11a9f6c9daed776","usage":{"cachedInputTokens":2763097,"inputTokens":770,"model":"claude-fable-5-1","outputTokens":65089,"runtime":"claude","turns":44,"wallClockMs":1546657}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ce319efac2b76da0","findings":[{"citation":"resolved","description":"`_updateWallGuard` (src/PleaHook.sol:901-924) treats every tick `afterSwap` observes as a traded PLEA price and moves `wallGuardTick` at once to any lower one (line 921-922). Once the Cabal is dead, sells are free and a plain router sells exact-in with sqrtPriceLimit = MIN_SQRT_PRICE+1 (PLEA token0) or MAX_SQRT_PRICE-1 (PLEA token1). A sell larger than the IMD held by the market band and the wall exhausts all liquidity on the IMD side and the swap ends at the pool's price limit, so `currentTick()` in `afterSwap` (line 522) is TickMath.MIN_TICK (-887272) / MAX_TICK-1. That empty-pool tick is not a price anything traded at, but the guard adopts it (measured: guard -120721 -> -887272, resp. 120721 -> 887272). From then on `_rebalance` (lines 760-762 / 767-770) places the wall against the guard, which only recovers toward `refTick` at WALL_GUARD_TICKS_PER_DAY = 400 ticks per day. With the guard a few hundred ticks from the extreme, the band [minTick, _alignDown(guard)] (or [_alignUp(guard), maxTick]) is 60-120 ticks wide at a sqrt price of ~4.3e9 (or ~1.46e48), so `_liquidityForSingleSide` (line 950/948) computes l = amount * 2^96 / (hi - lo) ~ 3e40 for 10 IMD, above type(uint128).max, and line 953 reverts InvalidLiquidity(); the whole `rebalance()` reverts while `pendingRebalance()` stays true. The liquidity only fits uint128 once the band is ~7,000 ticks wide (~17 days for 10 IMD; ~2.6 days for 1 IMD), after which the wall is deployed ~766,000 ticks below spot (a price e^-76 of spot) where it can never fill, and the guard needs 766,000/400 = ~1,916 days (5.2 years) to return to the trading range. Effect: every IMD the hook retains after a drain (pool fee share, trims, appeal fees, and the leftover prize pot that Seasons.flushToWall sends to fundWall after the last season) is either unreachable (rebalance reverts) or parked in a band that cannot buy PLEA, for years. The buy wall that is the only IMD support after the Cabal dies does not exist. Merged from audit_math (same root cause, reproduced here in both currency orientations). Fix that keeps every number: ignore observed ticks at or beyond the usable range (observedTick <= minTick or >= maxTick) in `_updateWallGuard`, or clamp the observed tick to the market band's edge.","line":922,"path":"src/PleaHook.sol","reproduction":"State: Sepolia timings (SEASON 18000, DEADMAN 118800), seeded pool, 91 minutes past the launch window, both orientations (IMD etched at 1<<32 or at type(uint160).max-100). 1) alice buys with 100 IMD (band holds ~98.5 IMD). 2) skip DEADMAN+1: gate.cabalAlive() == false. 3) the distributor transfers 50,000,000 PLEA to alice (a claim) and alice sells it exact-in through a plain v4 router with the pool's extreme price limit: hook.currentTick() == -887272 (PLEA token0) / 887271 (PLEA token1) and hook.wallGuardTick() == -887272 / 887272. 4) 1 hour later bob buys with 50 IMD: spot is back at -120525 / 120524. 5) 12 hours later alice calls hook.fundWall(10e18) (pendingRebalance() == true) and anyone calls hook.rebalance(). Expected (POOL4 behaviour, README 'Wall placement guard'): the 10 IMD is deployed as a wall whose near edge is within a few hundred ticks of spot. Actual: rebalance() reverts InvalidLiquidity() (custom error 0x1fff9681) from src/PleaHook.sol:953 in both orientations; it keeps reverting for ~17 days, then deploys the wall ~766k ticks away from spot and the guard crawls back at 400 ticks/day. Proof: test/scratch/WallGuardDrain.t.sol, `forge test --match-path test/scratch/WallGuardDrain.t.sol -vv` fails with [FAIL: InvalidLiquidity()] in WallGuardDrainImdZeroTest and WallGuardDrainPleaZeroTest; it passes once out-of-range ticks are ignored by the guard.","severity":"high","snippet":"        if (pleaIsZero ? seen < g : seen > g) g = seen;","title":"Wall guard adopts the pool's price-limit tick after a draining sell: rebalance() reverts InvalidLiquidity for weeks and the IMD wall is then parked ~766k ticks below spot for years"},{"citation":"resolved","description":"`afterSwap` calls `_checkpoint` with `currentSqrtPriceX96()` read AFTER the swap (line 524), and `_checkpoint` (lines 926-935) writes `ring[hour % 25]` only when `c.hour != hour`: the checkpoint of an hour is exactly the post-impact spot price of whoever trades first in that hour, and nothing later in the hour changes it. `CabalGate.factScore` (src/CabalGate.sol:239-253) reads `latestPrice()` for the P&L bucket (14/9/5/0) and `price24hAgo()` for the trend bucket (9/5/0), and README line 69 / the gate's NatSpec (line 220-221) promise these are 'the hook's hourly checkpoints, never the spot price'. A seller (or a helper wallet, so the seller's own cost basis is untouched) makes the first trade of the hour with a buy that lifts the price just above `ago * 102 / 100`, then submits the plea in the same hour: the trend reads 'up' (+9) instead of flat (+5) or down (0) for every plea opened that hour, and `need` = 70 - factScore drops by 4 (flat market) or 9 (falling market, where a CannotPass at need 46+ becomes passable at 37+). The buy's PLEA is kept; the cost is the 1.75% fee and price impact. Twenty-four hours later the same value is `price24hAgo` for every plea of that hour. The existing test test/Hook.t.sol:116 only shows that a pump AFTER the hour's first trade is ignored. Merged from audit_flow (medium), audit_economics (low) and audit_math (low): one root cause. Fix that keeps every number: checkpoint the pre-swap price (save it in beforeSwap / transient storage and pass it to `_checkpoint`), or have the gate read the previous hour's checkpoint.","line":524,"path":"src/PleaHook.sol","reproduction":"Fixture test/utils/SepoliaFixture.sol (default orientation, past the launch window). 1) buy(alice, 100e18). 2) skip(1 hours); buy(bob, 1e18): this hour's checkpoint `ago` = 471345743584764894368881 (X96). 3) skip(25 hours): hook.price24hAgo() == hook.latestPrice() == ago; gate.factScore(alice, balance/10) == 37 (trend flat, +5). 4) carol buys 60e18 IMD as the first trade of the hour: hook.latestPrice() == hook.priceX96() == 482262814873440205388229 == 102% of ago. 5) gate.factScore(alice, same amount) == 41 (trend up, +9). 6) vm.prank(alice); gate.submitSell(amount, text) stores need = 29 instead of 33. Expected: the hour's reference price is not settable by the trade that creates it, and the fact score of a plea cannot be moved by a same-hour trade from the seller's side. Actual: the stored hourly reference equals that trade's closing spot price (+4 points here, +9 when the 24h trend was down). Scratch test test/scratch/Leads.t.sol::test_checkpointIsThePostSwapPriceOfTheHoursFirstTrade passes on this code logging exactly these values.","severity":"medium","snippet":"        _checkpoint(currentSqrtPriceX96());","title":"Hourly price checkpoint is the post-swap spot of the hour's first trade, so one buy by a helper wallet sets latestPrice (and, 24h later, price24hAgo) that factScore uses for the trend and P&L buckets"},{"citation":"resolved","description":"`_checkAmount` only refuses `amount == 0`, so a plea for 1 wei is valid. In `factScore` (line 225-228) that amount gives `shareBps == 0` and the maximum 18 share points on top of the holding-time, P&L and trend points, so the smallest possible sell has the lowest `need`; the judges see 'sell 0 PLEA' in the question (line 512 divides by 1e18). `Seasons.record` (src/Seasons.sol:159-166) counts any plea whose `gate.result` is Approved, Executed or Lapsed, so an approval that is never executed scores the same as a real sell, and `closeSeason`/`_payBonus` pay the IMD prize pot and the 5,000,000 PLEA season bonus to the top 10 by those points. The incentive the prize pot and the 2% bonus reward (writing pleas to sell) is therefore farmable for the 0.5 oracle fee per plea with no PLEA ever leaving the wallet, every 4 hours per wallet (the lapse cooldown), by any number of wallets that each bought once. Only the judges' subjective score stands between a holder and the prizes. Kept from audit_economics with its reproduction confirmed. Fix options that keep the agreed numbers: a minimum amount or share in `_checkAmount`, or points scaled by the executed share.","line":385,"path":"src/CabalGate.sol","reproduction":"Fixture test/utils/SepoliaFixture.sol. alice and bob buy 100 IMD of PLEA each; 7.5 days pass with the Cabal kept alive by bob's denied verdicts every 30 hours. Then gate.factScore(alice, 1) == 46 (need 24) while gate.factScore(alice, bal*35/100) == 33 (need 37). alice calls submitSell(1, text); the oracle answers 24; the plea is Approved; alice never calls executeSell; 8 minutes later seasons.record(id) succeeds, seasons.topOf(currentSeason)[0] == (alice, 24 points) and plea.balanceOf(alice) is unchanged. Expected: a plea that sells nothing (1 wei) is not the cheapest route to prize points. Actual: it is the best-scoring plea possible and earns full points without any sale. Scratch test test/scratch/Leads.t.sol::test_oneWeiPleaScoresBestAndCountsWithoutSelling passes on this code.","severity":"low","snippet":"        if (amount == 0 || amount > MAX_SELL || amount > bal * MAX_SHARE_BPS / 10_000) revert AmountTooLarge();","title":"A 1-wei plea gets the best fact score and, approved then left to lapse, earns full season points and the PLEA bonus without selling anything"},{"citation":"resolved","description":"At seed the hook approves the Stacker (imd/acc launch #1294, 0x0457276d7b036818b3eddc1a4a3fceda61e9314d, a third-party contract this repository does not control) for type(uint256).max IMD. The hook's IMD balance is not only the cashback of the swap in flight: `retainedImd` (trim proceeds, closed-wall IMD, appeal fees via fundWall, Seasons.flushToWall and the pool share redeemed by rebalance) sits in the same balance between rebalances. `_payCashback` (line 642) only ever needs `amount` per credit, so the max approval is pure excess exposure: any bug, upgrade or compromise of the Stacker lets it `transferFrom(hook, ..., retainedImd)` at any time, outside swaps. After such a pull `retainedImd` no longer matches the balance: `_rebalance` computes `amount = retainedImd - KEEPER_TIP` and `_settleImd` reverts in `safeTransfer`, so `rebalance()` reverts for good while `pendingRebalance()` stays true. The Stacker is a dependency the owner chose (trust assumption), so this is low; merged from audit_economics (low), audit_permissions (info) and audit_flow (info). Fix that keeps the agreed design: `forceApprove(stacker, amount)` immediately before each `credit` (or approve only the cashback just taken) instead of the one-time max approval.","line":393,"path":"src/PleaHook.sol","reproduction":"Fixture test/utils/SepoliaFixture.sol after seed: imd.allowance(hook, stacker) == type(uint256).max. alice approves the hook and calls hook.fundWall(1000e18): hook.retainedImd() == 1000e18. vm.prank(address(stacker)); imd.transferFrom(hook, 0xBEEF, 1000e18) succeeds: the hook's IMD balance is 0 while retainedImd is still 1000e18. hook.pendingRebalance() == true and hook.rebalance() reverts (ERC20InsufficientBalance inside _settleImd) and keeps reverting. Expected: the Stacker can move at most the cashback being credited. Actual: it can move every IMD the hook holds. Scratch test test/scratch/Leads.t.sol::test_stackerAllowanceCoversTheWholeReserve passes on this code.","severity":"low","snippet":"        if (address(stacker).code.length != 0) imd.approve(address(stacker), type(uint256).max);","title":"Unlimited IMD allowance to the external Stacker covers the hook's whole wall reserve; a Stacker pulling more than `amount` strands the reserve and bricks rebalance()"}],"hash":"8f56013e24c9e05aeb1d6215202668655b1774063072b7a2084c1e1e2714f1df","nodeId":"abf80d06-d44b-4bc6-818d-4b453f18572e","outcome":"completed","summary":"The review is complete. The findings file is written and validated, no repository file other than my outputs changed, and the scratch tests live only under `test/scratch/`.\n\n**Outcome:** `.imd-findings.json` holds 4 findings and 44 coverage rows (all 41 entry points answered, plus 3 invariant rows). Every kept finding was reproduced against the tree with Foundry tests I wrote.\n\n**Findings kept**\n\n1. **High. Wall guard adopts the pool's price-limit tick after a draining sell** (`src/PleaHook.sol:922`). After the Cabal dies, a sell larger than the pool's IMD ends at the tick extreme, and the guard adopts it. `rebalance()` then reverts `InvalidLiquidity()` for weeks and later parks the wall ~766k ticks from spot, with the guard needing ~5 years to recover. Proof at `test/scratch/WallGuardDrain.t.sol` fails with `InvalidLiquidity()` in both currency orientations on this code and passes when out-of-range ticks are ignored by the guard. I verified the pass by patching the guard temporarily and restoring the file.\n2. **Medium. Hourly checkpoint is the post-swap price of the hour's first trade** (`src/PleaHook.sol:524`). A helper wallet's 60 IMD buy as the first trade of the hour moved alice's fact score from 37 to 41 and her stored need from 33 to 29. Merged from three specialists (flow, economics, math).\n3. **Low. A 1-wei plea scores best and earns full season points without selling** (`src/CabalGate.sol:385`). Fact score 46 for 1 wei versus 33 for a 35% sell; approved, lapsed, and recorded with 24 points and an unchanged balance.\n4. **Low. Unlimited IMD allowance to the Stacker covers the whole wall reserve** (`src/PleaHook.sol:393`). A Stacker pull of the reserve leaves `retainedImd` unbacked and `rebalance()` reverting forever. Merged from three specialists; kept low as a chosen dependency.\n\n**Dropped:** the permissions note on `closeSeason` excluding unrecorded pleas and the flow note on the hook owner being frozen at launch. Both match the documented design and are not defects.\n\n**Own pass, no new findings:** bytecode sizes are within EIP-170/3860 limits, manifest arguments match every constructor, the live Sepolia Intake v2 answers `requests(bytes32)` in the expected shape and the Stacker has code. One item is recorded as unreached: the oracle body's `toleranceBps` and `guards` keys are absent from the pinned reference, and a refusal cannot be reproduced offline.","treeHash":null,"usage":{"cachedInputTokens":1958110,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":46567,"runtime":"claude","turns":30,"wallClockMs":1080931}},{"artifacts":[],"attempt":1,"bundleHash":"77dccee747e04975b84e45f563c38bb271ec2200874f52b7aeaa17a9f4359b23","device":"c7b1db4d25939bd5","findings":[],"hash":"c075b63f86b0ee72d623b86c92042033e0900bd6dd4ee574ea5bc80a10514ba2","nodeId":"fed5a193-b80d-491d-8ac1-bcb135047f78","outcome":"completed","summary":"Completed locally. Fixed a reproduced signed-quorum validation bug with regression coverage; preserved launch settings and requested behavior.\n\n`forge build` and the full test suite passed: 256 tests, zero failures, one optional fork suite skipped. Protected deployment checks also passed.\n\nChanges and audit findings are documented in [ADAPTATION.md](/home/worker/.identitymd/work/4aca2460-33f9-477b-9480-cd229f874c9a/fed5a193-b80d-491d-8ac1-bcb135047f78/ADAPTATION.md). No on-chain transaction was broadcast.","treeHash":"64a17398e9fe17ad211f83c4432fcdb09b3f2409","usage":{"cachedInputTokens":6046976,"inputTokens":163201,"model":"gpt-6-astra","outputTokens":27799,"runtime":"codex","turns":13,"wallClockMs":1173858}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"d20c1a95c50699ea","findings":[{"citation":"resolved","description":"Settles my earlier finding 356e430a: the fix holds (_updateWallGuard now adopts an observed tick only when it is strictly inside (minTick, maxTick) and poolManager.getLiquidity(poolId()) != 0, so the guard no longer moves to a seller-chosen limit reached through an empty pool). The tester's finding 33eb41b6 (write_foundry_tests) still reproduces: _rebalance uses spot itself as one edge of the band (lines 772/779: `int24 edge = spot < refTick ? spot : refTick;` / `int24 edge = spot > refTick ? spot : refTick;`), so the liquidity check added to the guard is bypassed when spot is the drained tick. README.md:113 and ADAPTATION.md say rebalance() reverts while spot sits at a drained tick. That only holds next to the tick extreme, where the band would overflow uint128. At an interior drained tick the call succeeds and puts the whole reserve where the seller chose. After the Cabal dies, a seller with a pending rebalance can empty the market band's IMD, stop at any limit in the liquidity-free region, call rebalance(), and buy back in the same block. The wall then sits tens of thousands of ticks away from the market. Impact is bounded: no IMD is lost, the guard is untouched, and the wall goes back next to the market at the next pending rebalance (after about 400 IMD of volume puts 1 IMD of pool share in claims, which the attacker's own round trip often does). Until then the buy wall gives no support, and the attacker can repeat this while a liquidity-free region exists below the market. Hence low, not medium. Fix that changes no number: in _rebalance, after `_updateWallGuard(spot);` add `if (poolManager.getLiquidity(poolId()) == 0) return (work, acted);`. Verified: the proof passes with that line, and the HookTest, HookPleaIsZeroTest and HookRevision suites still pass.","line":764,"path":"src/PleaHook.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {ERC20} from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {PoolManager} from \"v4-core/PoolManager.sol\";\nimport {IPoolManager} from \"v4-core/interfaces/IPoolManager.sol\";\nimport {TickMath} from \"v4-core/libraries/TickMath.sol\";\nimport {BalanceDelta} from \"v4-core/types/BalanceDelta.sol\";\nimport {Currency} from \"v4-core/types/Currency.sol\";\nimport {PoolKey} from \"v4-core/types/PoolKey.sol\";\nimport {SwapParams} from \"v4-core/types/PoolOperation.sol\";\nimport {StateLibrary} from \"v4-core/libraries/StateLibrary.sol\";\nimport {PLEA} from \"src/PLEA.sol\";\nimport {CabalGate} from \"src/CabalGate.sol\";\nimport {Seasons} from \"src/Seasons.sol\";\nimport {Laureates} from \"src/Laureates.sol\";\nimport {PleaDistributor} from \"src/PleaDistributor.sol\";\nimport {PleaLaunch} from \"src/PleaLaunch.sol\";\nimport {PleaHook} from \"src/PleaHook.sol\";\n\ncontract SImd is ERC20 {\n    constructor() ERC20(\"TestIMD\", \"IMD\") {}\n    function mint(address to, uint256 a) external { _mint(to, a); }\n}\n\ncontract SStacker {\n    IERC20 public imd;\n    constructor(IERC20 i) { imd = i; }\n    function credit(address, uint256 amount) external { imd.transferFrom(msg.sender, address(this), amount); }\n}\n\ncontract SRouter {\n    IPoolManager pm; PleaHook hook; IERC20 imd; IERC20 plea;\n    constructor(IPoolManager a, PleaHook b, IERC20 c, IERC20 d) { pm = a; hook = b; imd = c; plea = d; }\n    function swap(bool buy, int256 amt, uint160 limit) external returns (uint256) {\n        return abi.decode(pm.unlock(abi.encode(msg.sender, buy, amt, limit)), (uint256));\n    }\n    function unlockCallback(bytes calldata raw) external returns (bytes memory) {\n        (address payer, bool buy, int256 amt, uint160 limit) = abi.decode(raw, (address, bool, int256, uint160));\n        bool pz = hook.pleaIsZero();\n        bool z = buy ? !pz : pz;\n        if (limit == 0) limit = z ? TickMath.MIN_SQRT_PRICE + 1 : TickMath.MAX_SQRT_PRICE - 1;\n        BalanceDelta d = pm.swap(hook.poolKey(), SwapParams({zeroForOne: z, amountSpecified: amt, sqrtPriceLimitX96: limit}), abi.encode(payer));\n        (int128 pd, int128 id) = pz ? (d.amount0(), d.amount1()) : (d.amount1(), d.amount0());\n        (IERC20 tin, int128 din, IERC20 tout, int128 dout) = buy ? (imd, id, plea, pd) : (plea, pd, imd, id);\n        uint256 ain = uint256(uint128(-din));\n        uint256 aout = dout > 0 ? uint256(uint128(dout)) : 0;\n        pm.sync(Currency.wrap(address(tin)));\n        tin.transferFrom(payer, address(pm), ain);\n        pm.settle();\n        if (aout != 0) pm.take(Currency.wrap(address(tout)), payer, aout);\n        return abi.encode(aout);\n    }\n}\n\ncontract WallAtDrainedSpotTest is Test {\n    using StateLibrary for IPoolManager;\n    address constant OWNER = 0x4b91078b2374c956A65F7Af0999CaE0a935E6821;\n    uint256 constant T0 = 1_800_000_000;\n    uint256 constant DEADMAN = 118800;\n    PoolManager pm; SImd imd; SStacker stacker; PLEA plea; CabalGate gate; Seasons seasons;\n    PleaDistributor distributor; PleaLaunch launch; PleaHook hook; SRouter router;\n    address alice = makeAddr(\"alice\"); address attacker = makeAddr(\"attacker\");\n\n    function setUp() public {\n        vm.chainId(11155111); vm.warp(T0); vm.roll(1000);\n        pm = new PoolManager(address(this));\n        SImd impl = new SImd();\n        address q = address(uint160(1 << 32)); // IMD sorts first: PLEA is token1\n        vm.etch(q, address(impl).code);\n        imd = SImd(q);\n        stacker = new SStacker(imd);\n        plea = new PLEA(OWNER);\n        gate = new CabalGate(address(plea), makeAddr(\"intake\"), makeAddr(\"oimd\"), address(imd), vm.addr(1), 18000, DEADMAN);\n        seasons = new Seasons(address(plea), address(gate), address(imd));\n        Laureates laureates = new Laureates(address(plea));\n        distributor = new PleaDistributor(address(plea), OWNER);\n        launch = new PleaLaunch(address(plea), address(gate), address(seasons), address(laureates), address(distributor),\n            address(pm), address(imd), address(stacker), 1300000, T0 + 1 days);\n        bytes memory code = abi.encodePacked(type(PleaHook).creationCode, abi.encode(address(pm), address(plea),\n            address(imd), address(stacker), OWNER, address(seasons), uint256(1300000)));\n        bytes32 h = keccak256(code); uint160 flags = launch.FLAGS(); bytes32 salt;\n        for (uint256 s;; ++s) {\n            address a = address(uint160(uint256(keccak256(abi.encodePacked(bytes1(0xff), address(launch), bytes32(s), h)))));\n            if (uint160(a) & 0x3fff == flags) { salt = bytes32(s); break; }\n        }\n        hook = PleaHook(launch.deployHook(salt, code));\n        vm.prank(OWNER); launch.seed();\n        skip(91 minutes);\n        router = new SRouter(IPoolManager(address(pm)), hook, imd, plea);\n        imd.mint(alice, 100_000e18); imd.mint(attacker, 100_000e18);\n        vm.prank(alice); imd.approve(address(router), type(uint256).max);\n        vm.prank(attacker); imd.approve(address(router), type(uint256).max);\n        vm.prank(attacker); plea.approve(address(router), type(uint256).max);\n    }\n\n    function test_rebalanceDoesNotPlaceTheWallAtADrainedSpot() public {\n        vm.prank(alice); router.swap(true, -300e18, 0);\n        vm.startPrank(alice); imd.approve(address(hook), type(uint256).max); hook.fundWall(50e18); vm.stopPrank();\n        assertTrue(hook.pendingRebalance());\n        skip(DEADMAN + 1); vm.roll(block.number + 1);\n        int24 marketSpot = hook.currentTick();\n        vm.prank(address(distributor)); plea.transfer(attacker, 100_000_000e18);\n        // PLEA is token1: a sell raises the raw tick. Limit 30,000 ticks past the market, inside the empty region.\n        int24 limitTick = marketSpot + 30_000;\n        vm.prank(attacker); uint256 got = router.swap(false, -int256(100_000_000e18), TickMath.getSqrtPriceAtTick(limitTick));\n        assertEq(hook.currentTick(), limitTick);\n        assertEq(IPoolManager(address(pm)).getLiquidity(hook.poolId()), 0, \"liquidity active at the drained tick\");\n        // README: \"Until the next buy brings spot back from a drained tick, rebalance() reverts rather than placing a wall there.\"\n        vm.prank(attacker); try hook.rebalance() {} catch {}\n        vm.prank(attacker); router.swap(true, -int256(got), 0); // buy back in the same block\n        (int24 lo,, uint128 liq) = hook.wall();\n        int24 spot = hook.currentTick();\n        emit log_named_int(\"spot after buy-back\", spot);\n        emit log_named_int(\"wall near edge\", lo);\n        emit log_named_uint(\"wallImd\", hook.wallImd());\n        // Either no wall was placed at the drained tick, or the wall is against the market (guard 120721).\n        if (liq != 0) assertLt(int256(lo) - int256(spot), 2_000, \"wall placed at the drained tick, far from the market\");\n    }\n}","reproduction":"Sepolia timings (DEADMAN 118800, credit gas 1300000), IMD at address 1<<32 (PLEA token1), seeded, 91 minutes after seed. 1) alice buys with 300 IMD and calls fundWall(50e18): pendingRebalance() == true, no wall. 2) skip DEADMAN+1, so the Cabal is dead. 3) the attacker gets 100,000,000 PLEA and sells it exact-in with sqrtPriceLimitX96 = getSqrtPriceAtTick(spot+30000): currentTick() == 149580 and getLiquidity(poolId) == 0. 4) the attacker calls hook.rebalance(). Expected per README: it reverts, or places nothing. Actual: it succeeds and deploys 55.90 IMD as wall [149580, maxTick]. 5) the attacker buys back with the IMD received: spot returns to 119608 while the wall's near edge stays at 149580, 29,972 ticks (about 20x in price) from the market. The guard-limited placement would be about 120720. Proof test/scratch/WallAtDrainedSpot.t.sol fails with 'wall placed at the drained tick, far from the market: 29972 >= 2000' and passes with the one-line fix.","severity":"low","snippet":"        int24 spot = currentTick();","title":"rebalance() places the reserve's wall at a drained spot tick with no active liquidity, contrary to the README's 'rebalance() reverts rather than placing a wall there'"}],"hash":"cea10b759d6a4100fc5881da0c251050959a864cb4f025e932695f658b8023cd","nodeId":"abf80d06-d44b-4bc6-818d-4b453f18572e","outcome":"completed","summary":"The finding I raised last round is fixed. One smaller issue remains from the independent tester, which I reproduced and report as low. The results are in `.imd-findings.json`: one finding and a coverage row for each of the 41 entry points, plus one invariant row.\n\n**My earlier finding (356e430a), fixed.** The wall's price guard used to jump to a price limit the seller chose after emptying the pool. Now it only takes a new tick when that tick is inside the usable range and the pool has active liquidity there (`src/PleaHook.sol:938`). My sequence from last round no longer moves the guard. The older version of the same issue (audit_math's high) goes with it.\n\n**The one finding (low): `rebalance()` can still put the wall at a drained price.** `_rebalance` uses the current tick directly as the wall's near edge (`src/PleaHook.sol:764`, then 772/779). So the new liquidity check in the guard doesn't apply when the current tick itself is the drained one. The README and ADAPTATION.md say `rebalance()` reverts in that state. That is only true right next to the tick extreme.\n- **Reproduction:** after the Cabal dies, a 100M PLEA sell stops at a limit 30,000 ticks past the market, where the pool has no active liquidity. Calling `rebalance()` there succeeds and deploys 55.9 IMD as the wall. After the seller buys back in the same block, the wall's near edge is 29,972 ticks (about 20× in price) from the market.\n- **Why low:** no IMD is lost and the guard doesn't move. The next rebalance that becomes pending puts the wall back beside the market, and the attacker's own round trip often makes one pending straight away.\n- **Proof:** `test/scratch/WallAtDrainedSpot.t.sol` is self-contained and fails on the current code.\n- **Fix:** add one line after `_updateWallGuard(spot);`: `if (poolManager.getLiquidity(poolId()) == 0) return (work, acted);`. No number changes. I applied it to `src/PleaHook.sol` only for a test run, then restored the original. With it, the proof passes and the Hook, HookPleaIsZero and HookRevision suites still pass.\n\n**Specialist findings I dropped:**\n- **Hourly price checkpoint (audit_math, audit_economics, audit_flow):** fixed. `afterSwap` now records the price from before the swap, so the hour's first trader can't set it.\n- **Unlimited IMD allowance to the Stacker, and the hook's fee owner staying fixed after `transferOwnership`:** these are trust assumptions or design choices, not defects.\n- **Unrecorded plea excluded once a season closes:** this is the documented design.\n- **1-wei pleas scoring well:** any plea of up to 15% of the balance gets the same share points, so 1 wei scores no better than 10%. This is the design, not something that can be farmed.\n- **Selling through the deployed wall and buying back, which drags the guard down:** this follows from the agreed rule that the guard drops at once to any traded price, and it costs the trader real fees.\n\nMost `holds` rows in the coverage rest on code that didn't change this round and on earlier rounds' tracing. This round I re-traced only the swap hooks, `rebalance()` and the guard.","treeHash":null,"usage":{"cachedInputTokens":1702513,"inputTokens":38,"model":"claude-opus-5-5","outputTokens":16442,"runtime":"claude","turns":19,"wallClockMs":512453}}],"verification":[{"checks":[{"durationMs":187178,"exitCode":0,"name":"build","output":"Compiling 139 files with Solc 0.8.26\nSolc 0.8.26 finished in 187.05s\nCompiler run successful!\n","passed":true},{"durationMs":9175,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 761.56µs (0.00ns CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10505)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 133061)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13921)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.15ms (1.21ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 15331907)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 16023099)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 15490912)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 13.60ms (7.34ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:PostLaunchHookTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 10243049)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 19.35ms (11.40ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 33176529)\nLogs:\n  six-contract factory deployment gas: 17204975\n  margin to the 16,777,216 mainnet cap: -427759\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 23.25ms (19.99ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 211069)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183716)\n[PASS] test_launcherAndInitAreOneShot() (gas: 127083)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 321856)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 22.95ms (560.27µs CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23981, ~: 24089)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 741652)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42979)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 28.47ms (11.99ms CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1229062, ~: 1198729)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24187)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1790146)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75260)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1601855)\n[PASS] test_deathBeforeTheFourthSeasonBurnsTheRest() (gas: 1149672)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1604836)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 220057)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 813140)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1721459)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1213809)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43426)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2507394)\n[PASS] test_onlyTheFirstFourSeasonsPayABonus() (gas: 3686495)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 874036)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1124005)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 31.05ms (28.80ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095147)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6530752)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3985287)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286171)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824252)\n[PASS] test_callbackFitsTheStipend() (gas: 5523825)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5871800)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070145)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273544)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244631)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421950)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167133)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213156)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1479291)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455185)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299497)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 45.53ms (30.78ms CPU time)\n\nRan 15 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1253763)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1689383)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1110411)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1678875)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1302372)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1872048)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585324)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1105805)\n[PASS] test_orientationIsPleaZero() (gas: 15851)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1204071)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4514022)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760410)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 33686364)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16484413)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 57.67ms (59.78ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275363)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 232988)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658785)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821924)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8881955)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387270)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033059)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502553)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 92.99ms (73.19ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3274701)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233010)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1288368)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 31800880)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1259543)\n[PASS] test_fastFullCycle() (gas: 57270253)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13499)\n[PASS] test_onlyApprovedPleasScore() (gas: 3384311)\n[PASS] test_secondSeasonScoresSeparately() (gas: 34734107)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 2587016)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 86859135)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 93.29ms (72.98ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275385)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233099)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658807)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821946)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8881955)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387292)\n[PASS] test_orientationIsPleaZero() (gas: 15702)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033081)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502575)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 109.49ms (76.01ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1155197, ~: 1150268)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1198229)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 666932)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135426)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1226890)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64062)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1315980)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2555762)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290413)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 615266)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 145.94ms (147.98ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4091171, ~: 4090670)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8753321)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1638591)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1088327)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8882909)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6391977)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2175217)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11355878)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1062371)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8049237)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1250614)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6431055)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 171.61ms (147.32ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259250, ~: 259201)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1723892)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317019)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260370)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 275936)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 184.31ms (31.69ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095169)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6530774)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3985287)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286193)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824274)\n[PASS] test_callbackFitsTheStipend() (gas: 5523847)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5871822)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070167)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273566)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244653)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_orientationIsPleaZero() (gas: 15922)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421972)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167155)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213178)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1479306)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455207)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299519)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 197.45ms (32.41ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4084575, ~: 4083016)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8752896)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1638827)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1087651)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8882484)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6391552)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2175135)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11353875)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1061597)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8048126)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1250189)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6430630)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 207.22ms (133.72ms CPU time)\n\nRan 6 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 11243093, ~: 11242602)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizesAndNfts() (gas: 1393533)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 880238)\n[PASS] test_earlierTiedPleaTakesFirstAndFifthLaureateSlots() (gas: 1192034)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 880206)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 911090)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 209.78ms (218.28ms CPU time)\n\nRan 14 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1253763)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1689361)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1110411)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1678875)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1302350)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1872048)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585302)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1105783)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1204071)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4514022)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760410)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 33686364)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16484413)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 229.65ms (70.19ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 149903764)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 149098061)\nLogs:\n  launch (6 contracts + intake mock): 1232029\n  deployHook: 5375347\n  seed: 578771\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 1266174)\n[PASS] test_ownerMaySeedEarly() (gas: 149113013)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 149209245)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 257.10ms (359.10ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1155038, ~: 1150070)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1197889)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 667192)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134598)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1211530)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64122)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1316292)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2556540)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290437)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 615942)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 274.35ms (258.96ms CPU time)\n\nRan 11 tests for test/BonusInvariant.t.sol:BonusEdgeTest\n[PASS] testFuzz_anyRankingPaysPlusBurnsExactlyTheBonus(uint256) (runs: 512, μ: 4048210, ~: 3985802)\n[PASS] test_bonusPaidAfterDeathIsFreelyTransferable() (gas: 924744)\n[PASS] test_closeWithinTheGraceHourIsRefused() (gas: 885664)\n[PASS] test_closingTwiceCannotPayASeasonsBonusTwice() (gas: 874846)\n[PASS] test_deathBeforeTradingSeasonZeroEndsBurnsEverythingButSeasonZero() (gas: 1048140)\n[PASS] test_eleventhWalletIsNotPaidAndCannotDisplaceRankTen() (gas: 5141041)\n[PASS] test_gateAsSellerForfeitsWhileWatchedButIsPaidAfterDeath() (gas: 1610624)\n[PASS] test_lateApprovalListedAtCloseStillEarnsTheBonus() (gas: 824958)\n[PASS] test_onlyTheBestThreePleasCount() (gas: 2052018)\n[PASS] test_sixtyPointsQualifiesFiftyNineDoesNot() (gas: 1793627)\n[PASS] test_tenQualifiersReceiveTheWholeBonusAndNothingBurns() (gas: 4874164)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 274.55ms (279.49ms CPU time)\n\nRan 11 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 2220063, ~: 2220973)\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 256, μ: 298206, ~: 296016)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5412250, ~: 5432919)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1289716)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 815807)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 562424)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 872899)\n[PASS] test_metadataDecodesToValidJsonAndEscapesUntrustedTextInSvg() (gas: 3039852)\n[PASS] test_onlySeasonsMintsAndFailedMintCannotIncrementSupply() (gas: 307118)\n[PASS] test_prizesRequireSixtyPointsButLaureatesDoNot() (gas: 1666957)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 958273)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 298.54ms (657.00ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 5634759, ~: 5643209)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 5886919)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 5481479)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 324.67ms (81.73ms CPU time)\n\nRan 17 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 3381652, ~: 3385087)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 4596635, ~: 4697154)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 3469803, ~: 3459096)\n[PASS] test_amountLimitsFailBeforeChargingAndOneWeiCanBeSubmitted() (gas: 3403352)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 5775555)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 6257953)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 5521163)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 3405856)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 3301422)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 5309601)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 5501336)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 86519)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 3290977)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 838223)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 3379245)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 3868776)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 4496096)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 324.80ms (674.49ms CPU time)\n\nRan 3 tests for test/GateFailureInvariant.t.sol:GateFailureInvariantTest\n[PASS]\nGateFailureInvariantTest invariants:\n[PASS] invariant_gateHoldsNothing\n[PASS] invariant_onlyVerdictsMoveTheClock\n[PASS] invariant_pendingBookkeepingIsConsistent\n GateFailureInvariantTest invariants (runs: 64, calls: 4096, reverts: 0)\n\n╭--------------------+---------------+-------+---------+----------╮\n| Contract           | Selector      | Calls | Reverts | Discards |\n+=================================================================+\n| GateFailureHandler | advance       | 474   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | answer        | 494   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | appeal        | 426   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | directFailure | 439   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | execute       | 468   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | expire        | 444   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | fail          | 443   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | plead         | 426   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | strangerFails | 482   | 0       | 0        |\n╰--------------------+---------------+-------+---------+----------╯\n\n[PASS] test_failureAfterDeathDoesNotReviveTheCabal() (gas: 3353066)\n[PASS] test_handlerReachesFailuresVerdictsAndAppeals() (gas: 14201560)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 966.87ms (955.30ms CPU time)\n\nRan 2 tests for test/BonusInvariant.t.sol:BonusInvariantTest\n[PASS]\nBonusInvariantTest invariants:\n[PASS] invariant_bonusIsHeldPaidOrBurned\n[PASS] invariant_flushedSeasonsStayFinished\n[PASS] invariant_openBonusSeasonsStayFunded\n[PASS] invariant_supplyFallsOnlyByTheBurnedBonus\n BonusInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+----------+-------+---------+----------╮\n| Contract     | Selector | Calls | Reverts | Discards |\n+======================================================+\n| BonusHandler | advance  | 1166  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | approve  | 1160  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | close    | 1193  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | die      | 1219  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | donate   | 1128  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | flush    | 1119  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | pull     | 1207  | 0       | 0        |\n╰--------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesPaidClosesDeathAndFlush() (gas: 2572435)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.17s (1.17s CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1047  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 970   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1026  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 1035  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 1035  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 1103  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 1024  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 952   | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.52s (1.51s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 752   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 702   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 762   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 783   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 729   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 721   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 759   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 776   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 693   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 766   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2952167, ~: 2964604)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7639448)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.19s (3.23s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 752   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 702   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 762   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 783   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 729   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 721   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 759   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 776   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 693   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 766   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2952959, ~: 2965396)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7634514)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.22s (3.29s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_nftsRemainUniqueAndOwnedAfterRandomTransfers\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 760   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 751   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 753   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 666   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 782   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 747   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 752   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 732   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 758   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 745   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | transferLaureate        | 746   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 4109081)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 5716489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.04s (9.04s CPU time)\n\nRan 32 test suites in 9.04s (22.74s CPU time): 272 tests passed, 0 failed, 1 skipped (273 total tests)\n","passed":true},{"durationMs":83,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Laureates.approve(address,uint256)\",\"Laureates.mint(address,uint256,uint8,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256,bytes)\",\"Laureates.setApprovalForAll(address,bool)\",\"Laureates.setName(string)\",\"Laureates.transferFrom(address,address,uint256)\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address,address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":56,\"README.md\":203,\"foundry.toml\":24,\"launch.json\":60,\"remappings.txt\":4,\"script/Deploy.s.sol\":52,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":632,\"src/Laureates.sol\":227,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":123,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":987,\"src/PleaLaunch.sol\":107,\"src/Seasons.sol\":386,\"src/interfaces/IPleaParts.sol\":77,\"src/interfaces/IStacker.sol\":10,\"test/AuditRevision.t.sol\":260,\"test/BonusInvariant.t.sol\":528,\"test/DistributorAdversarial.t.sol\":331,\"test/Gate.t.sol\":387,\"test/GateAdversarial.t.sol\":370,\"test/GateFailureInvariant.t.sol\":330,\"test/Hook.t.sol\":215,\"test/HookAdversarial.t.sol\":272,\"test/Launch.t.sol\":145,\"test/LaunchManifest.t.sol\":248,\"test/OracleConformance.t.sol\":114,\"test/OracleReplay.t.sol\":59,\"test/Orientation.t.sol\":58,\"test/SeasonAdversarial.t.sol\":331,\"test/SeasonFunds.t.sol\":345,\"test/SeasonInvariant.t.sol\":393,\"test/SeasonRanking.t.sol\":195,\"test/Seasons.t.sol\":279,\"test/Token.t.sol\":78,\"test/TradingInvariant.t.sol\":454,\"test/fork/ForkTestnet.t.sol\":600,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":219,\"test/utils/Mocks.sol\":256,\"test/utils/SeasonModel.sol\":112,\"test/utils/SepoliaFixture.sol\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"0ab100dd882f07b842f9bb9472d9a3b4e025b0c7d3b680c5a095d58ad9af511f","verifiedTreeHash":"5cd01eb640cbb3367b7b8eba4b8807608c5ec976","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":192496,"exitCode":0,"name":"build","output":"Compiling 137 files with Solc 0.8.26\nSolc 0.8.26 finished in 192.34s\nCompiler run successful!\n","passed":true},{"durationMs":9229,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 4.84ms (0.00ns CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10505)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 133061)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13921)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 7.08ms (1.12ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 211069)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183716)\n[PASS] test_launcherAndInitAreOneShot() (gas: 127083)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 321856)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 9.55ms (372.70µs CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1237824, ~: 1199019)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24187)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1790146)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75260)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1601855)\n[PASS] test_deathBeforeTheFourthSeasonBurnsTheRest() (gas: 1149672)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1604836)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 220057)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 813140)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1721459)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1213809)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43426)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2507394)\n[PASS] test_onlyTheFirstFourSeasonsPayABonus() (gas: 3686495)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 874036)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1124005)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 27.99ms (20.10ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 15356559)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 16048164)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 15515564)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 31.83ms (5.29ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:PostLaunchHookTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 28940463)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 49.77ms (35.08ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 33206353)\nLogs:\n  six-contract factory deployment gas: 17229747\n  margin to the 16,777,216 mainnet cap: -452531\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 54.47ms (43.91ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259275, ~: 259228)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1723892)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317019)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260370)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 275936)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 61.60ms (60.18ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 5631938, ~: 5631938)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 5886919)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 5481479)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 82.30ms (68.91ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 26874770)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 26159149)\nLogs:\n  launch (6 contracts + intake mock): 1232029\n  deployHook: 5329973\n  seed: 576168\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 1266174)\n[PASS] test_ownerMaySeedEarly() (gas: 26174101)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 26270333)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 121.27ms (96.43ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4116710, ~: 4117483)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8753782)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1646428)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1088788)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8883370)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6392438)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2179829)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11396847)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1063301)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8053575)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1251544)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6431516)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 122.44ms (131.03ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3274701)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233010)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1288368)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 31800880)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1263225)\n[PASS] test_fastFullCycle() (gas: 57270253)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13499)\n[PASS] test_onlyApprovedPleasScore() (gas: 3384311)\n[PASS] test_secondSeasonScoresSeparately() (gas: 34734107)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 2587016)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 86859135)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 127.30ms (95.45ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1158856, ~: 1154148)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1202032)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 667653)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134604)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1211942)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64122)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1320434)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2565097)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290437)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 616380)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 127.32ms (118.81ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095169)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6534456)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3988969)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286193)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824274)\n[PASS] test_callbackFitsTheStipend() (gas: 5523847)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5875504)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070167)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273566)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244653)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_orientationIsPleaZero() (gas: 15922)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421972)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167155)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213178)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1486670)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455207)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299519)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 129.61ms (41.90ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275385)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233099)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658807)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821946)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8885637)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387292)\n[PASS] test_orientationIsPleaZero() (gas: 15702)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033081)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502575)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 145.15ms (96.21ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275363)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 232988)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658785)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821924)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8885637)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387270)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033059)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502553)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 167.37ms (94.78ms CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23982, ~: 24108)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 744119)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42979)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 174.68ms (10.14ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095147)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6534434)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3988969)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286171)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824252)\n[PASS] test_callbackFitsTheStipend() (gas: 5523825)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5875482)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070145)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273544)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244631)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421950)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167133)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213156)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1486655)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455185)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299497)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 181.65ms (35.36ms CPU time)\n\nRan 11 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 2220070, ~: 2220973)\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 256, μ: 298558, ~: 296385)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5416335, ~: 5432901)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1289716)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 815807)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 562424)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 872899)\n[PASS] test_metadataDecodesToValidJsonAndEscapesUntrustedTextInSvg() (gas: 3039852)\n[PASS] test_onlySeasonsMintsAndFailedMintCannotIncrementSupply() (gas: 307118)\n[PASS] test_prizesRequireSixtyPointsButLaureatesDoNot() (gas: 1666957)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 958273)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 181.86ms (339.03ms CPU time)\n\nRan 17 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1257924)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697207)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1114554)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686728)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1306537)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1879860)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585829)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1109969)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2597755)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1210978)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4547720)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760908)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1825307)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34032658)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2760628)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16628846)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 181.90ms (89.27ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4113709, ~: 4112383)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8753357)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1646664)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1088112)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8882945)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6392013)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2179747)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11394844)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1062527)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8052464)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1251119)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6431091)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 206.57ms (168.98ms CPU time)\n\nRan 6 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 11230029, ~: 11253811)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizesAndNfts() (gas: 1393533)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 880238)\n[PASS] test_earlierTiedPleaTakesFirstAndFifthLaureateSlots() (gas: 1192034)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 880206)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 911090)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 227.14ms (227.92ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1158901, ~: 1154370)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1202372)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 667393)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135432)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1227302)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64062)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1320122)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2564319)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290413)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 615704)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 274.99ms (238.73ms CPU time)\n\nRan 18 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1257924)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697229)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1114554)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686728)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1306559)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1879860)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585851)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1109991)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2597755)\n[PASS] test_orientationIsPleaZero() (gas: 15888)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1210978)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4547720)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760908)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1825329)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34032658)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2760676)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16628846)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 302.82ms (59.91ms CPU time)\n\nRan 17 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 3382118, ~: 3385104)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 4659847, ~: 4853761)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 3469898, ~: 3459096)\n[PASS] test_amountLimitsFailBeforeChargingAndOneWeiCanBeSubmitted() (gas: 3403352)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 5775555)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 6257953)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 5521163)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 3405856)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 3301422)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 5309601)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 5501336)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 86519)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 3290977)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 838223)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 3379245)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 3872464)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 4523360)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 303.00ms (495.33ms CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 969   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1031  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1062  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 1066  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 994   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 1003  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 1045  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1022  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.50s (1.49s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 757   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 747   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 742   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 739   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 717   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 764   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 757   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 742   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 727   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 751   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2952268, ~: 2952268)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7659804)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.23s (3.22s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 757   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 747   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 742   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 739   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 717   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 764   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 757   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 742   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 727   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 751   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2953060, ~: 2953060)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7654870)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.29s (3.33s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_nftsRemainUniqueAndOwnedAfterRandomTransfers\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 771   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 777   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 778   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 762   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 725   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 758   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 699   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 720   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 740   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 722   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | transferLaureate        | 740   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 4109081)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 5716489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.11s (9.10s CPU time)\n\nRan 29 test suites in 9.11s (20.44s CPU time): 262 tests passed, 0 failed, 1 skipped (263 total tests)\n","passed":true},{"durationMs":102,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Laureates.approve(address,uint256)\",\"Laureates.mint(address,uint256,uint8,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256,bytes)\",\"Laureates.setApprovalForAll(address,bool)\",\"Laureates.setName(string)\",\"Laureates.transferFrom(address,address,uint256)\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address,address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":67,\"README.md\":203,\"foundry.toml\":24,\"launch.json\":60,\"remappings.txt\":4,\"script/Deploy.s.sol\":52,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":632,\"src/Laureates.sol\":227,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":123,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":1004,\"src/PleaLaunch.sol\":107,\"src/Seasons.sol\":386,\"src/interfaces/IPleaParts.sol\":77,\"src/interfaces/IStacker.sol\":10,\"test/AuditRevision.t.sol\":260,\"test/DistributorAdversarial.t.sol\":331,\"test/Gate.t.sol\":387,\"test/GateAdversarial.t.sol\":370,\"test/Hook.t.sol\":288,\"test/HookAdversarial.t.sol\":272,\"test/Launch.t.sol\":145,\"test/LaunchManifest.t.sol\":248,\"test/OracleConformance.t.sol\":114,\"test/OracleReplay.t.sol\":59,\"test/Orientation.t.sol\":58,\"test/SeasonAdversarial.t.sol\":331,\"test/SeasonFunds.t.sol\":345,\"test/SeasonInvariant.t.sol\":393,\"test/SeasonRanking.t.sol\":195,\"test/Seasons.t.sol\":279,\"test/Token.t.sol\":78,\"test/TradingInvariant.t.sol\":454,\"test/fork/ForkTestnet.t.sol\":600,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":219,\"test/utils/Mocks.sol\":256,\"test/utils/SeasonModel.sol\":112,\"test/utils/SepoliaFixture.sol\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"132504759fd013103bb8cd00777fd7364457ba464d4eff8dcad9c1d5f3f5c438","verifiedTreeHash":"0039261a4484ce5cc21bf2134f03da500fdb1534","verifierVersion":"0.1.0+fb8278c5"},{"checks":[{"durationMs":196168,"exitCode":0,"name":"build","output":"Compiling 137 files with Solc 0.8.26\nSolc 0.8.26 finished in 196.05s\nCompiler run successful!\n","passed":true},{"durationMs":9650,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 531.88µs (0.00ns CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 211069)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183716)\n[PASS] test_launcherAndInitAreOneShot() (gas: 127083)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 321856)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 11.43ms (863.18µs CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 15373008)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 16064889)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 15532013)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 15.39ms (10.69ms CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1236721, ~: 1199055)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24187)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1790146)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75260)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1601855)\n[PASS] test_deathBeforeTheFourthSeasonBurnsTheRest() (gas: 1149672)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1604836)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 220057)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 813140)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1721459)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1213809)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43426)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2507394)\n[PASS] test_onlyTheFirstFourSeasonsPayABonus() (gas: 3686495)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 874036)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1124005)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 17.86ms (27.25ms CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23969, ~: 24089)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 746000)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42979)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 26.79ms (5.77ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 33226250)\nLogs:\n  six-contract factory deployment gas: 17246276\n  margin to the 16,777,216 mainnet cap: -469060\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 42.60ms (39.42ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259302, ~: 259272)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1723892)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317019)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260370)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 275936)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 49.86ms (48.70ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:PostLaunchHookTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 40363008)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 55.44ms (45.01ms CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10505)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 133061)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13921)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 57.58ms (2.05ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 5632644, ~: 5643209)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 5886919)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 5481479)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 87.45ms (80.69ms CPU time)\n\nRan 19 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1261591)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1702687)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1118181)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 18018)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1692212)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1310186)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1885317)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 587675)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1113617)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2603266)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1214605)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4569507)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 762874)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1830737)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34204143)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2793603)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2768304)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16704728)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33099049)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 156.46ms (114.70ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1163672, ~: 1169656)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1205976)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 669283)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135432)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1241805)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64062)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1323815)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2567964)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290467)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 617546)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 156.39ms (148.81ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1163342, ~: 1169486)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1205660)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 669555)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134604)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1226117)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64122)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1324151)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2568766)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290491)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 618234)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 158.94ms (149.46ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095169)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6536218)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3990731)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286193)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824274)\n[PASS] test_callbackFitsTheStipend() (gas: 5523847)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5877266)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070167)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273566)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244653)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_orientationIsPleaZero() (gas: 15922)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421972)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167155)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213178)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1490276)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455207)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299519)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 158.99ms (34.92ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 44320202)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 43579390)\nLogs:\n  launch (6 contracts + intake mock): 1232029\n  deployHook: 5390750\n  seed: 576168\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 1266174)\n[PASS] test_ownerMaySeedEarly() (gas: 43594342)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 43690574)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 167.88ms (97.71ms CPU time)\n\nRan 6 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 11243429, ~: 11275856)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizesAndNfts() (gas: 1393533)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 880238)\n[PASS] test_earlierTiedPleaTakesFirstAndFifthLaureateSlots() (gas: 1192034)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 880206)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 911090)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 170.88ms (174.22ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275363)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 232988)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658785)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821924)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8887440)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387270)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033059)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502553)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 184.14ms (98.18ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4131508, ~: 4128172)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8755159)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1652151)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1089914)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8884747)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6393815)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2185154)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11416479)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1066131)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8057871)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1254723)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6432893)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 195.50ms (162.92ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4133647, ~: 4137343)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8755596)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1651951)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1090602)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8885184)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6394252)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2185272)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11418626)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1066929)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8059018)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1255172)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6433330)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 212.08ms (155.91ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095147)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6536196)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3990731)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286171)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824252)\n[PASS] test_callbackFitsTheStipend() (gas: 5523825)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5877244)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070145)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273544)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244631)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421950)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167133)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213156)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1490261)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455185)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299497)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 226.87ms (29.86ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275385)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233099)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658807)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821946)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8887440)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387292)\n[PASS] test_orientationIsPleaZero() (gas: 15702)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033081)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502575)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 301.86ms (77.78ms CPU time)\n\nRan 11 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 2220092, ~: 2220973)\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 256, μ: 297654, ~: 293939)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5421749, ~: 5432895)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1289716)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 815807)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 562424)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 872899)\n[PASS] test_metadataDecodesToValidJsonAndEscapesUntrustedTextInSvg() (gas: 3039852)\n[PASS] test_onlySeasonsMintsAndFailedMintCannotIncrementSupply() (gas: 307118)\n[PASS] test_prizesRequireSixtyPointsButLaureatesDoNot() (gas: 1666957)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 958273)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 301.84ms (591.48ms CPU time)\n\nRan 17 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 3381971, ~: 3385035)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 4597862, ~: 4660575)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 3470425, ~: 3481398)\n[PASS] test_amountLimitsFailBeforeChargingAndOneWeiCanBeSubmitted() (gas: 3403352)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 5775555)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 6257953)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 5521163)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 3405856)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 3301422)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 5309601)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 5501336)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 86519)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 3290977)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 838223)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 3379245)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 3874238)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 4526962)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 301.93ms (472.26ms CPU time)\n\nRan 20 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1261591)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1702709)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1118181)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 18018)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1692212)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1310208)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1885317)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 587697)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1113639)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2603266)\n[PASS] test_orientationIsPleaZero() (gas: 15910)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1214605)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4569507)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 762874)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1830759)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34204143)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2793603)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2768347)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16704728)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33099071)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 302.02ms (107.04ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3274701)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233010)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1288368)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 31800880)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1265028)\n[PASS] test_fastFullCycle() (gas: 57270253)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13499)\n[PASS] test_onlyApprovedPleasScore() (gas: 3384311)\n[PASS] test_secondSeasonScoresSeparately() (gas: 34734107)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 2587016)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 86859135)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 301.94ms (94.21ms CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1016  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1031  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 960   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 1036  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 1032  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 1051  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 1059  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1007  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.57s (1.56s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 765   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 748   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 727   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 739   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 730   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 742   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 698   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 736   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 769   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 756   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 782   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2957530, ~: 2969138)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7672589)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.20s (3.28s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 765   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 748   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 727   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 739   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 730   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 742   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 698   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 736   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 769   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 756   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 782   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2958346, ~: 2969954)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7667727)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.32s (3.36s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_nftsRemainUniqueAndOwnedAfterRandomTransfers\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 753   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 778   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 727   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 746   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 719   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 720   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 766   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 755   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 764   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 750   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | transferLaureate        | 714   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 4109081)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 5716489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.52s (9.52s CPU time)\n\nRan 29 test suites in 9.52s (21.27s CPU time): 266 tests passed, 0 failed, 1 skipped (267 total tests)\n","passed":true},{"durationMs":94,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Laureates.approve(address,uint256)\",\"Laureates.mint(address,uint256,uint8,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256,bytes)\",\"Laureates.setApprovalForAll(address,bool)\",\"Laureates.setName(string)\",\"Laureates.transferFrom(address,address,uint256)\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address,address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":73,\"README.md\":203,\"foundry.toml\":24,\"launch.json\":60,\"remappings.txt\":4,\"script/Deploy.s.sol\":52,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":632,\"src/Laureates.sol\":227,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":123,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":1006,\"src/PleaLaunch.sol\":107,\"src/Seasons.sol\":386,\"src/interfaces/IPleaParts.sol\":77,\"src/interfaces/IStacker.sol\":10,\"test/AuditRevision.t.sol\":260,\"test/DistributorAdversarial.t.sol\":331,\"test/Gate.t.sol\":387,\"test/GateAdversarial.t.sol\":370,\"test/Hook.t.sol\":357,\"test/HookAdversarial.t.sol\":272,\"test/Launch.t.sol\":145,\"test/LaunchManifest.t.sol\":248,\"test/OracleConformance.t.sol\":114,\"test/OracleReplay.t.sol\":59,\"test/Orientation.t.sol\":58,\"test/SeasonAdversarial.t.sol\":331,\"test/SeasonFunds.t.sol\":345,\"test/SeasonInvariant.t.sol\":393,\"test/SeasonRanking.t.sol\":195,\"test/Seasons.t.sol\":279,\"test/Token.t.sol\":78,\"test/TradingInvariant.t.sol\":454,\"test/fork/ForkTestnet.t.sol\":600,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":219,\"test/utils/Mocks.sol\":266,\"test/utils/SeasonModel.sol\":112,\"test/utils/SepoliaFixture.sol\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"49e0510793c0a8eb97a1e0102a02930565bf36f1fa7578dadaef0bad2640f2b4","verifiedTreeHash":"34193d655a32c837ec953b5dc279b4718691523c","verifierVersion":"0.1.0+fb8278c5"},{"checks":[{"durationMs":223811,"exitCode":0,"name":"build","output":"Compiling 140 files with Solc 0.8.26\nSolc 0.8.26 finished in 223.66s\nCompiler run successful!\n","passed":true},{"durationMs":9653,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 568.08µs (0.00ns CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10505)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 133061)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13921)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.23ms (519.86µs CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23967, ~: 24098)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 744119)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42979)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 13.20ms (5.76ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 211069)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183716)\n[PASS] test_launcherAndInitAreOneShot() (gas: 127083)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 321856)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 17.90ms (614.82µs CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 15356559)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 16048164)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 15515564)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 21.66ms (7.02ms CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1254908, ~: 1301956)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24187)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1790146)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75260)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1601855)\n[PASS] test_deathBeforeTheFourthSeasonBurnsTheRest() (gas: 1149672)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1604836)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 220057)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 813140)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1721459)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1213809)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43426)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2507394)\n[PASS] test_onlyTheFirstFourSeasonsPayABonus() (gas: 3686495)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 874036)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1124005)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 34.87ms (32.05ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 26874770)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 26159149)\nLogs:\n  launch (6 contracts + intake mock): 1232029\n  deployHook: 5329973\n  seed: 576168\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 1266174)\n[PASS] test_ownerMaySeedEarly() (gas: 26174101)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 26270333)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 39.72ms (51.83ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:PostLaunchHookTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 28940463)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 40.21ms (22.59ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259278, ~: 259238)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1723892)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317019)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260370)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 275936)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 51.73ms (50.18ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 33206353)\nLogs:\n  six-contract factory deployment gas: 17229747\n  margin to the 16,777,216 mainnet cap: -452531\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 58.99ms (44.67ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095169)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6534456)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3988969)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286193)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824274)\n[PASS] test_callbackFitsTheStipend() (gas: 5523847)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5875504)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070167)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273566)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244653)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_orientationIsPleaZero() (gas: 15922)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421972)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167155)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213178)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1486670)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455207)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299519)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 82.99ms (37.14ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 5633345, ~: 5643209)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 5886919)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 5481479)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 90.53ms (89.21ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095147)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6534434)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3988969)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286171)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824252)\n[PASS] test_callbackFitsTheStipend() (gas: 5523825)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5875482)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070145)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273544)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244631)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421950)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167133)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213156)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1486655)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455185)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299497)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 108.85ms (42.60ms CPU time)\n\nRan 18 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1257924)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697229)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1114554)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686728)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1306559)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1879860)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585851)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1109991)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2597755)\n[PASS] test_orientationIsPleaZero() (gas: 15888)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1210978)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4547720)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760908)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1825329)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34032658)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2760676)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16628846)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 111.20ms (61.71ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4115785, ~: 4120843)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8753782)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1646428)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1088788)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8883370)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6392438)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2179829)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11396847)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1063301)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8053575)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1251544)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6431516)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 125.29ms (137.80ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275363)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 232988)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658785)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821924)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8885637)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387270)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033059)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502553)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 187.35ms (131.16ms CPU time)\n\nRan 6 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 11220283, ~: 11223266)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizesAndNfts() (gas: 1393533)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 880238)\n[PASS] test_earlierTiedPleaTakesFirstAndFifthLaureateSlots() (gas: 1192034)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 880206)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 911090)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 192.42ms (192.22ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3274701)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233010)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1288368)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 31800880)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1263225)\n[PASS] test_fastFullCycle() (gas: 57270253)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13499)\n[PASS] test_onlyApprovedPleasScore() (gas: 3384311)\n[PASS] test_secondSeasonScoresSeparately() (gas: 34734107)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 2587016)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 86859135)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 202.89ms (98.22ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4113880, ~: 4118491)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8753357)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1646664)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1088112)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8882945)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6392013)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2179747)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11394844)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1062527)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8052464)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1251119)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6431091)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 209.49ms (175.24ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1158933, ~: 1154162)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1202032)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 667653)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134604)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1211942)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64122)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1320434)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2565097)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290437)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 616380)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 245.22ms (239.79ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275385)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233099)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658807)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821946)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8885637)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387292)\n[PASS] test_orientationIsPleaZero() (gas: 15702)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033081)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502575)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 318.22ms (111.54ms CPU time)\n\nRan 11 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 2220070, ~: 2220973)\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 256, μ: 297992, ~: 295434)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5409578, ~: 5432913)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1289716)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 815807)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 562424)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 872899)\n[PASS] test_metadataDecodesToValidJsonAndEscapesUntrustedTextInSvg() (gas: 3039852)\n[PASS] test_onlySeasonsMintsAndFailedMintCannotIncrementSupply() (gas: 307118)\n[PASS] test_prizesRequireSixtyPointsButLaureatesDoNot() (gas: 1666957)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 958273)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 322.41ms (651.21ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1158990, ~: 1154380)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1202372)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 667393)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135432)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1227302)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64062)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1320122)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2564319)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290413)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 615704)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 369.50ms (296.95ms CPU time)\n\nRan 17 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1257924)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697207)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1114554)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686728)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1306537)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1879860)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585829)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1109969)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2597755)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1210978)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4547720)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760908)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1825307)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34032658)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2760628)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16628846)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 386.28ms (74.31ms CPU time)\n\nRan 11 tests for test/BonusInvariant.t.sol:BonusEdgeTest\n[PASS] testFuzz_anyRankingPaysPlusBurnsExactlyTheBonus(uint256) (runs: 512, μ: 4152611, ~: 4209498)\n[PASS] test_bonusPaidAfterDeathIsFreelyTransferable() (gas: 924744)\n[PASS] test_closeWithinTheGraceHourIsRefused() (gas: 885664)\n[PASS] test_closingTwiceCannotPayASeasonsBonusTwice() (gas: 874846)\n[PASS] test_deathBeforeTradingSeasonZeroEndsBurnsEverythingButSeasonZero() (gas: 1048140)\n[PASS] test_eleventhWalletIsNotPaidAndCannotDisplaceRankTen() (gas: 5141041)\n[PASS] test_gateAsSellerForfeitsWhileWatchedButIsPaidAfterDeath() (gas: 1610624)\n[PASS] test_lateApprovalListedAtCloseStillEarnsTheBonus() (gas: 824958)\n[PASS] test_onlyTheBestThreePleasCount() (gas: 2052018)\n[PASS] test_sixtyPointsQualifiesFiftyNineDoesNot() (gas: 1793627)\n[PASS] test_tenQualifiersReceiveTheWholeBonusAndNothingBurns() (gas: 4874164)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 393.73ms (396.65ms CPU time)\n\nRan 10 tests for test/HookRevision.t.sol:HookRevisionPleaIsZeroTest\n[PASS] testFuzz_aGreedyStackerCannotReachTheWallReserve(uint256,uint256) (runs: 32, μ: 1324780, ~: 1324746)\n[PASS] testFuzz_aSameHourPumpCannotMoveAPleasFactScore(uint256) (runs: 32, μ: 2934948, ~: 2932689)\n[PASS] testFuzz_repeatedDrainsToTheExtremeNeverMoveTheGuard(uint8) (runs: 32, μ: 3838969, ~: 3661491)\n[PASS] testFuzz_successfulCreditsNeverAccumulateAllowance(uint256,uint256,uint256) (runs: 32, μ: 2145998, ~: 2137769)\n[PASS] testFuzz_theGuardClimbsAtMost400TicksADay(uint256,uint256,uint8) (runs: 32, μ: 2784538, ~: 2802103)\n[PASS] testFuzz_theHoursFirstTradeRecordsThePriceItFoundWhateverItsSize(uint256,uint256) (runs: 32, μ: 2567948, ~: 2557879)\n[PASS] test_aCreditThatBurnsAllItsGasLeavesNoAllowance() (gas: 1604740)\n[PASS] test_anHourOpeningSellRecordsThePriceItFound() (gas: 1961540)\n[PASS] test_orientationIsPleaZero() (gas: 15668)\n[PASS] test_wallGuardFollowsASellThatStopsWhereTheMarketHasLiquidity() (gas: 6073257)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 395.67ms (426.30ms CPU time)\n\nRan 17 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 3381615, ~: 3385070)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 4618110, ~: 4788532)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 3469985, ~: 3459096)\n[PASS] test_amountLimitsFailBeforeChargingAndOneWeiCanBeSubmitted() (gas: 3403352)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 5775555)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 6257953)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 5521163)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 3405856)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 3301422)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 5309601)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 5501336)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 86519)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 3290977)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 838223)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 3379245)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 3872464)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 4523360)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 429.11ms (1.03s CPU time)\n\nRan 9 tests for test/HookRevision.t.sol:HookRevisionTest\n[PASS] testFuzz_aGreedyStackerCannotReachTheWallReserve(uint256,uint256) (runs: 64, μ: 1324766, ~: 1324663)\n[PASS] testFuzz_aSameHourPumpCannotMoveAPleasFactScore(uint256) (runs: 64, μ: 2934961, ~: 2932721)\n[PASS] testFuzz_repeatedDrainsToTheExtremeNeverMoveTheGuard(uint8) (runs: 64, μ: 3903361, ~: 3661534)\n[PASS] testFuzz_successfulCreditsNeverAccumulateAllowance(uint256,uint256,uint256) (runs: 64, μ: 2148922, ~: 2137794)\n[PASS] testFuzz_theGuardClimbsAtMost400TicksADay(uint256,uint256,uint8) (runs: 64, μ: 2712820, ~: 2689996)\n[PASS] testFuzz_theHoursFirstTradeRecordsThePriceItFoundWhateverItsSize(uint256,uint256) (runs: 64, μ: 2566703, ~: 2557857)\n[PASS] test_aCreditThatBurnsAllItsGasLeavesNoAllowance() (gas: 1604718)\n[PASS] test_anHourOpeningSellRecordsThePriceItFound() (gas: 1961518)\n[PASS] test_wallGuardFollowsASellThatStopsWhereTheMarketHasLiquidity() (gas: 6073235)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 429.13ms (882.13ms CPU time)\n\nRan 3 tests for test/GateFailureInvariant.t.sol:GateFailureInvariantTest\n[PASS]\nGateFailureInvariantTest invariants:\n[PASS] invariant_gateHoldsNothing\n[PASS] invariant_onlyVerdictsMoveTheClock\n[PASS] invariant_pendingBookkeepingIsConsistent\n GateFailureInvariantTest invariants (runs: 64, calls: 4096, reverts: 0)\n\n╭--------------------+---------------+-------+---------+----------╮\n| Contract           | Selector      | Calls | Reverts | Discards |\n+=================================================================+\n| GateFailureHandler | advance       | 453   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | answer        | 439   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | appeal        | 485   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | directFailure | 470   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | execute       | 439   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | expire        | 462   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | fail          | 451   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | plead         | 457   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | strangerFails | 440   | 0       | 0        |\n╰--------------------+---------------+-------+---------+----------╯\n\n[PASS] test_failureAfterDeathDoesNotReviveTheCabal() (gas: 3352857)\n[PASS] test_handlerReachesFailuresVerdictsAndAppeals() (gas: 14204412)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.20s (1.20s CPU time)\n\nRan 2 tests for test/BonusInvariant.t.sol:BonusInvariantTest\n[PASS]\nBonusInvariantTest invariants:\n[PASS] invariant_bonusIsHeldPaidOrBurned\n[PASS] invariant_flushedSeasonsStayFinished\n[PASS] invariant_openBonusSeasonsStayFunded\n[PASS] invariant_supplyFallsOnlyByTheBurnedBonus\n BonusInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+----------+-------+---------+----------╮\n| Contract     | Selector | Calls | Reverts | Discards |\n+======================================================+\n| BonusHandler | advance  | 1151  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | approve  | 1161  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | close    | 1144  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | die      | 1204  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | donate   | 1118  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | flush    | 1169  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | pull     | 1245  | 0       | 0        |\n╰--------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesPaidClosesDeathAndFlush() (gas: 2572435)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.33s (1.32s CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1079  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1017  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 991   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 994   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 1032  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 1013  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 989   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1077  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.73s (1.72s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_stackerHoldsNoStandingAllowanceOnTheHooksImd\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 777   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 763   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 713   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 757   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 719   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 728   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 733   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 720   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 754   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 783   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 745   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2954878, ~: 2966486)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7654939)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.53s (3.60s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_stackerHoldsNoStandingAllowanceOnTheHooksImd\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 777   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 763   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 713   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 757   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 719   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 728   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 733   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 720   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 754   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 783   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 745   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2954086, ~: 2965694)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7659873)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.60s (3.60s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_nftsRemainUniqueAndOwnedAfterRandomTransfers\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 716   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 750   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 667   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 747   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 776   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 808   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 773   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 777   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 694   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 748   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | transferLaureate        | 736   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 4109081)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 5716489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.51s (9.51s CPU time)\n\nRan 34 test suites in 9.51s (25.77s CPU time): 297 tests passed, 0 failed, 1 skipped (298 total tests)\n","passed":true},{"durationMs":137,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Laureates.approve(address,uint256)\",\"Laureates.mint(address,uint256,uint8,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256,bytes)\",\"Laureates.setApprovalForAll(address,bool)\",\"Laureates.setName(string)\",\"Laureates.transferFrom(address,address,uint256)\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address,address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":67,\"README.md\":203,\"foundry.toml\":24,\"launch.json\":60,\"remappings.txt\":4,\"script/Deploy.s.sol\":52,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":632,\"src/Laureates.sol\":227,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":123,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":1004,\"src/PleaLaunch.sol\":107,\"src/Seasons.sol\":386,\"src/interfaces/IPleaParts.sol\":77,\"src/interfaces/IStacker.sol\":10,\"test/AuditRevision.t.sol\":260,\"test/BonusInvariant.t.sol\":528,\"test/DistributorAdversarial.t.sol\":331,\"test/Gate.t.sol\":387,\"test/GateAdversarial.t.sol\":370,\"test/GateFailureInvariant.t.sol\":330,\"test/Hook.t.sol\":288,\"test/HookAdversarial.t.sol\":272,\"test/HookRevision.t.sol\":308,\"test/Launch.t.sol\":145,\"test/LaunchManifest.t.sol\":248,\"test/OracleConformance.t.sol\":114,\"test/OracleReplay.t.sol\":59,\"test/Orientation.t.sol\":58,\"test/SeasonAdversarial.t.sol\":331,\"test/SeasonFunds.t.sol\":345,\"test/SeasonInvariant.t.sol\":393,\"test/SeasonRanking.t.sol\":195,\"test/Seasons.t.sol\":279,\"test/Token.t.sol\":78,\"test/TradingInvariant.t.sol\":460,\"test/fork/ForkTestnet.t.sol\":600,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":219,\"test/utils/Mocks.sol\":256,\"test/utils/SeasonModel.sol\":112,\"test/utils/SepoliaFixture.sol\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"5cb439e1d44697a0b63e23139f06d75e2f0ec9ec0acb9c817f66c67a8b76c46d","verifiedTreeHash":"0a5cced7d5ef379522134642880885133481cb6a","verifierVersion":"0.1.0+fb8278c5"},{"checks":[{"durationMs":191726,"exitCode":0,"name":"build","output":"Compiling 137 files with Solc 0.8.26\nSolc 0.8.26 finished in 191.59s\nCompiler run successful!\n","passed":true},{"durationMs":9707,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 677.04µs (0.00ns CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10505)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 133061)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13921)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.27ms (1.03ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 15373008)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 16064889)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 15532013)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.36ms (6.58ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 211069)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183716)\n[PASS] test_launcherAndInitAreOneShot() (gas: 127083)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 321856)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 11.14ms (876.53µs CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 24002, ~: 24108)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 746000)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42979)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 24.30ms (5.64ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:PostLaunchHookTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 40363008)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 34.60ms (27.43ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259280, ~: 259290)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1723892)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317019)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260370)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 275936)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 40.11ms (40.51ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 33226250)\nLogs:\n  six-contract factory deployment gas: 17246276\n  margin to the 16,777,216 mainnet cap: -469060\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 49.50ms (43.06ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 5631935, ~: 5631938)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 5886919)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 5481479)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 54.02ms (53.37ms CPU time)\n\nRan 20 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1261591)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1702709)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1118181)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 18018)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1692212)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1310208)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1885317)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 587697)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1113639)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2603266)\n[PASS] test_orientationIsPleaZero() (gas: 15910)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1214605)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4569507)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 762874)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1830759)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34204143)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2793603)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2768347)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16704728)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33099071)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 132.91ms (116.36ms CPU time)\n\nRan 19 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1261591)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1702687)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1118181)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 18018)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1692212)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1310186)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1885317)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 587675)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1113617)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2603266)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1214605)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4569507)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 762874)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1830737)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34204143)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2793603)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2768304)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16704728)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33099049)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 136.86ms (95.88ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1163826, ~: 1169646)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1205976)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 669283)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135432)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1241805)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64062)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1323815)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2567964)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290467)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 617546)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 139.70ms (139.25ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1163446, ~: 1169474)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1205660)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 669555)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134604)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1226117)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64122)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1324151)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2568766)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290491)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 618234)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 150.75ms (119.94ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4132636, ~: 4139230)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8755159)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1652151)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1089914)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8884747)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6393815)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2185154)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11416479)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1066131)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8057871)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1254723)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6432893)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 152.88ms (135.97ms CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1261321, ~: 1301956)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24187)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1790146)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75260)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1601855)\n[PASS] test_deathBeforeTheFourthSeasonBurnsTheRest() (gas: 1149672)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1604836)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 220057)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 813140)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1721459)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1213809)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43426)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2507394)\n[PASS] test_onlyTheFirstFourSeasonsPayABonus() (gas: 3686495)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 874036)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1124005)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 172.02ms (37.12ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095169)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6536218)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3990731)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286193)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824274)\n[PASS] test_callbackFitsTheStipend() (gas: 5523847)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5877266)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070167)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273566)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244653)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_orientationIsPleaZero() (gas: 15922)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421972)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167155)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213178)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1490276)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455207)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299519)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 172.02ms (39.02ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275363)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 232988)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658785)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821924)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8887440)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387270)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033059)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502553)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 172.04ms (85.64ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 44320202)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 43579390)\nLogs:\n  launch (6 contracts + intake mock): 1232029\n  deployHook: 5390750\n  seed: 576168\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 1266174)\n[PASS] test_ownerMaySeedEarly() (gas: 43594342)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 43690574)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 172.21ms (129.40ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095147)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6536196)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3990731)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286171)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824252)\n[PASS] test_callbackFitsTheStipend() (gas: 5523825)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5877244)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070145)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273544)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244631)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421950)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167133)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213156)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1490261)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455185)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299497)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 206.30ms (56.44ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4138356, ~: 4141636)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8755596)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1651951)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1090602)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8885184)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6394252)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2185272)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11418626)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1066929)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8059018)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1255172)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6433330)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 206.35ms (147.49ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3274701)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233010)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1288368)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 31800880)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1265028)\n[PASS] test_fastFullCycle() (gas: 57270253)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13499)\n[PASS] test_onlyApprovedPleasScore() (gas: 3384311)\n[PASS] test_secondSeasonScoresSeparately() (gas: 34734107)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 2587016)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 86859135)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 215.76ms (88.55ms CPU time)\n\nRan 11 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 2220041, ~: 2220973)\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 256, μ: 297469, ~: 294313)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5420937, ~: 5432895)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1289716)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 815807)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 562424)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 872899)\n[PASS] test_metadataDecodesToValidJsonAndEscapesUntrustedTextInSvg() (gas: 3039852)\n[PASS] test_onlySeasonsMintsAndFailedMintCannotIncrementSupply() (gas: 307118)\n[PASS] test_prizesRequireSixtyPointsButLaureatesDoNot() (gas: 1666957)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 958273)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 215.94ms (537.11ms CPU time)\n\nRan 6 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 11291632, ~: 11302214)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizesAndNfts() (gas: 1393533)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 880238)\n[PASS] test_earlierTiedPleaTakesFirstAndFifthLaureateSlots() (gas: 1192034)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 880206)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 911090)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 222.08ms (223.02ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275385)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233099)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658807)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821946)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8887440)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387292)\n[PASS] test_orientationIsPleaZero() (gas: 15702)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033081)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502575)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 301.16ms (87.24ms CPU time)\n\nRan 17 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 3382223, ~: 3385104)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 4551390, ~: 4559727)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 3470601, ~: 3481428)\n[PASS] test_amountLimitsFailBeforeChargingAndOneWeiCanBeSubmitted() (gas: 3403352)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 5775555)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 6257953)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 5521163)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 3405856)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 3301422)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 5309601)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 5501336)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 86519)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 3290977)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 838223)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 3379245)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 3874238)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 4526962)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 301.44ms (497.29ms CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1053  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1008  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1021  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 984   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 1023  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 1049  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 1020  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1034  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.53s (1.52s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 756   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 790   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 739   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 722   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 739   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 750   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 758   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 753   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 687   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2954200, ~: 2943422)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7667727)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.20s (3.23s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 756   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 790   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 739   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 722   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 739   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 750   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 758   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 753   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 687   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2953384, ~: 2942606)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7672589)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.29s (3.34s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_nftsRemainUniqueAndOwnedAfterRandomTransfers\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 770   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 718   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 710   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 718   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 746   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 773   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 770   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 760   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 763   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 741   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | transferLaureate        | 723   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 4109081)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 5716489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.58s (9.59s CPU time)\n\nRan 29 test suites in 9.59s (20.90s CPU time): 266 tests passed, 0 failed, 1 skipped (267 total tests)\n","passed":true},{"durationMs":92,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Laureates.approve(address,uint256)\",\"Laureates.mint(address,uint256,uint8,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256,bytes)\",\"Laureates.setApprovalForAll(address,bool)\",\"Laureates.setName(string)\",\"Laureates.transferFrom(address,address,uint256)\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address,address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":73,\"README.md\":203,\"foundry.toml\":24,\"launch.json\":60,\"remappings.txt\":4,\"script/Deploy.s.sol\":52,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":632,\"src/Laureates.sol\":227,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":123,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":1006,\"src/PleaLaunch.sol\":107,\"src/Seasons.sol\":386,\"src/interfaces/IPleaParts.sol\":77,\"src/interfaces/IStacker.sol\":10,\"test/AuditRevision.t.sol\":260,\"test/DistributorAdversarial.t.sol\":331,\"test/Gate.t.sol\":387,\"test/GateAdversarial.t.sol\":370,\"test/Hook.t.sol\":357,\"test/HookAdversarial.t.sol\":272,\"test/Launch.t.sol\":145,\"test/LaunchManifest.t.sol\":248,\"test/OracleConformance.t.sol\":114,\"test/OracleReplay.t.sol\":59,\"test/Orientation.t.sol\":58,\"test/SeasonAdversarial.t.sol\":331,\"test/SeasonFunds.t.sol\":345,\"test/SeasonInvariant.t.sol\":393,\"test/SeasonRanking.t.sol\":195,\"test/Seasons.t.sol\":279,\"test/Token.t.sol\":78,\"test/TradingInvariant.t.sol\":454,\"test/fork/ForkTestnet.t.sol\":600,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":219,\"test/utils/Mocks.sol\":266,\"test/utils/SeasonModel.sol\":112,\"test/utils/SepoliaFixture.sol\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":14293,"exitCode":0,"name":"slither","output":"[high/medium] weak-prng at src/PleaHook.sol:918: PleaHook._updateWallGuard(int24) (src/PleaHook.sol#918-943) uses a weak PRNG: \"guardRemainder = numerator % 86400 (src/PleaHook.sol#930)\"\n[high/medium] weak-prng at src/PleaHook.sol:945: PleaHook._checkpoint(uint160) (src/PleaHook.sol#945-954) uses a weak PRNG: \"c = ring[hour % 25] (src/PleaHook.sol#947)\"\n[high/high] uninitialized-state at src/Seasons.sol:99: Seasons._best (src/Seasons.sol#68) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:172: Seasons._bestPleaIds (src/Seasons.sol#69) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:95: Seasons._topPleas (src/Seasons.sol#67) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:91: Seasons._top (src/Seasons.sol#66) is never initialized. It is used in:\n[medium/medium] divide-before-multiply at src/PleaHook.sol:976: PleaHook._alignUp(int24) (src/PleaHook.sol#976-980) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/PleaHook.sol:982: PleaHook._alignDown(int24) (src/PleaHook.sol#982-986) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/PleaHook.sol:748: PleaHook._rebalance() (src/PleaHook.sol#748-809) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:222: CabalGate.factScore(address,uint256) (src/CabalGate.sol#222-254) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:290: PleaHook.launchExtraBps() (src/PleaHook.sol#290-295) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:673: PleaHook._applyCap() (src/PleaHook.sol#673-715) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:135: Seasons.checkpoint() (src/Seasons.sol#135-146) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:673: PleaHook._applyCap() (src/PleaHook.sol#673-715) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:193: CabalGate.diedAt() (src/CabalGate.sol#193-196) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:748: PleaHook._rebalance() (src/PleaHook.sol#748-809) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:320: PleaHook._pleaIn(PleaHook.Band,uint160) (src/PleaHook.sol#320-332) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:736: PleaHook.rebalance() (src/PleaHook.sol#736-743) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:294: Seasons.flushToWall() (src/Seasons.sol#294-312) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:549: CabalGate._escape(string) (src/CabalGate.sol#549-563) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:188: CabalGate.restricted() (src/CabalGate.sol#188-190) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:549: CabalGate._escape(string) (src/CabalGate.sol#549-563) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:883: PleaHook._settleImd(uint256) (src/PleaHook.sol#883-888) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:811: PleaHook._closeWall() (src/PleaHook.sol#811-828) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:382: Seasons._pay(address,uint256) (src/Seasons.sol#382-385) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:673: Reentrancy in PleaHook._applyCap() (src/PleaHook.sol#673-715):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:648: Reentrancy in PleaHook._payCashback(address,uint256) (src/PleaHook.sol#648-665):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:736: Reentrancy in PleaHook.rebalance() (src/PleaHook.sol#736-743):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:811: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#811-828):\n[medium/medium] reentrancy-no-eth at src/Seasons.sol:294: Reentrancy in Seasons.flushToWall() (src/Seasons.sol#294-312):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:748: Reentrancy in PleaHook._rebalance() (src/PleaHook.sol#748-809):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:836: Reentrancy in PleaHook._payTip(address,uint256) (src/PleaHook.sol#836-844):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:466: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#466-537):\n[medium/medium] reentrancy-no-eth at src/CabalGate.sol:315: Reentrancy in CabalGate._ask(uint256) (src/CabalGate.sol#315-330):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:466: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#466-537):\n[medium/medium] reentrancy-no-eth at src/Seasons.sol:251: Reentrancy in Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290):\n[medium/medium] reentrancy-no-eth at src/CabalGate.sol:270: Reentrancy in CabalGate.appeal(uint256,uint256,string) (src/CabalGate.sol#270-291):\n[medium/medium] uninitialized-local at src/Laureates.sol:159: Laureates._svg(Laureates.Laureate,uint8,string,string,string).i (src/Laureates.sol#159) is a local variable never initialized\n[medium/medium] uninitialized-local at src/CabalGate.sol:557: CabalGate._escape(string).j (src/CabalGate.sol#557) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Laureates.sol:205: Laureates._escapeXml(bytes).out (src/Laureates.sol#205) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:361: Seasons._payBonus(uint256,Seasons.Entry[10]).paid (src/Seasons.sol#361) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Laureates.sol:220: Laureates._escapeJson(string).out (src/Laureates.sol#220) is a local variable never initialized\n[medium/medium] uninitialized-local at src/CabalGate.sol:551: CabalGate._escape(string).extra (src/CabalGate.sol#551) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:177: Seasons._record(uint256,uint256,address,uint8).mi (src/Seasons.sol#177) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:279: PleaHook.price24hAgo().bestHour (src/PleaHook.sol#279) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:555: PleaHook._payFees(address,bool,uint256,uint256,uint256).toPrize (src/PleaHook.sol#555) is a local variable never initialized\n[medium/medium] uninitialized-local at src/CabalGate.sol:580: CabalGate._validateText(string).len (src/CabalGate.sol#580) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:266: Seasons.closeSeason(uint256[]).paid (src/Seasons.sol#266) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:182: Seasons._record(uint256,uint256,address,uint8).pts (src/Seasons.sol#182) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:266: PleaHook.latestPrice().bestHour (src/PleaHook.sol#266) is a local variable never initialized\n[medium/medium] unused-return at src/PleaHook.sol:748: PleaHook._rebalance() (src/PleaHook.sol#748-809) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:int256(uint256(liquidity)),salt:0}),) (src/PleaHook.sol#789-795)\n[medium/medium] unused-return at src/PleaHook.sol:243: PleaHook.currentSqrtPriceX96() (src/PleaHook.sol#243-245) ignores return value by (sqrtPriceX96,None,None,None) = poolManager.getSlot0(poolId()) (src/PleaHook.sol#244)\n[medium/medium] unused-return at src/PleaHook.sol:853: PleaHook.unlockCallback(bytes) (src/PleaHook.sol#853-881) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:int256(uint256(liquidity)),salt:0}),) (src/PleaHook.sol#860-866)\n[medium/medium] unused-return at src/OracleAttestation.sol:158: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/OracleAttestation.sol#158-171) ignores return value by (recovered,err,None) = ECDSA.tryRecover(digest,signature) (src/OracleAttestation.sol#166)\n[medium/medium] unused-return at src/CabalGate.sol:360: CabalGate._stale(CabalGate.Plea) (src/CabalGate.sol#360-364) ignores return value by (None,None,None,completed) = intake.requests(p.intakeId) (src/CabalGate.sol#362)\n[medium/medium] unused-return at src/PleaHook.sol:883: PleaHook._settleImd(uint256) (src/PleaHook.sol#883-888) ignores return value by poolManager.settle() (src/PleaHook.sol#887)\n[medium/medium] unused-return at src/CabalGate.sol:467: CabalGate.unlockCallback(bytes) (src/CabalGate.sol#467-494) ignores return value by pm.settle() (src/CabalGate.sol#491)\n[medium/medium] unused-return at src/PleaHook.sol:247: PleaHook.currentTick() (src/PleaHook.sol#247-249) ignores return value by (None,tick,None,None) = poolManager.getSlot0(poolId()) (src/PleaHook.sol#248)\n[medium/medium] unused-return at src/Seasons.sol:251: Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290) ignores return value by (seller,None,None,None) = gate.result(lp[i_scope_1].pleaId) (src/Seasons.sol#286)\n[medium/medium] unused-return at src/PleaHook.sol:853: PleaHook.unlockCallback(bytes) (src/PleaHook.sol#853-881) ignores return value by poolManager.settle() (src/PleaHook.sol#873)\n[medium/medium] unused-return at src/Seasons.sol:316: Seasons._redeemClaims() (src/Seasons.sol#316-323) ignores return value by pm.unlock(abi.encode(amount)) (src/Seasons.sol#322)\n[medium/medium] unused-return at src/PleaHook.sol:717: PleaHook._removeLiquidity(int24,int24,uint256) (src/PleaHook.sol#717-729) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:- int256(liquidity),salt:0}),) (src/PleaHook.sol#721-725)\n[medium/medium] unused-return at src/Laureates.sol:83: Laureates.tokenURI(uint256) (src/Laureates.sol#83-96) ignores return value by (seller,score,None,None) = g.result(l.pleaId) (src/Laureates.sol#87)\n[low/medium] missing-zero-check at src/PleaLaunch.sol:50: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).plea_ (src/PleaLaunch.sol#50) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:55: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).poolManager_ (src/PleaLaunch.sol#55) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:189: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).plea_ (src/PleaHook.sol#189) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:192: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).owner_ (src/PleaHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:65: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).owner_ (src/PleaLaunch.sol#65) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:51: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).gate_ (src/PleaLaunch.sol#51) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:193: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).seasons_ (src/PleaHook.sol#193) lacks a zero-check on :\n[low/medium] calls-loop at src/Seasons.sol:335: Seasons._tryRecord(uint256) (src/Seasons.sol#335-342) has external calls inside a loop: (seller,score,approved,verdictAt) = gate.result(pleaId) (src/Seasons.sol#337)\n[low/medium] calls-loop at src/Seasons.sol:382: Seasons._pay(address,uint256) (src/Seasons.sol#382-385) has external calls inside a loop: (ok,ret) = address(imd).call(abi.encodeCall(IERC20.transfer,(to,amount))) (src/Seasons.sol#383)\n[low/medium] calls-loop at src/Seasons.sol:251: Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290) has external calls inside a loop: (seller,None,None,None) = gate.result(lp[i_scope_1].pleaId) (src/Seasons.sol#286)\n[low/medium] calls-loop at src/Seasons.sol:359: Seasons._payBonus(uint256,Seasons.Entry[10]) (src/Seasons.sol#359-379) has external calls inside a loop: (ok,ret) = address(token).call(abi.encodeCall(IERC20.transfer,(t[i].wallet,amount))) (src/Seasons.sol#365)\n[low/medium] calls-loop at src/Seasons.sol:168: Seasons._seasonOf(uint64) (src/Seasons.sol#168-170) has external calls inside a loop: (uint256(verdictAt) - gate.startedAt()) / SEASON (src/Seasons.sol#169)\n[low/medium] calls-loop at src/Seasons.sol:251: Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290) has external calls inside a loop: tokenId = l.mint(seller,season,uint8(i_scope_1 + 1),lp[i_scope_1].pleaId) (src/Seasons.sol#287)\n[low/medium] reentrancy-benign at src/PleaHook.sol:811: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#811-828):\n[low/medium] reentrancy-benign at src/PleaHook.sol:748: Reentrancy in PleaHook._rebalance() (src/PleaHook.sol#748-809):\n[low/medium] reentrancy-benign at src/Seasons.sol:359: Reentrancy in Seasons._payBonus(uint256,Seasons.Entry[10]) (src/Seasons.sol#359-379):\n[low/medium] reentrancy-benign at src/PleaHook.sol:356: Reentrancy in PleaHook.seed() (src/PleaHook.sol#356-398):\n[low/medium] reentrancy-benign at src/PleaHook.sol:544: Reentrancy in PleaHook._payFees(address,bool,uint256,uint256,uint256) (src/PleaHook.sol#544-588):\n[low/medium] reentrancy-benign at src/PleaHook.sol:466: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#466-537):\n[low/medium] reentrancy-benign at src/PleaHook.sol:811: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#811-828):\n[low/medium] reentrancy-benign at src/PleaHook.sol:648: Reentrancy in PleaHook._payCashback(address,uint256) (src/PleaHook.sol#648-665):\n[low/medium] reentrancy-benign at src/PleaHook.sol:748: Reentrancy in PleaHook._rebalance() (src/PleaHook.sol#748-809):\n[low/medium] reentrancy-benign at src/PleaHook.sol:356: Reentrancy in PleaHook.seed() (src/PleaHook.sol#356-398):\n[low/medium] reentrancy-benign at src/PleaHook.sol:673: Reentrancy in PleaHook._applyCap() (src/PleaHook.sol#673-715):\n[low/medium] reentrancy-benign at src/PleaHook.sol:356: Reentrancy in PleaHook.seed() (src/PleaHook.sol#356-398):\n[low/medium] reentrancy-benign at src/PleaHook.sol:544: Reentrancy in PleaHook._payFees(address,bool,uint256,uint256,uint256) (src/PleaHook.sol#544-588):\n[low/medium] reentrancy-benign at src/PleaHook.sol:544: Reentrancy in PleaHook._payFees(address,bool,uint256,uint256,uint256) (src/PleaHook.sol#544-588):\n[low/medium] reentrancy-benign at src/Seasons.sol:294: Reentrancy in Seasons.flushToWall() (src/Seasons.sol#294-312):\n[low/medium] reentrancy-benign at src/PleaHook.sol:811: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#811-828):\n[low/medium] reentrancy-benign at src/PleaHook.sol:673: Reentrancy in PleaHook._applyCap() (src/PleaHook.sol#673-715):\n[low/medium] reentrancy-benign at src/CabalGate.sol:315: Reentrancy in CabalGate._ask(uint256) (src/CabalGate.sol#315-330):\n[low/medium] reentrancy-benign at src/PleaHook.sol:466: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#466-537):\n[low/medium] reentrancy-benign at src/Seasons.sol:294: Reentrancy in Seasons.flushToWall() (src/Seasons.sol#294-312):\n[low/medium] reentrancy-events at src/PleaHook.sol:466: Reentrancy in PleaHook.afterSwap(address","passed":true},{"durationMs":961,"exitCode":0,"name":"aderyn","output":"[high] abi-encode-packed-hash-collision at src/PleaLaunch.sol:68: `abi.encodePacked()` Hash Collision\n[high] reentrancy-state-change at src/CabalGate.sol:173: Reentrancy: State change after external call (12 places)\n[high] storage-array-memory-edit at src/PleaHook.sol:298: Storage Array Edited with Memory (3 places)\n[high] unsafe-casting at src/CabalGate.sol:303: Unsafe Casting of integers (4 places)\n[low] centralization-risk at src/PLEA.sol:13: Centralization Risk (4 places)\n[low] costly-loop at src/Seasons.sol:220: Costly operations inside loop (3 places)\n[low] internal-function-used-once at src/OracleAttestation.sol:206: Internal Function Used Only Once\n[low] large-numeric-literal at src/CabalGate.sol:225: Large Numeric Literal (8 places)\n[low] literal-instead-of-constant at src/CabalGate.sol:225: Literal Instead of Constant (77 places)\n[low] missing-inheritance at src/PleaHook.sol:35: Missing Inheritance (2 places)\n[low] require-revert-in-loop at src/CabalGate.sol:572: Loop Contains `require`/`revert` (3 places)\n[low] state-change-without-event at src/CabalGate.sol:467: State Change Without Event (3 places)\n[low] unchecked-return at src/CabalGate.sol:491: Unchecked Return (5 places)\n[low] uninitialized-local-variable at src/CabalGate.sol:551: Uninitialized Local Variable (13 places)\n[low] unsafe-erc20-operation at src/PleaHook.sol:658: Unsafe ERC20 Operation (4 places)\n[low] unsafe-oz-erc721-mint at src/Laureates.sol:41: Unsafe `ERC721::_mint()`\n[low] unused-import at src/PleaLaunch.sol:4: Unused Import (3 places)\n[low] unused-public-function at src/CabalGate.sol:193: Public Function Not Used Internally (7 places)\n[low] unused-state-variable at src/PLEA.sol:26: Unused State Variable (5 places)","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"62e2c746703f7089c59050d0321c8c16f34450ad9ddb04a3b1aa65524e427d9d","verifiedTreeHash":"87aac6da8961eb7ed2fe5806ca0575aec5e7861e","verifierVersion":"0.1.0+fb8278c5"},{"checks":[{"durationMs":211079,"exitCode":0,"name":"build","output":"Compiling 139 files with Solc 0.8.26\nSolc 0.8.26 finished in 210.95s\nCompiler run successful!\n","passed":true},{"durationMs":22604,"exitCode":1,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 583.37µs (0.00ns CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10505)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 133061)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13921)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.01ms (594.53µs CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1245293, ~: 1199194)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24187)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1790146)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75260)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1601855)\n[PASS] test_deathBeforeTheFourthSeasonBurnsTheRest() (gas: 1149672)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1604836)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 220057)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 813140)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1721459)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1213809)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43426)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2507394)\n[PASS] test_onlyTheFirstFourSeasonsPayABonus() (gas: 3686495)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 874036)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1124005)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 17.62ms (36.62ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 15380399)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 16072418)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 15539403)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 17.70ms (4.67ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 211069)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183716)\n[PASS] test_launcherAndInitAreOneShot() (gas: 127083)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 321856)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 22.86ms (467.41µs CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 33235365)\nLogs:\n  six-contract factory deployment gas: 17253706\n  margin to the 16,777,216 mainnet cap: -476490\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 27.89ms (20.48ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:PostLaunchHookTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 11550057)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 38.44ms (17.21ms CPU time)\n\nRan 1 test for test/AdvisoryRevision.t.sol:AdvisoryRevisionTest\n[PASS] test_tinyApprovalsCanQualifyForPrizesWithoutExecution() (gas: 8003637)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 38.55ms (3.20ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259270, ~: 259233)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1723892)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317019)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260370)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 275936)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 42.28ms (34.88ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095147)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6539725)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3994260)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286171)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824252)\n[PASS] test_callbackFitsTheStipend() (gas: 5523825)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5880773)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070145)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273544)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244631)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421950)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167133)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213156)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1497237)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455185)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299497)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 52.58ms (27.68ms CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23978, ~: 24108)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 748590)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42979)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 62.41ms (6.39ms CPU time)\n\nRan 14 tests for test/HookRevision.t.sol:HookRevisionPleaZeroTest\n[PASS] test_creditCannotPullMoreThanCurrentCashback() (gas: 1602627)\n[PASS] test_drainingSellCannotPoisonWallGuard() (gas: 2802690)\n[PASS] test_emptyPriceLimitInsideUsableRangeCannotPoisonWallGuard() (gas: 3888022)\n[PASS] test_exhaustedCreditRevokesAllowanceBeforePlainFallback() (gas: 2666464)\n[PASS] test_firstBuyImpactCannotChangeScoreAcrossIdleRingRollover() (gas: 5976451)\n[PASS] test_firstBuyOfHourCannotSetItsOwnFactScorePrice() (gas: 6570063)\n[PASS] test_firstExactOutputBuyCheckpointsThePriceBeforeImpact() (gas: 1287773)\n[PASS] test_firstSellOfHourCheckpointsThePriceBeforeImpact() (gas: 1388418)\n[PASS] test_guardStillFollowsPricesActuallyTradedInsideWall() (gas: 2063363)\n[PASS] test_repeatedEmptyClosesCannotPoisonWallReference() (gas: 27249103)\n[PASS] test_revertedSwapDoesNotCreateCheckpoint() (gas: 2065668)\n[PASS] test_stackerCannotPullReserveOutsideCredit() (gas: 531495)\n[PASS] test_successfulCreditHasNoStandingAllowance() (gas: 1396379)\n[PASS] test_unusedCreditAllowanceIsRevokedEvenOnSuccess() (gas: 1560052)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 70.93ms (72.46ms CPU time)\n\nRan 14 tests for test/HookRevision.t.sol:HookRevisionTest\n[PASS] test_creditCannotPullMoreThanCurrentCashback() (gas: 1603201)\n[PASS] test_drainingSellCannotPoisonWallGuard() (gas: 2803041)\n[PASS] test_emptyPriceLimitInsideUsableRangeCannotPoisonWallGuard() (gas: 3887718)\n[PASS] test_exhaustedCreditRevokesAllowanceBeforePlainFallback() (gas: 2667266)\n[PASS] test_firstBuyImpactCannotChangeScoreAcrossIdleRingRollover() (gas: 5978483)\n[PASS] test_firstBuyOfHourCannotSetItsOwnFactScorePrice() (gas: 6571752)\n[PASS] test_firstExactOutputBuyCheckpointsThePriceBeforeImpact() (gas: 1287637)\n[PASS] test_firstSellOfHourCheckpointsThePriceBeforeImpact() (gas: 1388559)\n[PASS] test_guardStillFollowsPricesActuallyTradedInsideWall() (gas: 2058594)\n[PASS] test_repeatedEmptyClosesCannotPoisonWallReference() (gas: 27333439)\n[PASS] test_revertedSwapDoesNotCreateCheckpoint() (gas: 2066157)\n[PASS] test_stackerCannotPullReserveOutsideCredit() (gas: 527238)\n[PASS] test_successfulCreditHasNoStandingAllowance() (gas: 1397181)\n[PASS] test_unusedCreditAllowanceIsRevokedEvenOnSuccess() (gas: 1560626)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 88.66ms (45.66ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 5631937, ~: 5631938)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 5886919)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 5481479)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 99.02ms (80.39ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095169)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6539747)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3994260)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286193)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824274)\n[PASS] test_callbackFitsTheStipend() (gas: 5523847)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5880795)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070167)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273566)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244653)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_orientationIsPleaZero() (gas: 15922)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421972)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167155)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213178)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1497252)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455207)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299519)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 104.80ms (35.61ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4156096, ~: 4155719)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8755873)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1659750)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1090628)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8885461)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6394529)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2190062)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11455555)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1067551)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8062773)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1256143)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6433607)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 131.91ms (122.81ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1167289, ~: 1162075)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1209875)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 670187)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134598)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1222174)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64122)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1328277)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2570182)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290437)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 618937)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 184.64ms (150.58ms CPU time)\n\nRan 14 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1265713)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1710283)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1122361)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1699798)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1314300)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1892971)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 588279)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1117733)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1216008)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4600243)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 763387)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34532802)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16839824)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 196.51ms (65.65ms CPU time)\n\nRan 6 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 11259171, ~: 11251887)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizesAndNfts() (gas: 1393533)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 880238)\n[PASS] test_earlierTiedPleaTakesFirstAndFifthLaureateSlots() (gas: 1192034)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 880206)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 911090)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 198.30ms (199.33ms CPU time)\n\nRan 15 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1265713)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1710305)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1122361)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1699798)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1314322)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1892971)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 588301)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1117755)\n[PASS] test_orientationIsPleaZero() (gas: 15851)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1216008)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4600243)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 763387)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34532802)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16839824)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 177.46ms (58.09ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275363)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 232988)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658785)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821924)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8890928)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387270)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033059)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502553)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 201.54ms (81.45ms CPU time)\n\nRan 11 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 2220056, ~: 2220973)\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 256, μ: 298116, ~: 296967)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5414958, ~: 5432883)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1289716)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 815807)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 562424)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 872899)\n[PASS] test_metadataDecodesToValidJsonAndEscapesUntrustedTextInSvg() (gas: 3039852)\n[PASS] test_onlySeasonsMintsAndFailedMintCannotIncrementSupply() (gas: 307118)\n[PASS] test_prizesRequireSixtyPointsButLaureatesDoNot() (gas: 1666957)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 958273)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 182.17ms (339.33ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4159486, ~: 4160428)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8756316)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1659568)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1091322)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8885904)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6394972)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2190198)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11457774)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1068361)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8063938)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1256604)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6434050)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 201.84ms (128.87ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1167579, ~: 1170479)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1210179)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 669909)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135426)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1237170)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64062)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1327929)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2569368)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290413)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 618243)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 280.02ms (267.93ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275385)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233099)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658807)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821946)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8890928)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387292)\n[PASS] test_orientationIsPleaZero() (gas: 15702)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033081)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502575)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 271.72ms (83.54ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3274701)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233010)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1288368)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 31800880)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1268516)\n[PASS] test_fastFullCycle() (gas: 57270253)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13499)\n[PASS] test_onlyApprovedPleasScore() (gas: 3384311)\n[PASS] test_secondSeasonScoresSeparately() (gas: 34734107)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 2587016)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 86859135)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 297.58ms (73.59ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 53599330)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 52847867)\nLogs:\n  launch (6 contracts + intake mock): 1232029\n  deployHook: 5414393\n  seed: 576168\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 1266174)\n[PASS] test_ownerMaySeedEarly() (gas: 52862819)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 52959051)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 297.61ms (126.97ms CPU time)\n\nRan 17 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 3382496, ~: 3385104)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 4678426, ~: 4827350)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 3469451, ~: 3459096)\n[PASS] test_amountLimitsFailBeforeChargingAndOneWeiCanBeSubmitted() (gas: 3403352)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 5775555)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 6257953)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 5521163)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 3405856)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 3301422)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 5309601)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 5501336)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 86519)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 3290977)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 838223)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 3379245)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 3877767)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 4533978)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 297.76ms (434.71ms CPU time)\n{\"timestamp\":1791734194,\"event\":\"failure\",\"invariant\":\"invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\",\"target\":\"test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\",\"reason\":\"custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4\"}\n{\"timestamp\":1791734194,\"event\":\"failure\",\"invariant\":\"invariant_quoteConservationAndFeePaymentsMatchTheirCounters\",\"target\":\"test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\",\"reason\":\"custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4\"}\n{\"timestamp\":1791734194,\"event\":\"failure\",\"invariant\":\"invariant_wallReservesClaimsAndGateStateRemainBacked\",\"target\":\"test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\",\"reason\":\"custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4\"}\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1079  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1053  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1042  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 966   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 990   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 991   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 1047  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1024  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.48s (1.48s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 738   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 730   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 721   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 746   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 786   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 727   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 739   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 723   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 822   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 731   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 729   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2954803, ~: 2944854)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7675089)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.23s (3.24s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_nftsRemainUniqueAndOwnedAfterRandomTransfers\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 771   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 739   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 755   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 718   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 754   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 771   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 765   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 724   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 750   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 719   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | transferLaureate        | 726   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 4109081)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 5716489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.43s (9.43s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n\t[Sequence] (original: 41, shrunk: 10)\n\t\tsender=0xba4a09397fb532d491A01956aF9f7EC83825E535 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1461501637330902918203684832716283019655932542875 [1.461e48]]\n\t\tsender=0xE549c5d4a0d2a7Bae4f360d7c68A2B029cdeC5D9 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21310 [2.131e4]]\n\t\tsender=0xB727C1F6ce4b18Ab488C599001b9de7DBc50726E addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1359182279 [1.359e9]]\n\t\tsender=0x000000000000000000000000000000001BCE6Ff4 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21600 [2.16e4]]\n\t\tsender=0x70997970C51812dc3A010C7d01b50e0d17dc79C8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[604801 [6.048e5], 1952]\n\t\tsender=0x0000000000000000000000000000000000001f67 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[10269 [1.026e4], 60000 [6e4]]\n\t\tsender=0x0000000000000000000000000000000000000b76 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[1200000000000000000000000 [1.2e24], 17, true]\n\t\tsender=0xA9f55E8A68Ab94FB9542d5d4d6cC3bBA39c17426 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[14511736831313530523309933902012658948977296578 [1.451e46], 7864407422238 [7.864e12]]\n\t\tsender=0x8e55100f7A3067d77d64E142430f9933D72076c8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[10000000000000000000 [1e19], 5700, false]\n\t\tsender=0x0000000000000000000000000000000000000FEE addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[5249, 3967, true]\n\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n\t[Sequence] (original: 41, shrunk: 10)\n\t\tsender=0xba4a09397fb532d491A01956aF9f7EC83825E535 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1461501637330902918203684832716283019655932542875 [1.461e48]]\n\t\tsender=0xE549c5d4a0d2a7Bae4f360d7c68A2B029cdeC5D9 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21310 [2.131e4]]\n\t\tsender=0xB727C1F6ce4b18Ab488C599001b9de7DBc50726E addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1359182279 [1.359e9]]\n\t\tsender=0x000000000000000000000000000000001BCE6Ff4 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21600 [2.16e4]]\n\t\tsender=0x70997970C51812dc3A010C7d01b50e0d17dc79C8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[604801 [6.048e5], 1952]\n\t\tsender=0x0000000000000000000000000000000000001f67 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[10269 [1.026e4], 60000 [6e4]]\n\t\tsender=0x0000000000000000000000000000000000000b76 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[1200000000000000000000000 [1.2e24], 17, true]\n\t\tsender=0xA9f55E8A68Ab94FB9542d5d4d6cC3bBA39c17426 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[14511736831313530523309933902012658948977296578 [1.451e46], 7864407422238 [7.864e12]]\n\t\tsender=0x8e55100f7A3067d77d64E142430f9933D72076c8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[10000000000000000000 [1e19], 5700, false]\n\t\tsender=0x0000000000000000000000000000000000000FEE addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[5249, 3967, true]\n\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_wallReservesClaimsAndGateStateRemainBacked\n\t[Sequence] (original: 41, shrunk: 10)\n\t\tsender=0xba4a09397fb532d491A01956aF9f7EC83825E535 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1461501637330902918203684832716283019655932542875 [1.461e48]]\n\t\tsender=0xE549c5d4a0d2a7Bae4f360d7c68A2B029cdeC5D9 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21310 [2.131e4]]\n\t\tsender=0xB727C1F6ce4b18Ab488C599001b9de7DBc50726E addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1359182279 [1.359e9]]\n\t\tsender=0x000000000000000000000000000000001BCE6Ff4 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21600 [2.16e4]]\n\t\tsender=0x70997970C51812dc3A010C7d01b50e0d17dc79C8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[604801 [6.048e5], 1952]\n\t\tsender=0x0000000000000000000000000000000000001f67 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[10269 [1.026e4], 60000 [6e4]]\n\t\tsender=0x0000000000000000000000000000000000000b76 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[1200000000000000000000000 [1.2e24], 17, true]\n\t\tsender=0xA9f55E8A68Ab94FB9542d5d4d6cC3bBA39c17426 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[14511736831313530523309933902012658948977296578 [1.451e46], 7864407422238 [7.864e12]]\n\t\tsender=0x8e55100f7A3067d77d64E142430f9933D72076c8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[10000000000000000000 [1e19], 5700, false]\n\t\tsender=0x0000000000000000000000000000000000000FEE addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[5249, 3967, true]\n\nTradingPleaZeroInvariantTest invariants: 3/3 invariants broken\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_wallReservesClaimsAndGateStateRemainBacked\n3 invariant failure(s) persisted to cache/invariant/failures/TradingPleaZeroInvariantTest — rerun to shrink\n TradingPleaZeroInvariantTest invariants (runs: 46, calls: 2921, reverts: 1)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 242   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 260   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 251   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 257   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 297   | 1       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 254   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 279   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 243   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 314   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 268   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 256   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2953975, ~: 2944026)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7679942)\nSuite result: FAILED. 2 passed; 1 failed; 0 skipped; finished in 22.49s (22.52s CPU time)\n\nRan 32 test suites in 22.49s (40.24s CPU time): 284 tests passed, 1 failed, 1 skipped (286 total tests)\n\nFailing tests:\nEncountered 1 failing test in test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n\t[Sequence] (original: 41, shrunk: 10)\n\t\tsender=0xba4a09397fb532d491A01956aF9f7EC83825E535 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1461501637330902918203684832716283019655932542875 [1.461e48]]\n\t\tsender=0xE549c5d4a0d2a7Bae4f360d7c68A2B029cdeC5D9 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21310 [2.131e4]]\n\t\tsender=0xB727C1F6ce4b18Ab488C599001b9de7DBc50726E addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1359182279 [1.359e9]]\n\t\tsender=0x000000000000000000000000000000001BCE6Ff4 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21600 [2.16e4]]\n\t\tsender=0x70997970C51812dc3A010C7d01b50e0d17dc79C8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[604801 [6.048e5], 1952]\n\t\tsender=0x0000000000000000000000000000000000001f67 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[10269 [1.026e4], 60000 [6e4]]\n\t\tsender=0x0000000000000000000000000000000000000b76 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[1200000000000000000000000 [1.2e24], 17, true]\n\t\tsender=0xA9f55E8A68Ab94FB9542d5d4d6cC3bBA39c17426 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[14511736831313530523309933902012658948977296578 [1.451e46], 7864407422238 [7.864e12]]\n\t\tsender=0x8e55100f7A3067d77d64E142430f9933D72076c8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[10000000000000000000 [1e19], 5700, false]\n\t\tsender=0x0000000000000000000000000000000000000FEE addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[5249, 3967, true]\n\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n\t[Sequence] (original: 41, shrunk: 10)\n\t\tsender=0xba4a09397fb532d491A01956aF9f7EC83825E535 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1461501637330902918203684832716283019655932542875 [1.461e48]]\n\t\tsender=0xE549c5d4a0d2a7Bae4f360d7c68A2B029cdeC5D9 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21310 [2.131e4]]\n\t\tsender=0xB727C1F6ce4b18Ab488C599001b9de7DBc50726E addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1359182279 [1.359e9]]\n\t\tsender=0x000000000000000000000000000000001BCE6Ff4 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21600 [2.16e4]]\n\t\tsender=0x70997970C51812dc3A010C7d01b50e0d17dc79C8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[604801 [6.048e5], 1952]\n\t\tsender=0x0000000000000000000000000000000000001f67 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[10269 [1.026e4], 60000 [6e4]]\n\t\tsender=0x0000000000000000000000000000000000000b76 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[1200000000000000000000000 [1.2e24], 17, true]\n\t\tsender=0xA9f55E8A68Ab94FB9542d5d4d6cC3bBA39c17426 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[14511736831313530523309933902012658948977296578 [1.451e46], 7864407422238 [7.864e12]]\n\t\tsender=0x8e55100f7A3067d77d64E142430f9933D72076c8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[10000000000000000000 [1e19], 5700, false]\n\t\tsender=0x0000000000000000000000000000000000000FEE addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[5249, 3967, true]\n\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_wallReservesClaimsAndGateStateRemainBacked\n\t[Sequence] (original: 41, shrunk: 10)\n\t\tsender=0xba4a09397fb532d491A01956aF9f7EC83825E535 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1461501637330902918203684832716283019655932542875 [1.461e48]]\n\t\tsender=0xE549c5d4a0d2a7Bae4f360d7c68A2B029cdeC5D9 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21310 [2.131e4]]\n\t\tsender=0xB727C1F6ce4b18Ab488C599001b9de7DBc50726E addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[1359182279 [1.359e9]]\n\t\tsender=0x000000000000000000000000000000001BCE6Ff4 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=advance(uint256) args=[21600 [2.16e4]]\n\t\tsender=0x70997970C51812dc3A010C7d01b50e0d17dc79C8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[604801 [6.048e5], 1952]\n\t\tsender=0x0000000000000000000000000000000000001f67 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[10269 [1.026e4], 60000 [6e4]]\n\t\tsender=0x0000000000000000000000000000000000000b76 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[1200000000000000000000000 [1.2e24], 17, true]\n\t\tsender=0xA9f55E8A68Ab94FB9542d5d4d6cC3bBA39c17426 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=buy(uint256,uint256) args=[14511736831313530523309933902012658948977296578 [1.451e46], 7864407422238 [7.864e12]]\n\t\tsender=0x8e55100f7A3067d77d64E142430f9933D72076c8 addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[10000000000000000000 [1e19], 5700, false]\n\t\tsender=0x0000000000000000000000000000000000000FEE addr=[test/TradingInvariant.t.sol:TradingHandler]0x1aF7f588A501EA2B5bB3feeFA744892aA2CF00e6 calldata=freeSell(uint256,uint256,bool) args=[5249, 3967, true]\n\nTradingPleaZeroInvariantTest invariants: 3/3 invariants broken\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[FAIL: custom error 0x7c9c6e8f: 00000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000001000276a4] invariant_wallReservesClaimsAndGateStateRemainBacked\n3 invariant failure(s) persisted to cache/invariant/failures/TradingPleaZeroInvariantTest — rerun to shrink\n TradingPleaZeroInvariantTest invariants (runs: 46, calls: 2921, reverts: 1)\n\nEncountered a total of 1 failing tests, 284 tests succeeded\n\nTip: Run `forge test --rerun` to retry only the 1 failed test\n\nFuzz seed: 0x1f52970b9886f543fa5c0ee5e276970e0d7fe0eb3c8ed8be1b1c89dca5c75c06 (use `--fuzz-seed` to reproduce)\n","passed":false}],"detail":"test failed with exit code 1","evaluation":"checks","profile":"foundry","status":"rejected","submissionHash":"7929138400aaeabfcdb9431cbe723fa150e6ee02ec550f3ca46fb0c3deaa55fe","verifiedTreeHash":"b86fbeefaf2174fad75e7340c6a87b8274922e36","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":188910,"exitCode":0,"name":"build","output":"Compiling 137 files with Solc 0.8.26\nSolc 0.8.26 finished in 188.78s\nCompiler run successful!\n","passed":true},{"durationMs":9083,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 1.26ms (0.00ns CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10505)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 133061)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13921)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.71ms (1.25ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 15331907)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 16023099)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 15490912)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 7.48ms (4.36ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:PostLaunchHookTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 10243049)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 10.54ms (5.78ms CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1253680, ~: 1301956)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24187)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1790146)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75260)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1601855)\n[PASS] test_deathBeforeTheFourthSeasonBurnsTheRest() (gas: 1149672)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1604836)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 220057)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 813140)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1721459)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1213809)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43426)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2507394)\n[PASS] test_onlyTheFirstFourSeasonsPayABonus() (gas: 3686495)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 874036)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1124005)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 18.73ms (21.84ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 211069)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183716)\n[PASS] test_launcherAndInitAreOneShot() (gas: 127083)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 321856)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 22.15ms (642.07µs CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23985, ~: 24108)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 741652)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42979)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 26.13ms (8.81ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259273, ~: 259258)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1723892)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317019)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260370)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 275936)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 33.78ms (34.72ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 33176529)\nLogs:\n  six-contract factory deployment gas: 17204975\n  margin to the 16,777,216 mainnet cap: -427759\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 40.95ms (37.32ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095147)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6530752)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3985287)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286171)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824252)\n[PASS] test_callbackFitsTheStipend() (gas: 5523825)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5871800)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070145)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273544)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244631)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421950)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167133)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213156)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1479291)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455185)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299497)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 55.54ms (39.75ms CPU time)\n\nRan 15 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1253763)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1689383)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1110411)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1678875)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1302372)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1872048)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585324)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1105805)\n[PASS] test_orientationIsPleaZero() (gas: 15851)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1204071)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4514022)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760410)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 33686364)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16484413)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 68.57ms (56.58ms CPU time)\n\nRan 14 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1253763)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1689361)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1110411)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1678875)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1302350)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1872048)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585302)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1105783)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1204071)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4514022)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760410)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 33686364)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16484413)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 71.04ms (55.21ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 5627705, ~: 5620668)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 5886919)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 5481479)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 76.02ms (57.03ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095169)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6530774)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3985287)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286193)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824274)\n[PASS] test_callbackFitsTheStipend() (gas: 5523847)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5871822)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070167)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273566)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244653)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_orientationIsPleaZero() (gas: 15922)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421972)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167155)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213178)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1479306)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455207)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299519)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 81.54ms (47.20ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 149903764)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 149098061)\nLogs:\n  launch (6 contracts + intake mock): 1232029\n  deployHook: 5375347\n  seed: 578771\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 1266174)\n[PASS] test_ownerMaySeedEarly() (gas: 149113013)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 149209245)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 105.63ms (309.62ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275363)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 232988)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658785)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821924)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8881955)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387270)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033059)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502553)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 131.10ms (76.27ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4090244, ~: 4086124)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8753321)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1638591)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1088327)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8882909)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6391977)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2175217)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11355878)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1062371)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8049237)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1250614)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6431055)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 141.83ms (137.96ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1154569, ~: 1150004)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1197889)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 667192)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134598)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1211530)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64122)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1316292)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2556540)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290437)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 615942)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 148.18ms (139.77ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1154709, ~: 1150224)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1198229)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 666932)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135426)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1226890)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64062)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1315980)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2555762)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290413)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 615266)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 148.23ms (150.26ms CPU time)\n\nRan 6 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 11210849, ~: 11252200)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizesAndNfts() (gas: 1393533)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 880238)\n[PASS] test_earlierTiedPleaTakesFirstAndFifthLaureateSlots() (gas: 1192034)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 880206)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 911090)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 158.40ms (162.21ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275385)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233099)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658807)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821946)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8881955)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387292)\n[PASS] test_orientationIsPleaZero() (gas: 15702)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033081)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502575)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 162.11ms (89.23ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4089251, ~: 4091353)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8752896)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1638827)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1087651)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8882484)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6391552)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2175135)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11353875)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1061597)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8048126)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1250189)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6430630)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 167.93ms (162.21ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3274701)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233010)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1288368)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 31800880)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1259543)\n[PASS] test_fastFullCycle() (gas: 57270253)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13499)\n[PASS] test_onlyApprovedPleasScore() (gas: 3384311)\n[PASS] test_secondSeasonScoresSeparately() (gas: 34734107)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 2587016)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 86859135)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 175.00ms (85.26ms CPU time)\n\nRan 11 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 2220092, ~: 2220973)\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 256, μ: 298333, ~: 296722)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5416433, ~: 5432931)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1289716)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 815807)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 562424)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 872899)\n[PASS] test_metadataDecodesToValidJsonAndEscapesUntrustedTextInSvg() (gas: 3039852)\n[PASS] test_onlySeasonsMintsAndFailedMintCannotIncrementSupply() (gas: 307118)\n[PASS] test_prizesRequireSixtyPointsButLaureatesDoNot() (gas: 1666957)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 958273)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 211.42ms (457.37ms CPU time)\n\nRan 17 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 3381409, ~: 3385104)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 4750149, ~: 4956071)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 3470516, ~: 3481428)\n[PASS] test_amountLimitsFailBeforeChargingAndOneWeiCanBeSubmitted() (gas: 3403352)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 5775555)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 6257953)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 5521163)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 3405856)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 3301422)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 5309601)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 5501336)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 86519)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 3290977)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 838223)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 3379245)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 3868776)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 4496096)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 289.61ms (532.49ms CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1045  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1010  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1015  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 1012  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 1031  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 1038  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 1038  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1003  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.50s (1.49s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 741   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 712   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 774   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 722   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 738   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 716   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 754   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 730   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 798   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 750   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 757   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2949642, ~: 2938864)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7634514)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.18s (3.23s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 741   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 712   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 774   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 722   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 738   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 716   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 754   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 730   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 798   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 750   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 757   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2948850, ~: 2938072)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7639448)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.25s (3.29s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_nftsRemainUniqueAndOwnedAfterRandomTransfers\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 736   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 717   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 752   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 770   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 727   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 777   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 742   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 778   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 708   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 740   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | transferLaureate        | 745   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 4109081)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 5716489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 8.97s (8.97s CPU time)\n\nRan 29 test suites in 8.97s (19.25s CPU time): 256 tests passed, 0 failed, 1 skipped (257 total tests)\n","passed":true},{"durationMs":81,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Laureates.approve(address,uint256)\",\"Laureates.mint(address,uint256,uint8,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256,bytes)\",\"Laureates.setApprovalForAll(address,bool)\",\"Laureates.setName(string)\",\"Laureates.transferFrom(address,address,uint256)\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address,address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":56,\"README.md\":203,\"foundry.toml\":24,\"launch.json\":60,\"remappings.txt\":4,\"script/Deploy.s.sol\":52,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":632,\"src/Laureates.sol\":227,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":123,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":987,\"src/PleaLaunch.sol\":107,\"src/Seasons.sol\":386,\"src/interfaces/IPleaParts.sol\":77,\"src/interfaces/IStacker.sol\":10,\"test/AuditRevision.t.sol\":260,\"test/DistributorAdversarial.t.sol\":331,\"test/Gate.t.sol\":387,\"test/GateAdversarial.t.sol\":370,\"test/Hook.t.sol\":215,\"test/HookAdversarial.t.sol\":272,\"test/Launch.t.sol\":145,\"test/LaunchManifest.t.sol\":248,\"test/OracleConformance.t.sol\":114,\"test/OracleReplay.t.sol\":59,\"test/Orientation.t.sol\":58,\"test/SeasonAdversarial.t.sol\":331,\"test/SeasonFunds.t.sol\":345,\"test/SeasonInvariant.t.sol\":393,\"test/SeasonRanking.t.sol\":195,\"test/Seasons.t.sol\":279,\"test/Token.t.sol\":78,\"test/TradingInvariant.t.sol\":454,\"test/fork/ForkTestnet.t.sol\":600,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":219,\"test/utils/Mocks.sol\":256,\"test/utils/SeasonModel.sol\":112,\"test/utils/SepoliaFixture.sol\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"7bb870797eed3b1db7b44242fcf169894080aa09e1e7de02ac2044e74c0c943f","verifiedTreeHash":"a712fe1448b15d84db65ec448a2b680d8fe2057e","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":420239,"exitCode":0,"name":"build","output":"Compiling 137 files with Solc 0.8.26\nSolc 0.8.26 finished in 419.97s\nCompiler run successful!\n","passed":true},{"durationMs":19765,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 1.25ms (0.00ns CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 211069)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183716)\n[PASS] test_launcherAndInitAreOneShot() (gas: 127083)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 321856)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 14.00ms (1.09ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 15356559)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 16048164)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 15515564)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 32.39ms (22.62ms CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23973, ~: 24108)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 744119)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42979)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 34.77ms (14.03ms CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10505)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 133061)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13921)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 35.77ms (2.94ms CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1250498, ~: 1250638)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24187)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1790146)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75260)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1601855)\n[PASS] test_deathBeforeTheFourthSeasonBurnsTheRest() (gas: 1149672)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1604836)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 220057)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 813140)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1721459)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1213809)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43426)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2507394)\n[PASS] test_onlyTheFirstFourSeasonsPayABonus() (gas: 3686495)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 874036)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1124005)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 34.23ms (41.40ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 33206353)\nLogs:\n  six-contract factory deployment gas: 17229747\n  margin to the 16,777,216 mainnet cap: -452531\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 64.34ms (50.69ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:PostLaunchHookTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 28940463)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 70.63ms (50.30ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259300, ~: 259233)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1723892)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317019)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260370)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 275936)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 91.74ms (100.17ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 5631235, ~: 5620668)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 5886919)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 5481479)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 255.52ms (239.17ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4116137, ~: 4114899)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8753782)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1646428)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1088788)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8883370)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6392438)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2179829)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11396847)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1063301)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8053575)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1251544)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6431516)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 256.75ms (310.43ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275385)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233099)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658807)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821946)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8885637)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387292)\n[PASS] test_orientationIsPleaZero() (gas: 15702)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033081)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502575)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 286.37ms (209.39ms CPU time)\n\nRan 17 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1257924)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697207)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1114554)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686728)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1306537)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1879860)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585829)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1109969)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2597755)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1210978)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4547720)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760908)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1825307)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34032658)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2760628)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16628846)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 289.70ms (134.36ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1158928, ~: 1154146)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1202032)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 667653)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134604)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1211942)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64122)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1320434)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2565097)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290437)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 616380)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 290.55ms (276.60ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095147)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6534434)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3988969)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286171)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824252)\n[PASS] test_callbackFitsTheStipend() (gas: 5523825)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5875482)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070145)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273544)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244631)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421950)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167133)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213156)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1486655)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455185)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299497)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 322.70ms (67.77ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4111372, ~: 4114470)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8753357)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1646664)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1088112)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8882945)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6392013)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2179747)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11394844)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1062527)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8052464)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1251119)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6431091)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 325.36ms (281.24ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1159060, ~: 1154372)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1202372)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 667393)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135432)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1227302)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64062)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1320122)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2564319)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290413)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 615704)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 327.19ms (238.03ms CPU time)\n\nRan 18 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1257924)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1697229)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1114554)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1686728)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1306559)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1879860)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585851)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1109991)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2597755)\n[PASS] test_orientationIsPleaZero() (gas: 15888)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1210978)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4547720)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760908)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1825329)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34032658)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2760676)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16628846)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 327.57ms (175.55ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095169)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6534456)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3988969)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286193)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824274)\n[PASS] test_callbackFitsTheStipend() (gas: 5523847)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5875504)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070167)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273566)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244653)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_orientationIsPleaZero() (gas: 15922)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421972)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167155)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213178)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1486670)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455207)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299519)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 328.18ms (70.00ms CPU time)\n\nRan 11 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 2220011, ~: 2219095)\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 256, μ: 298515, ~: 296826)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5414347, ~: 5432889)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1289716)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 815807)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 562424)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 872899)\n[PASS] test_metadataDecodesToValidJsonAndEscapesUntrustedTextInSvg() (gas: 3039852)\n[PASS] test_onlySeasonsMintsAndFailedMintCannotIncrementSupply() (gas: 307118)\n[PASS] test_prizesRequireSixtyPointsButLaureatesDoNot() (gas: 1666957)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 958273)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 501.18ms (1.06s CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 26874770)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 26159149)\nLogs:\n  launch (6 contracts + intake mock): 1232029\n  deployHook: 5329973\n  seed: 576168\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 1266174)\n[PASS] test_ownerMaySeedEarly() (gas: 26174101)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 26270333)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 501.73ms (117.75ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275363)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 232988)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658785)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821924)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8885637)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387270)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033059)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502553)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 560.49ms (189.35ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3274701)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233010)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1288368)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 31800880)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1263225)\n[PASS] test_fastFullCycle() (gas: 57270253)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13499)\n[PASS] test_onlyApprovedPleasScore() (gas: 3384311)\n[PASS] test_secondSeasonScoresSeparately() (gas: 34734107)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 2587016)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 86859135)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 560.55ms (192.70ms CPU time)\n\nRan 17 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 3381977, ~: 3385070)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 4687829, ~: 4859951)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 3470161, ~: 3459096)\n[PASS] test_amountLimitsFailBeforeChargingAndOneWeiCanBeSubmitted() (gas: 3403352)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 5775555)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 6257953)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 5521163)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 3405856)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 3301422)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 5309601)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 5501336)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 86519)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 3290977)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 838223)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 3379245)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 3872464)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 4523360)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 560.58ms (1.29s CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1023  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1076  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1018  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 995   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 978   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 1050  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 1013  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1039  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.17s (3.16s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 744   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 791   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 763   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 776   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 718   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 717   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 731   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 735   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 754   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 714   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2953060, ~: 2953060)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7654870)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 7.32s (7.41s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 749   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 744   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 791   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 763   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 776   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 718   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 717   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 731   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 735   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 754   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 714   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2952268, ~: 2952268)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7659804)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 7.39s (7.40s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_nftsRemainUniqueAndOwnedAfterRandomTransfers\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 794   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 736   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 766   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 738   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 778   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 703   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 715   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 769   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 720   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 692   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | transferLaureate        | 781   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 4109081)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 5716489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 19.45s (19.45s CPU time)\n\nRan 6 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 11235353, ~: 11222097)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizesAndNfts() (gas: 1393533)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 880238)\n[PASS] test_earlierTiedPleaTakesFirstAndFifthLaureateSlots() (gas: 1192034)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 880206)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 911090)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 19.45s (401.32ms CPU time)\n\nRan 29 test suites in 19.46s (62.85s CPU time): 262 tests passed, 0 failed, 1 skipped (263 total tests)\n","passed":true},{"durationMs":268,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Laureates.approve(address,uint256)\",\"Laureates.mint(address,uint256,uint8,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256,bytes)\",\"Laureates.setApprovalForAll(address,bool)\",\"Laureates.setName(string)\",\"Laureates.transferFrom(address,address,uint256)\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address,address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":67,\"README.md\":203,\"foundry.toml\":24,\"launch.json\":60,\"remappings.txt\":4,\"script/Deploy.s.sol\":52,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":632,\"src/Laureates.sol\":227,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":123,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":1004,\"src/PleaLaunch.sol\":107,\"src/Seasons.sol\":386,\"src/interfaces/IPleaParts.sol\":77,\"src/interfaces/IStacker.sol\":10,\"test/AuditRevision.t.sol\":260,\"test/DistributorAdversarial.t.sol\":331,\"test/Gate.t.sol\":387,\"test/GateAdversarial.t.sol\":370,\"test/Hook.t.sol\":288,\"test/HookAdversarial.t.sol\":272,\"test/Launch.t.sol\":145,\"test/LaunchManifest.t.sol\":248,\"test/OracleConformance.t.sol\":114,\"test/OracleReplay.t.sol\":59,\"test/Orientation.t.sol\":58,\"test/SeasonAdversarial.t.sol\":331,\"test/SeasonFunds.t.sol\":345,\"test/SeasonInvariant.t.sol\":393,\"test/SeasonRanking.t.sol\":195,\"test/Seasons.t.sol\":279,\"test/Token.t.sol\":78,\"test/TradingInvariant.t.sol\":454,\"test/fork/ForkTestnet.t.sol\":600,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":219,\"test/utils/Mocks.sol\":256,\"test/utils/SeasonModel.sol\":112,\"test/utils/SepoliaFixture.sol\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":28926,"exitCode":0,"name":"slither","output":"[high/medium] weak-prng at src/PleaHook.sol:916: PleaHook._updateWallGuard(int24) (src/PleaHook.sol#916-941) uses a weak PRNG: \"guardRemainder = numerator % 86400 (src/PleaHook.sol#928)\"\n[high/medium] weak-prng at src/PleaHook.sol:943: PleaHook._checkpoint(uint160) (src/PleaHook.sol#943-952) uses a weak PRNG: \"c = ring[hour % 25] (src/PleaHook.sol#945)\"\n[high/high] uninitialized-state at src/Seasons.sol:99: Seasons._best (src/Seasons.sol#68) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:172: Seasons._bestPleaIds (src/Seasons.sol#69) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:95: Seasons._topPleas (src/Seasons.sol#67) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:91: Seasons._top (src/Seasons.sol#66) is never initialized. It is used in:\n[medium/medium] divide-before-multiply at src/PleaHook.sol:980: PleaHook._alignDown(int24) (src/PleaHook.sol#980-984) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/PleaHook.sol:974: PleaHook._alignUp(int24) (src/PleaHook.sol#974-978) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/PleaHook.sol:748: PleaHook._rebalance() (src/PleaHook.sol#748-809) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:222: CabalGate.factScore(address,uint256) (src/CabalGate.sol#222-254) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:290: PleaHook.launchExtraBps() (src/PleaHook.sol#290-295) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:673: PleaHook._applyCap() (src/PleaHook.sol#673-715) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:135: Seasons.checkpoint() (src/Seasons.sol#135-146) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:673: PleaHook._applyCap() (src/PleaHook.sol#673-715) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:193: CabalGate.diedAt() (src/CabalGate.sol#193-196) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:748: PleaHook._rebalance() (src/PleaHook.sol#748-809) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:320: PleaHook._pleaIn(PleaHook.Band,uint160) (src/PleaHook.sol#320-332) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:736: PleaHook.rebalance() (src/PleaHook.sol#736-743) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:294: Seasons.flushToWall() (src/Seasons.sol#294-312) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:549: CabalGate._escape(string) (src/CabalGate.sol#549-563) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:188: CabalGate.restricted() (src/CabalGate.sol#188-190) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:549: CabalGate._escape(string) (src/CabalGate.sol#549-563) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:883: PleaHook._settleImd(uint256) (src/PleaHook.sol#883-888) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:811: PleaHook._closeWall() (src/PleaHook.sol#811-828) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:382: Seasons._pay(address,uint256) (src/Seasons.sol#382-385) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:673: Reentrancy in PleaHook._applyCap() (src/PleaHook.sol#673-715):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:648: Reentrancy in PleaHook._payCashback(address,uint256) (src/PleaHook.sol#648-665):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:736: Reentrancy in PleaHook.rebalance() (src/PleaHook.sol#736-743):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:811: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#811-828):\n[medium/medium] reentrancy-no-eth at src/Seasons.sol:294: Reentrancy in Seasons.flushToWall() (src/Seasons.sol#294-312):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:748: Reentrancy in PleaHook._rebalance() (src/PleaHook.sol#748-809):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:836: Reentrancy in PleaHook._payTip(address,uint256) (src/PleaHook.sol#836-844):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:466: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#466-537):\n[medium/medium] reentrancy-no-eth at src/CabalGate.sol:315: Reentrancy in CabalGate._ask(uint256) (src/CabalGate.sol#315-330):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:466: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#466-537):\n[medium/medium] reentrancy-no-eth at src/Seasons.sol:251: Reentrancy in Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290):\n[medium/medium] reentrancy-no-eth at src/CabalGate.sol:270: Reentrancy in CabalGate.appeal(uint256,uint256,string) (src/CabalGate.sol#270-291):\n[medium/medium] uninitialized-local at src/Laureates.sol:159: Laureates._svg(Laureates.Laureate,uint8,string,string,string).i (src/Laureates.sol#159) is a local variable never initialized\n[medium/medium] uninitialized-local at src/CabalGate.sol:557: CabalGate._escape(string).j (src/CabalGate.sol#557) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Laureates.sol:205: Laureates._escapeXml(bytes).out (src/Laureates.sol#205) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:361: Seasons._payBonus(uint256,Seasons.Entry[10]).paid (src/Seasons.sol#361) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Laureates.sol:220: Laureates._escapeJson(string).out (src/Laureates.sol#220) is a local variable never initialized\n[medium/medium] uninitialized-local at src/CabalGate.sol:551: CabalGate._escape(string).extra (src/CabalGate.sol#551) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:177: Seasons._record(uint256,uint256,address,uint8).mi (src/Seasons.sol#177) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:279: PleaHook.price24hAgo().bestHour (src/PleaHook.sol#279) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:555: PleaHook._payFees(address,bool,uint256,uint256,uint256).toPrize (src/PleaHook.sol#555) is a local variable never initialized\n[medium/medium] uninitialized-local at src/CabalGate.sol:580: CabalGate._validateText(string).len (src/CabalGate.sol#580) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:266: Seasons.closeSeason(uint256[]).paid (src/Seasons.sol#266) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:182: Seasons._record(uint256,uint256,address,uint8).pts (src/Seasons.sol#182) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:266: PleaHook.latestPrice().bestHour (src/PleaHook.sol#266) is a local variable never initialized\n[medium/medium] unused-return at src/PleaHook.sol:748: PleaHook._rebalance() (src/PleaHook.sol#748-809) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:int256(uint256(liquidity)),salt:0}),) (src/PleaHook.sol#789-795)\n[medium/medium] unused-return at src/PleaHook.sol:243: PleaHook.currentSqrtPriceX96() (src/PleaHook.sol#243-245) ignores return value by (sqrtPriceX96,None,None,None) = poolManager.getSlot0(poolId()) (src/PleaHook.sol#244)\n[medium/medium] unused-return at src/PleaHook.sol:853: PleaHook.unlockCallback(bytes) (src/PleaHook.sol#853-881) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:int256(uint256(liquidity)),salt:0}),) (src/PleaHook.sol#860-866)\n[medium/medium] unused-return at src/OracleAttestation.sol:158: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/OracleAttestation.sol#158-171) ignores return value by (recovered,err,None) = ECDSA.tryRecover(digest,signature) (src/OracleAttestation.sol#166)\n[medium/medium] unused-return at src/CabalGate.sol:360: CabalGate._stale(CabalGate.Plea) (src/CabalGate.sol#360-364) ignores return value by (None,None,None,completed) = intake.requests(p.intakeId) (src/CabalGate.sol#362)\n[medium/medium] unused-return at src/PleaHook.sol:883: PleaHook._settleImd(uint256) (src/PleaHook.sol#883-888) ignores return value by poolManager.settle() (src/PleaHook.sol#887)\n[medium/medium] unused-return at src/CabalGate.sol:467: CabalGate.unlockCallback(bytes) (src/CabalGate.sol#467-494) ignores return value by pm.settle() (src/CabalGate.sol#491)\n[medium/medium] unused-return at src/PleaHook.sol:247: PleaHook.currentTick() (src/PleaHook.sol#247-249) ignores return value by (None,tick,None,None) = poolManager.getSlot0(poolId()) (src/PleaHook.sol#248)\n[medium/medium] unused-return at src/Seasons.sol:251: Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290) ignores return value by (seller,None,None,None) = gate.result(lp[i_scope_1].pleaId) (src/Seasons.sol#286)\n[medium/medium] unused-return at src/PleaHook.sol:853: PleaHook.unlockCallback(bytes) (src/PleaHook.sol#853-881) ignores return value by poolManager.settle() (src/PleaHook.sol#873)\n[medium/medium] unused-return at src/Seasons.sol:316: Seasons._redeemClaims() (src/Seasons.sol#316-323) ignores return value by pm.unlock(abi.encode(amount)) (src/Seasons.sol#322)\n[medium/medium] unused-return at src/PleaHook.sol:717: PleaHook._removeLiquidity(int24,int24,uint256) (src/PleaHook.sol#717-729) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:- int256(liquidity),salt:0}),) (src/PleaHook.sol#721-725)\n[medium/medium] unused-return at src/Laureates.sol:83: Laureates.tokenURI(uint256) (src/Laureates.sol#83-96) ignores return value by (seller,score,None,None) = g.result(l.pleaId) (src/Laureates.sol#87)\n[low/medium] missing-zero-check at src/PleaLaunch.sol:50: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).plea_ (src/PleaLaunch.sol#50) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:55: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).poolManager_ (src/PleaLaunch.sol#55) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:189: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).plea_ (src/PleaHook.sol#189) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:192: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).owner_ (src/PleaHook.sol#192) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:65: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).owner_ (src/PleaLaunch.sol#65) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:51: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).gate_ (src/PleaLaunch.sol#51) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:193: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).seasons_ (src/PleaHook.sol#193) lacks a zero-check on :\n[low/medium] calls-loop at src/Seasons.sol:335: Seasons._tryRecord(uint256) (src/Seasons.sol#335-342) has external calls inside a loop: (seller,score,approved,verdictAt) = gate.result(pleaId) (src/Seasons.sol#337)\n[low/medium] calls-loop at src/Seasons.sol:382: Seasons._pay(address,uint256) (src/Seasons.sol#382-385) has external calls inside a loop: (ok,ret) = address(imd).call(abi.encodeCall(IERC20.transfer,(to,amount))) (src/Seasons.sol#383)\n[low/medium] calls-loop at src/Seasons.sol:251: Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290) has external calls inside a loop: (seller,None,None,None) = gate.result(lp[i_scope_1].pleaId) (src/Seasons.sol#286)\n[low/medium] calls-loop at src/Seasons.sol:359: Seasons._payBonus(uint256,Seasons.Entry[10]) (src/Seasons.sol#359-379) has external calls inside a loop: (ok,ret) = address(token).call(abi.encodeCall(IERC20.transfer,(t[i].wallet,amount))) (src/Seasons.sol#365)\n[low/medium] calls-loop at src/Seasons.sol:168: Seasons._seasonOf(uint64) (src/Seasons.sol#168-170) has external calls inside a loop: (uint256(verdictAt) - gate.startedAt()) / SEASON (src/Seasons.sol#169)\n[low/medium] calls-loop at src/Seasons.sol:251: Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290) has external calls inside a loop: tokenId = l.mint(seller,season,uint8(i_scope_1 + 1),lp[i_scope_1].pleaId) (src/Seasons.sol#287)\n[low/medium] reentrancy-benign at src/PleaHook.sol:811: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#811-828):\n[low/medium] reentrancy-benign at src/PleaHook.sol:748: Reentrancy in PleaHook._rebalance() (src/PleaHook.sol#748-809):\n[low/medium] reentrancy-benign at src/Seasons.sol:359: Reentrancy in Seasons._payBonus(uint256,Seasons.Entry[10]) (src/Seasons.sol#359-379):\n[low/medium] reentrancy-benign at src/PleaHook.sol:466: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#466-537):\n[low/medium] reentrancy-benign at src/PleaHook.sol:544: Reentrancy in PleaHook._payFees(address,bool,uint256,uint256,uint256) (src/PleaHook.sol#544-588):\n[low/medium] reentrancy-benign at src/PleaHook.sol:356: Reentrancy in PleaHook.seed() (src/PleaHook.sol#356-398):\n[low/medium] reentrancy-benign at src/PleaHook.sol:748: Reentrancy in PleaHook._rebalance() (src/PleaHook.sol#748-809):\n[low/medium] reentrancy-benign at src/PleaHook.sol:811: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#811-828):\n[low/medium] reentrancy-benign at src/PleaHook.sol:648: Reentrancy in PleaHook._payCashback(address,uint256) (src/PleaHook.sol#648-665):\n[low/medium] reentrancy-benign at src/PleaHook.sol:356: Reentrancy in PleaHook.seed() (src/PleaHook.sol#356-398):\n[low/medium] reentrancy-benign at src/PleaHook.sol:673: Reentrancy in PleaHook._applyCap() (src/PleaHook.sol#673-715):\n[low/medium] reentrancy-benign at src/PleaHook.sol:356: Reentrancy in PleaHook.seed() (src/PleaHook.sol#356-398):\n[low/medium] reentrancy-benign at src/PleaHook.sol:544: Reentrancy in PleaHook._payFees(address,bool,uint256,uint256,uint256) (src/PleaHook.sol#544-588):\n[low/medium] reentrancy-benign at src/PleaHook.sol:466: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#466-537):\n[low/medium] reentrancy-benign at src/PleaHook.sol:544: Reentrancy in PleaHook._payFees(address,bool,uint256,uint256,uint256) (src/PleaHook.sol#544-588):\n[low/medium] reentrancy-benign at src/Seasons.sol:294: Reentrancy in Seasons.flushToWall() (src/Seasons.sol#294-312):\n[low/medium] reentrancy-benign at src/PleaHook.sol:811: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#811-828):\n[low/medium] reentrancy-benign at src/PleaHook.sol:673: Reentrancy in PleaHook._applyCap() (src/PleaHook.sol#673-715):\n[low/medium] reentrancy-benign at src/CabalGate.sol:315: Reentrancy in CabalGate._ask(uint256) (src/CabalGate.sol#315-330):\n[low/medium] reentrancy-benign at src/Seasons.sol:294: Reentrancy in Seasons.flushToWall() (src/Seasons.sol#294-312):\n[low/medium] reentrancy-events at src/PleaHook.sol:811: Reentrancy in PleaHook._closeWall() (src","passed":true},{"durationMs":1762,"exitCode":0,"name":"aderyn","output":"[high] abi-encode-packed-hash-collision at src/PleaLaunch.sol:68: `abi.encodePacked()` Hash Collision\n[high] reentrancy-state-change at src/CabalGate.sol:173: Reentrancy: State change after external call (12 places)\n[high] storage-array-memory-edit at src/PleaHook.sol:298: Storage Array Edited with Memory (3 places)\n[high] unsafe-casting at src/CabalGate.sol:303: Unsafe Casting of integers (4 places)\n[low] centralization-risk at src/PLEA.sol:13: Centralization Risk (4 places)\n[low] costly-loop at src/Seasons.sol:220: Costly operations inside loop (3 places)\n[low] internal-function-used-once at src/OracleAttestation.sol:206: Internal Function Used Only Once\n[low] large-numeric-literal at src/CabalGate.sol:225: Large Numeric Literal (8 places)\n[low] literal-instead-of-constant at src/CabalGate.sol:225: Literal Instead of Constant (77 places)\n[low] missing-inheritance at src/PleaHook.sol:35: Missing Inheritance (2 places)\n[low] require-revert-in-loop at src/CabalGate.sol:572: Loop Contains `require`/`revert` (3 places)\n[low] state-change-without-event at src/CabalGate.sol:467: State Change Without Event (3 places)\n[low] unchecked-return at src/CabalGate.sol:491: Unchecked Return (5 places)\n[low] uninitialized-local-variable at src/CabalGate.sol:551: Uninitialized Local Variable (13 places)\n[low] unsafe-erc20-operation at src/PleaHook.sol:658: Unsafe ERC20 Operation (4 places)\n[low] unsafe-oz-erc721-mint at src/Laureates.sol:41: Unsafe `ERC721::_mint()`\n[low] unused-import at src/PleaLaunch.sol:4: Unused Import (3 places)\n[low] unused-public-function at src/CabalGate.sol:193: Public Function Not Used Internally (7 places)\n[low] unused-state-variable at src/PLEA.sol:26: Unused State Variable (5 places)","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"85a5fda62cb6ef7517ca7d4a8c5c728b9ec0c39fec883c5952aa171283222fe5","verifiedTreeHash":"7099ac09007c30c3550e2fe8ef008381434832fe","verifierVersion":"0.1.0+fb8278c5"},{"checks":[{"durationMs":219598,"exitCode":0,"name":"build","output":"Compiling 140 files with Solc 0.8.26\nSolc 0.8.26 finished in 219.46s\nCompiler run successful!\n","passed":true},{"durationMs":9626,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 560.21µs (0.00ns CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10505)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 133061)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13921)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 7.08ms (1.37ms CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 15373008)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 16064889)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 15532013)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.72ms (6.49ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 211069)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183716)\n[PASS] test_launcherAndInitAreOneShot() (gas: 127083)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 321856)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 10.33ms (592.41µs CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1259321, ~: 1301956)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24187)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1790146)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75260)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1601855)\n[PASS] test_deathBeforeTheFourthSeasonBurnsTheRest() (gas: 1149672)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1604836)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 220057)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 813140)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1721459)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1213809)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43426)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2507394)\n[PASS] test_onlyTheFirstFourSeasonsPayABonus() (gas: 3686495)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 874036)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1124005)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 24.53ms (20.29ms CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23969, ~: 24108)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 746000)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42979)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 32.06ms (8.78ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095147)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6536196)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3990731)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286171)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824252)\n[PASS] test_callbackFitsTheStipend() (gas: 5523825)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5877244)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070145)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273544)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244631)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421950)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167133)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213156)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1490261)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455185)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299497)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 40.73ms (35.97ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:PostLaunchHookTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 40363008)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 47.87ms (39.53ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259291, ~: 259258)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1723892)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317019)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260370)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 275936)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 34.52ms (33.55ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 5631238, ~: 5620668)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 5886919)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 5481479)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 68.69ms (54.48ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 33226250)\nLogs:\n  six-contract factory deployment gas: 17246276\n  margin to the 16,777,216 mainnet cap: -469060\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 72.81ms (60.53ms CPU time)\n\nRan 20 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1261591)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1702709)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1118181)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 18018)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1692212)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1310208)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1885317)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 587697)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1113639)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2603266)\n[PASS] test_orientationIsPleaZero() (gas: 15910)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1214605)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4569507)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 762874)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1830759)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34204143)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2793603)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2768347)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16704728)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33099071)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 122.73ms (89.45ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3274701)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233010)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1288368)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 31800880)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1265028)\n[PASS] test_fastFullCycle() (gas: 57270253)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13499)\n[PASS] test_onlyApprovedPleasScore() (gas: 3384311)\n[PASS] test_secondSeasonScoresSeparately() (gas: 34734107)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 2587016)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 86859135)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 155.90ms (107.57ms CPU time)\n\nRan 6 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 11240187, ~: 11278116)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizesAndNfts() (gas: 1393533)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 880238)\n[PASS] test_earlierTiedPleaTakesFirstAndFifthLaureateSlots() (gas: 1192034)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 880206)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 911090)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 213.60ms (216.72ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4131323, ~: 4133945)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8755159)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1652151)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1089914)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8884747)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6393815)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2185154)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11416479)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1066131)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8057871)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1254723)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6432893)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 220.34ms (236.26ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4134994, ~: 4137514)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8755596)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1651951)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1090602)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8885184)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6394252)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2185272)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11418626)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1066929)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8059018)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1255172)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6433330)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 228.91ms (206.62ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1162726, ~: 1158031)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1205976)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 669283)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135432)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1241805)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64062)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1323815)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2567964)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290467)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 617546)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 259.76ms (249.95ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095169)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6536218)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3990731)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286193)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824274)\n[PASS] test_callbackFitsTheStipend() (gas: 5523847)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5877266)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070167)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273566)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244653)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_orientationIsPleaZero() (gas: 15922)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421972)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167155)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213178)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1490276)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455207)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299519)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 290.85ms (31.48ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 44320202)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 43579390)\nLogs:\n  launch (6 contracts + intake mock): 1232029\n  deployHook: 5390750\n  seed: 576168\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 1266174)\n[PASS] test_ownerMaySeedEarly() (gas: 43594342)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 43690574)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 308.77ms (192.11ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275363)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 232988)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658785)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821924)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8887440)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387270)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033059)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502553)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 319.70ms (132.59ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275385)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233099)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658807)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821946)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8887440)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387292)\n[PASS] test_orientationIsPleaZero() (gas: 15702)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033081)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502575)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 368.57ms (86.13ms CPU time)\n\nRan 11 tests for test/BonusInvariant.t.sol:BonusEdgeTest\n[PASS] testFuzz_anyRankingPaysPlusBurnsExactlyTheBonus(uint256) (runs: 512, μ: 4235669, ~: 4392899)\n[PASS] test_bonusPaidAfterDeathIsFreelyTransferable() (gas: 924744)\n[PASS] test_closeWithinTheGraceHourIsRefused() (gas: 885664)\n[PASS] test_closingTwiceCannotPayASeasonsBonusTwice() (gas: 874846)\n[PASS] test_deathBeforeTradingSeasonZeroEndsBurnsEverythingButSeasonZero() (gas: 1048140)\n[PASS] test_eleventhWalletIsNotPaidAndCannotDisplaceRankTen() (gas: 5141041)\n[PASS] test_gateAsSellerForfeitsWhileWatchedButIsPaidAfterDeath() (gas: 1610624)\n[PASS] test_lateApprovalListedAtCloseStillEarnsTheBonus() (gas: 824958)\n[PASS] test_onlyTheBestThreePleasCount() (gas: 2052018)\n[PASS] test_sixtyPointsQualifiesFiftyNineDoesNot() (gas: 1793627)\n[PASS] test_tenQualifiersReceiveTheWholeBonusAndNothingBurns() (gas: 4874164)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 368.72ms (370.89ms CPU time)\n\nRan 11 tests for test/HookRevision.t.sol:HookRevisionTest\n[PASS] testFuzz_aGreedyStackerCannotReachTheWallReserve(uint256,uint256) (runs: 64, μ: 1328479, ~: 1328291)\n[PASS] testFuzz_aLimitAnywhereInTheLiquidityFreeRegionNeverMovesTheGuard(uint256,uint256) (runs: 64, μ: 2529179, ~: 2519609)\n[PASS] testFuzz_aLimitInsideTheLiquidMarketBandMovesTheGuardToTheStopTick(uint256) (runs: 64, μ: 5186800, ~: 5186836)\n[PASS] testFuzz_aSameHourPumpCannotMoveAPleasFactScore(uint256) (runs: 64, μ: 2942421, ~: 2939932)\n[PASS] testFuzz_repeatedDrainsToTheExtremeNeverMoveTheGuard(uint8) (runs: 64, μ: 4189536, ~: 3667606)\n[PASS] testFuzz_successfulCreditsNeverAccumulateAllowance(uint256,uint256,uint256) (runs: 64, μ: 2155952, ~: 2144987)\n[PASS] testFuzz_theGuardClimbsAtMost400TicksADay(uint256,uint256,uint8) (runs: 64, μ: 2855790, ~: 2809095)\n[PASS] testFuzz_theHoursFirstTradeRecordsThePriceItFoundWhateverItsSize(uint256,uint256) (runs: 64, μ: 2572587, ~: 2565148)\n[PASS] test_aCreditThatBurnsAllItsGasLeavesNoAllowance() (gas: 1608323)\n[PASS] test_anHourOpeningSellRecordsThePriceItFound() (gas: 1965158)\n[PASS] test_wallGuardFollowsASellThatStopsWhereTheMarketHasLiquidity() (gas: 6096977)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 443.55ms (1.18s CPU time)\n\nRan 19 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1261591)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1702687)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1118181)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 18018)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1692212)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1310186)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1885317)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 587675)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1113617)\n[PASS] test_hourlyCheckpointIsNotSetByTheTradeThatOpensTheHour() (gas: 2603266)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1214605)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4569507)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 762874)\n[PASS] test_stackerIsApprovedOnlyForTheCashbackBeingCredited() (gas: 1830737)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 34204143)\n[PASS] test_wallGuardIgnoresASellerChosenLimitReachedThroughAnEmptyPool() (gas: 2793603)\n[PASS] test_wallGuardIgnoresTheEmptyPoolsPriceLimit() (gas: 2768304)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16704728)\n[PASS] test_wallGuardStillDropsAtOnceToASellerChosenLimitInsideTheBand() (gas: 33099049)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 444.17ms (96.66ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1162535, ~: 1157829)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1205660)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 669555)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134604)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1226117)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64122)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1324151)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2568766)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290491)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 618234)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 444.17ms (415.67ms CPU time)\n\nRan 11 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 2220100, ~: 2220973)\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 256, μ: 298358, ~: 296489)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5418343, ~: 5432943)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1289716)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 815807)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 562424)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 872899)\n[PASS] test_metadataDecodesToValidJsonAndEscapesUntrustedTextInSvg() (gas: 3039852)\n[PASS] test_onlySeasonsMintsAndFailedMintCannotIncrementSupply() (gas: 307118)\n[PASS] test_prizesRequireSixtyPointsButLaureatesDoNot() (gas: 1666957)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 958273)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 444.27ms (832.45ms CPU time)\n\nRan 17 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 3381747, ~: 3385070)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 4646635, ~: 4790155)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 3472449, ~: 3481501)\n[PASS] test_amountLimitsFailBeforeChargingAndOneWeiCanBeSubmitted() (gas: 3403352)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 5775555)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 6257953)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 5521163)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 3405856)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 3301422)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 5309601)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 5501336)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 86519)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 3290977)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 838223)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 3379245)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 3874238)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 4526962)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 446.21ms (873.74ms CPU time)\n\nRan 12 tests for test/HookRevision.t.sol:HookRevisionPleaIsZeroTest\n[PASS] testFuzz_aGreedyStackerCannotReachTheWallReserve(uint256,uint256) (runs: 32, μ: 1328612, ~: 1328535)\n[PASS] testFuzz_aLimitAnywhereInTheLiquidityFreeRegionNeverMovesTheGuard(uint256,uint256) (runs: 32, μ: 2497524, ~: 2469289)\n[PASS] testFuzz_aLimitInsideTheLiquidMarketBandMovesTheGuardToTheStopTick(uint256) (runs: 32, μ: 5186826, ~: 5186858)\n[PASS] testFuzz_aSameHourPumpCannotMoveAPleasFactScore(uint256) (runs: 32, μ: 2942961, ~: 2945772)\n[PASS] testFuzz_repeatedDrainsToTheExtremeNeverMoveTheGuard(uint8) (runs: 32, μ: 3889932, ~: 3667628)\n[PASS] testFuzz_successfulCreditsNeverAccumulateAllowance(uint256,uint256,uint256) (runs: 32, μ: 2160783, ~: 2170261)\n[PASS] testFuzz_theGuardClimbsAtMost400TicksADay(uint256,uint256,uint8) (runs: 32, μ: 2784248, ~: 2778550)\n[PASS] testFuzz_theHoursFirstTradeRecordsThePriceItFoundWhateverItsSize(uint256,uint256) (runs: 32, μ: 2575125, ~: 2565712)\n[PASS] test_aCreditThatBurnsAllItsGasLeavesNoAllowance() (gas: 1608345)\n[PASS] test_anHourOpeningSellRecordsThePriceItFound() (gas: 1965180)\n[PASS] test_orientationIsPleaZero() (gas: 15668)\n[PASS] test_wallGuardFollowsASellThatStopsWhereTheMarketHasLiquidity() (gas: 6096999)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 446.16ms (666.18ms CPU time)\n\nRan 3 tests for test/GateFailureInvariant.t.sol:GateFailureInvariantTest\n[PASS]\nGateFailureInvariantTest invariants:\n[PASS] invariant_gateHoldsNothing\n[PASS] invariant_onlyVerdictsMoveTheClock\n[PASS] invariant_pendingBookkeepingIsConsistent\n GateFailureInvariantTest invariants (runs: 64, calls: 4096, reverts: 0)\n\n╭--------------------+---------------+-------+---------+----------╮\n| Contract           | Selector      | Calls | Reverts | Discards |\n+=================================================================+\n| GateFailureHandler | advance       | 414   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | answer        | 478   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | appeal        | 444   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | directFailure | 452   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | execute       | 484   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | expire        | 443   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | fail          | 444   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | plead         | 467   | 0       | 0        |\n|--------------------+---------------+-------+---------+----------|\n| GateFailureHandler | strangerFails | 470   | 0       | 0        |\n╰--------------------+---------------+-------+---------+----------╯\n\n[PASS] test_failureAfterDeathDoesNotReviveTheCabal() (gas: 3352857)\n[PASS] test_handlerReachesFailuresVerdictsAndAppeals() (gas: 14206174)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.11s (1.11s CPU time)\n\nRan 2 tests for test/BonusInvariant.t.sol:BonusInvariantTest\n[PASS]\nBonusInvariantTest invariants:\n[PASS] invariant_bonusIsHeldPaidOrBurned\n[PASS] invariant_flushedSeasonsStayFinished\n[PASS] invariant_openBonusSeasonsStayFunded\n[PASS] invariant_supplyFallsOnlyByTheBurnedBonus\n BonusInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+----------+-------+---------+----------╮\n| Contract     | Selector | Calls | Reverts | Discards |\n+======================================================+\n| BonusHandler | advance  | 1207  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | approve  | 1177  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | close    | 1162  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | die      | 1216  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | donate   | 1127  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | flush    | 1188  | 0       | 0        |\n|--------------+----------+-------+---------+----------|\n| BonusHandler | pull     | 1115  | 0       | 0        |\n╰--------------+----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesPaidClosesDeathAndFlush() (gas: 2572435)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.32s (1.32s CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1007  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 1006  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1007  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 1048  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 968   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 1053  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 1052  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1051  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.60s (1.59s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_stackerHoldsNoStandingAllowanceOnTheHooksImd\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 773   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 771   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 771   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 705   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 764   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 727   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 745   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 722   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 757   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 732   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 725   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2960177, ~: 2969298)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7672658)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.32s (3.39s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_stackerHoldsNoStandingAllowanceOnTheHooksImd\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 773   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 771   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 771   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 705   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 764   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 727   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 745   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 722   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 757   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 732   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 725   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2960993, ~: 2970114)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7667796)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.43s (3.49s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_nftsRemainUniqueAndOwnedAfterRandomTransfers\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 784   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 698   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 742   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 712   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 745   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 770   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 732   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 736   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 726   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 793   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | transferLaureate        | 754   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 4109081)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 5716489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.48s (9.47s CPU time)\n\nRan 34 test suites in 9.49s (26.13s CPU time): 305 tests passed, 0 failed, 1 skipped (306 total tests)\n","passed":true},{"durationMs":90,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Laureates.approve(address,uint256)\",\"Laureates.mint(address,uint256,uint8,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256,bytes)\",\"Laureates.setApprovalForAll(address,bool)\",\"Laureates.setName(string)\",\"Laureates.transferFrom(address,address,uint256)\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address,address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":73,\"README.md\":203,\"foundry.toml\":24,\"launch.json\":60,\"remappings.txt\":4,\"script/Deploy.s.sol\":52,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":632,\"src/Laureates.sol\":227,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":123,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":1006,\"src/PleaLaunch.sol\":107,\"src/Seasons.sol\":386,\"src/interfaces/IPleaParts.sol\":77,\"src/interfaces/IStacker.sol\":10,\"test/AuditRevision.t.sol\":260,\"test/BonusInvariant.t.sol\":528,\"test/DistributorAdversarial.t.sol\":331,\"test/Gate.t.sol\":387,\"test/GateAdversarial.t.sol\":370,\"test/GateFailureInvariant.t.sol\":330,\"test/Hook.t.sol\":357,\"test/HookAdversarial.t.sol\":272,\"test/HookRevision.t.sol\":378,\"test/Launch.t.sol\":145,\"test/LaunchManifest.t.sol\":248,\"test/OracleConformance.t.sol\":114,\"test/OracleReplay.t.sol\":59,\"test/Orientation.t.sol\":58,\"test/SeasonAdversarial.t.sol\":331,\"test/SeasonFunds.t.sol\":345,\"test/SeasonInvariant.t.sol\":393,\"test/SeasonRanking.t.sol\":195,\"test/Seasons.t.sol\":279,\"test/Token.t.sol\":78,\"test/TradingInvariant.t.sol\":460,\"test/fork/ForkTestnet.t.sol\":600,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":219,\"test/utils/Mocks.sol\":266,\"test/utils/SeasonModel.sol\":112,\"test/utils/SepoliaFixture.sol\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"89eed82d3322e017d40dc10618afac4c72013b0610334c583e6483562dc4fdf2","verifiedTreeHash":"c03fb4df047dc9a48d778462d11a9f6c9daed776","verifierVersion":"0.1.0+fb8278c5"},{"checks":[{"durationMs":179545,"exitCode":0,"name":"build","output":"Compiling 137 files with Solc 0.8.26\nSolc 0.8.26 finished in 179.40s\nCompiler run successful!\n","passed":true},{"durationMs":9927,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/ForkTestnet.t.sol:ForkTestnetTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 734.35µs (0.00ns CPU time)\n\nRan 3 tests for test/LaunchManifest.t.sol:RehearsalManifestTest\n[PASS] test_laterBlockCannotRegisterLauncher() (gas: 15331907)\n[PASS] test_separateConstructorCallsInDeploymentBlockStillWork() (gas: 16023099)\n[PASS] test_separateTransactionsLeaveTheAcceptedDeploymentBlockWindow() (gas: 15490912)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 10.50ms (6.79ms CPU time)\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_distributorAndAllowlistMaySend() (gas: 211069)\n[PASS] test_freeForeverOnceTheCabalDies() (gas: 183716)\n[PASS] test_launcherAndInitAreOneShot() (gas: 127083)\n[PASS] test_walletsCannotSendWhileTheCabalWatches() (gas: 321856)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 17.92ms (425.43µs CPU time)\n\nRan 3 tests for test/HookAdversarial.t.sol:LaunchFeeBoundaryTest\n[PASS] testFuzz_launchFeeOnlyFallsWithTime(uint256,uint256) (runs: 256, μ: 23991, ~: 24108)\n[PASS] test_largeLaunchBuyRollsBackAndSucceedsAtWindowEnd() (gas: 741652)\n[PASS] test_launchFeeHasExactStartMidpointAndEndValues() (gas: 42979)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 33.07ms (10.82ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:PostLaunchHookTest\n[PASS] test_committedHookDeploysLaterAndMintsOnlyTheFixedSplit() (gas: 10243049)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 31.12ms (17.18ms CPU time)\n\nRan 29 tests for test/Gate.t.sol:GateTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095147)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6530752)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3985287)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286171)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824252)\n[PASS] test_callbackFitsTheStipend() (gas: 5523825)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5871800)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070145)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273544)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244631)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421950)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167133)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213156)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1479291)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455185)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299497)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 36.21ms (32.25ms CPU time)\n\nRan 6 tests for test/DistributorAdversarial.t.sol:DistributorAdversarialTest\n[PASS] testFuzz_modifiedLeafOrProofCannotRedirectFunds(uint8,uint8,uint256) (runs: 256, μ: 259274, ~: 259216)\n[PASS] test_claimsCrossBitmapWordsAndCannotBeClaimedTwice() (gas: 1723892)\n[PASS] test_failedTokenTransferRollsBackBitmapAndCanBeRetried() (gas: 317019)\n[PASS] test_fullAllocationAndZeroAmountLeavesDoNotCorruptAdjacentBits() (gas: 260370)\n[PASS] test_rootCannotChangeAfterCommitmentEvenBeforeFirstClaim() (gas: 115955)\n[PASS] test_unsetRootAndUnauthorizedRootDoNotConsumeClaims() (gas: 275936)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 49.06ms (47.40ms CPU time)\n\nRan 1 test for test/LaunchManifest.t.sol:AtomicManifestTest\n[PASS] test_factoryDeploysExactManifestOnAnEmptySepoliaChain() (gas: 33176529)\nLogs:\n  six-contract factory deployment gas: 17204975\n  margin to the 16,777,216 mainnet cap: -427759\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 49.18ms (45.32ms CPU time)\n\nRan 4 tests for test/OracleConformance.t.sol:OracleConformanceTest\n[PASS] test_callbackSelectorHasTheProtocolStruct() (gas: 748)\n[PASS] test_digestMatchesTheProtocol() (gas: 10505)\n[PASS] test_liveAttestationRecoversToOracleSigner() (gas: 133061)\n[PASS] test_protocolSignatureRecoversToVectorSigner() (gas: 13921)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 51.08ms (1.26ms CPU time)\n\nRan 30 tests for test/Orientation.t.sol:GatePleaIsZeroTest\n[PASS] test_appealClosesAfterFourHoursAndOnlyOnce() (gas: 8095169)\n[PASS] test_appealWithinFourHoursForNoMore() (gas: 6530774)\n[PASS] test_approvedScoreOpensTheSellWindow() (gas: 3985287)\n[PASS] test_badAttestationsAreNotDelivered() (gas: 3286193)\n[PASS] test_bodyIsTheNumericPanelQuestion() (gas: 3824274)\n[PASS] test_callbackFitsTheStipend() (gas: 5523847)\nLogs:\n  approve callback gas: 58880\n  deny callback gas: 83479\n\n[PASS] test_callbackOnlyFromIntakeAndOnlyForAPendingPlea() (gas: 3671311)\n[PASS] test_cannotPassIsRefusedBeforePaying() (gas: 356302)\n[PASS] test_cooldownAfterExecutedSell() (gas: 5871822)\n[PASS] test_failedAppealCanBeRetried() (gas: 8070167)\n[PASS] test_failureAfterExpireIsRefused() (gas: 3273566)\n[PASS] test_failureClearsThePendingPleaWithoutCooldownOrClock() (gas: 5474769)\n[PASS] test_failureFitsTheMainnetGas() (gas: 3244653)\n[PASS] test_failureForAnUnknownOrSettledRequestDoesNothing() (gas: 3416325)\n[PASS] test_failureOnlyFromTheIntake() (gas: 3212873)\n[PASS] test_noPleasWhileTheCabalSleeps() (gas: 48206)\n[PASS] test_noVerdictIsClearedAtOnceWhenTheIntakeCompletes() (gas: 5458534)\n[PASS] test_onePendingPleaPerWallet() (gas: 3126331)\n[PASS] test_orientationIsPleaZero() (gas: 15922)\n[PASS] test_pendingExpiresAfterTwentyMinutesAndLateCallbacksFail() (gas: 5421972)\n[PASS] test_pleaAsksWithTheFailureFunction() (gas: 3167155)\n[PASS] test_pleaPaysTheIntakeAndNamesTheCallback() (gas: 3213178)\n[PASS] test_prizePleaOnTopOfAWeekOldBuy() (gas: 1479306)\n[PASS] test_refusalClearsThePleaToo() (gas: 3266233)\n[PASS] test_scoreAboveRangeOrWrongTypeIsRefused() (gas: 5455207)\n[PASS] test_scoreBelowNeedDenies() (gas: 3451323)\n[PASS] test_sellWindowLapses() (gas: 5484425)\n[PASS] test_signerWithDelegationCodeStillVerifies() (gas: 3299519)\n[PASS] test_textFilter() (gas: 3420829)\n[PASS] test_wrongSignerIsRefused() (gas: 3263739)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 103.12ms (67.30ms CPU time)\n\nRan 15 tests for test/Orientation.t.sol:HookPleaIsZeroTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1253763)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1689383)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1110411)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1678875)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1302372)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1872048)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585324)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1105805)\n[PASS] test_orientationIsPleaZero() (gas: 15851)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1204071)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4514022)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760410)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 33686364)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16484413)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 120.77ms (72.46ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionPleaZeroTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4093175, ~: 4095698)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8752896)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1638827)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1087651)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8882484)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6391552)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2175135)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11353875)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1061597)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8048126)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1250189)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6430630)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 141.53ms (164.47ms CPU time)\n\nRan 10 tests for test/Seasons.t.sol:SeasonsTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275363)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 232988)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658785)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821924)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8881955)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387270)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033059)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502553)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 157.81ms (110.84ms CPU time)\n\nRan 3 tests for test/OracleReplay.t.sol:OracleReplayTest\n[PASS] testFuzz_oneSignedRequestCannotSettleTwoPleas(bool,bool) (runs: 32, μ: 5629824, ~: 5620668)\n[PASS] test_deniedRequestCannotBeResignedToApproveItsAppeal() (gas: 5886919)\n[PASS] test_invalidCallbackDoesNotConsumeTheRequest() (gas: 5481479)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 182.91ms (148.87ms CPU time)\n\nRan 12 tests for test/AuditRevision.t.sol:AuditRevisionTest\n[PASS] testFuzz_cumulativeCapDecayStaysWithinElapsedBudget(uint256) (runs: 32, μ: 4095718, ~: 4098118)\n[PASS] test_appealRetryClearsTimedOutPendingAppeal() (gas: 8753321)\n[PASS] test_deadCabalBuyStillRequiresARecipient() (gas: 1638591)\n[PASS] test_dustBuyDoesNotGiveUntrackedTokensLossOrHoldingPoints() (gas: 1088327)\n[PASS] test_expiredAppealCanBeRetriedWithoutLiftingDenialCooldown() (gas: 8882909)\n[PASS] test_lapsedApprovalCannotBypassCooldown() (gas: 6391977)\n[PASS] test_largeBuyClaimsAreRedeemableAndNextBuyStacksNormally() (gas: 2175217)\n[PASS] test_lateCloseDoesNotPayFutureSeasonFees() (gas: 11355878)\n[PASS] test_sameSecondCapRatchetsCannotReuseFractionalBudget() (gas: 1062371)\n[PASS] test_seasonClaimsArePaidAsImdAtClose() (gas: 8049237)\n[PASS] test_secondLargeBuyPreservesEveryPayee() (gas: 1250614)\n[PASS] test_unansweredAppealDoesNotExtendTheOriginalWindow() (gas: 6431055)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 219.46ms (231.32ms CPU time)\n\nRan 6 tests for test/SeasonRanking.t.sol:SeasonRankingTest\n[PASS] testFuzz_rankingsMatchSortedResultsInAnyRecordOrder(uint256) (runs: 32, μ: 11251617, ~: 11253269)\n[PASS] test_closeSeasonUsesTheSameTiesForPrizesAndNfts() (gas: 1393533)\n[PASS] test_earlierEqualScoreCanReplaceACountedPleaWithoutChangingPoints() (gas: 880238)\n[PASS] test_earlierTiedPleaTakesFirstAndFifthLaureateSlots() (gas: 1192034)\n[PASS] test_replacingALowerScoreRemovesItsIdFromTheTieKey() (gas: 880206)\n[PASS] test_walletTieUsesNewestCountedPleaNotLastRecordedPlea() (gas: 911090)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 226.77ms (229.02ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialPleaZeroTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1155329, ~: 1150250)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1198229)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 666932)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 135426)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1226890)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64062)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1315980)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2555762)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290413)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 615266)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 235.18ms (239.17ms CPU time)\n\nRan 5 tests for test/Launch.t.sol:LaunchTest\n[PASS] test_deployHookChecksTheInitCodeAndFlags() (gas: 149903764)\n[PASS] test_eachStepFitsAMainnetTransaction() (gas: 149098061)\nLogs:\n  launch (6 contracts + intake mock): 1232029\n  deployHook: 5375347\n  seed: 578771\n\n[PASS] test_launchWiresEverythingWithoutCallingOutside() (gas: 1266174)\n[PASS] test_ownerMaySeedEarly() (gas: 149113013)\n[PASS] test_seedByOwnerAnyTimeByAnyoneAfterStart() (gas: 149209245)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 244.60ms (475.48ms CPU time)\n\nRan 11 tests for test/HookAdversarial.t.sol:HookAdversarialTest\n[PASS] testFuzz_immediateRoundTripCannotProfitIncludingCashback(uint256) (runs: 256, μ: 1155133, ~: 1150026)\n[PASS] test_exactOutputBuyWorksAfterDeathAndKeepsAllAccountingSettled() (gas: 1197889)\n[PASS] test_firstPartialFillRefundIsBackedByRedeemableQuoteClaims() (gas: 667192)\n[PASS] test_hookCallbacksRejectCallersAndForeignPools() (gas: 134598)\n[PASS] test_keeperTipsRequireWorkAndRespectTheOneHourCooldown() (gas: 1211530)\n[PASS] test_onlyHookMayInitializeOrAddLiquidity() (gas: 64122)\n[PASS] test_partialFillRefundChargesOnlyRealizedImdAndKeepsCostBasisCorrect() (gas: 1316292)\n[PASS] test_realCreditBudgetMustBeAffordableAndExhaustedCreditFallsBack() (gas: 2556540)\n[PASS] test_seedAndUnlockAreOneShotAndOnlyAuthorizedContextsWork() (gas: 138204)\n[PASS] test_wallFundingCannotCreateUnbackedReserveWhenTransferFails() (gas: 290437)\n[PASS] test_zeroBuyRevertsAndOneWeiBuyConservesSupply() (gas: 615942)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 130.97ms (102.95ms CPU time)\n\nRan 16 tests for test/SeasonFunds.t.sol:SeasonFundsTest\n[PASS] testFuzz_lateCloseConservesAssets(uint96,uint96,bool) (runs: 32, μ: 1252709, ~: 1286711)\n[PASS] test_bonusIsMintedToSeasonsAndCannotBeWithdrawn() (gas: 24187)\n[PASS] test_bonusPaysTheTopTenAndBurnsTheUnpaidShares() (gas: 1790146)\n[PASS] test_claimRedemptionCallbackCannotBeInvokedOutsideUnlock() (gas: 75260)\n[PASS] test_deathAtBoundaryFlushesClaimsAndLateDonationsOnce() (gas: 1601855)\n[PASS] test_deathBeforeTheFourthSeasonBurnsTheRest() (gas: 1149672)\n[PASS] test_deathMidSeasonPreservesEarlierSeasonFees() (gas: 1604836)\n[PASS] test_emptySeasonBurnsItsWholeBonus() (gas: 220057)\n[PASS] test_failedBonusTransferIsBurnedNotStuck() (gas: 813140)\n[PASS] test_failedPayoutRollsForwardWithoutBlockingOtherWinners() (gas: 1721459)\n[PASS] test_feeAtBoundaryBelongsToNextSeason() (gas: 1213809)\n[PASS] test_flushBeforeTheEndCannotTouchTheBonus() (gas: 43426)\n[PASS] test_lateClosesOnlyRollUnpaidSharesForward() (gas: 2507394)\n[PASS] test_onlyTheFirstFourSeasonsPayABonus() (gas: 3686495)\n[PASS] test_prizePleaStaysGatedWhileTheCabalWatches() (gas: 874036)\n[PASS] test_unobservedDonationCannotFlowBackwards() (gas: 1124005)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 259.54ms (54.54ms CPU time)\n\nRan 11 tests for test/Orientation.t.sol:SeasonsPleaIsZeroTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3275385)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233099)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 17658807)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 42821946)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 8881955)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13477)\n[PASS] test_onlyApprovedPleasScore() (gas: 3387292)\n[PASS] test_orientationIsPleaZero() (gas: 15702)\n[PASS] test_secondSeasonScoresSeparately() (gas: 32544823)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 30033081)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 82502575)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 259.34ms (155.34ms CPU time)\n\nRan 14 tests for test/Hook.t.sol:HookTest\n[PASS] test_aBuyMustAffordTheCredit() (gas: 1253763)\n[PASS] test_aSellAboveTheCapIsTrimmedAndBurned() (gas: 1689361)\n[PASS] test_avgBuyTimeIsBuyWeighted() (gas: 1110411)\n[PASS] test_capDecayIsSetSoTheFloorIsReachableIn25Days() (gas: 17996)\n[PASS] test_capFollowsBuysAtMostOneDayOfDecayPerDay() (gas: 1678875)\n[PASS] test_everyFeeIsPaidInTheSameSwap() (gas: 1302350)\n[PASS] test_factScoreUsesCheckpointsNotSpot() (gas: 1872048)\n[PASS] test_firstBuyWithAnEmptyPoolSendsPayoutsToLiquidity() (gas: 585302)\n[PASS] test_freeTradingWhenTheCabalSleeps() (gas: 1105783)\n[PASS] test_plainImdOnlyWhenTheCreditReverts() (gas: 1204071)\n[PASS] test_rebalanceRedeemsClaimsIntoTheWall() (gas: 4514022)\n[PASS] test_sellsAndExactOutputOnlyThroughTheGateWhileAlive() (gas: 760410)\n[PASS] test_wallGuardDropsAtOnceAndRisesFourPercentADay() (gas: 33686364)\n[PASS] test_wallGuardLagsAPumpAndCapsTheWall() (gas: 16484413)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 258.71ms (83.85ms CPU time)\n\nRan 11 tests for test/Seasons.t.sol:FastClockTest\n[PASS] test_aLateCallbackCannotRevive() (gas: 3274701)\n[PASS] test_aliveFromSeedDeadAfterSilenceForever() (gas: 233010)\n[PASS] test_bestThreeCountAndTopTenOrder() (gas: 1288368)\n[PASS] test_closeSeasonPaysTheTopTenAndMintsLaureates() (gas: 31800880)\n[PASS] test_deathEndsTheLastSeasonAndTheRestGoesToTheWall() (gas: 1259543)\n[PASS] test_fastFullCycle() (gas: 57270253)\n[PASS] test_mainnetGuardRefusesShortTimings() (gas: 13499)\n[PASS] test_onlyApprovedPleasScore() (gas: 3384311)\n[PASS] test_secondSeasonScoresSeparately() (gas: 34734107)\n[PASS] test_tenthPlaceIsEvictedByABetterWallet() (gas: 2587016)\n[PASS] test_verdictsKeepItAliveAcrossManySeasons() (gas: 86859135)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 275.00ms (81.95ms CPU time)\n\nRan 17 tests for test/GateAdversarial.t.sol:GateAdversarialTest\n[PASS] testFuzz_panelAndAnswerValidationCannotConsumeRequests(uint8) (runs: 256, μ: 3382003, ~: 3385104)\n[PASS] testFuzz_printablePleaRoundTripsThroughQuestionJson(uint256,uint16) (runs: 256, μ: 4671449, ~: 4781662)\n[PASS] testFuzz_signedQuorumMustBeReached(uint16,bool) (runs: 256, μ: 3469186, ~: 3459096)\n[PASS] test_amountLimitsFailBeforeChargingAndOneWeiCanBeSubmitted() (gas: 3403352)\n[PASS] test_appealIsAcceptedAtItsLastSecondAndCannotBeStolen() (gas: 5775555)\n[PASS] test_appealOracleFeeFailureRollsBackWallFundingAndOriginalFlag() (gas: 6257953)\n[PASS] test_approvedWindowOnlyClearsAfterTheLastSecond() (gas: 5521163)\n[PASS] test_changingSignedAnswerOrConsumerChainInvalidatesSignature() (gas: 3405856)\n[PASS] test_deadManExpiresAtTheExactSecondAndNeverAcceptsANewVerdict() (gas: 3301422)\n[PASS] test_denialCooldownEndsExactlyAtFourHours() (gas: 5309601)\n[PASS] test_futureIssuanceAndExpiredAttestationsRejectAtExactBoundaries() (gas: 5501336)\n[PASS] test_gateUnlockCallbackCannotBeInvokedOutsideItsOwnSale() (gas: 86519)\n[PASS] test_latePendingCannotConsumeSignatureOrExtendHeartbeat() (gas: 3290977)\n[PASS] test_malformedUtf8AndHiddenControlsFailWithoutCharging() (gas: 838223)\n[PASS] test_missingSellAllowanceDoesNotConsumeTheApprovedPlea() (gas: 3379245)\n[PASS] test_pendingAndExecutionDeadlinesAreInclusive() (gas: 3868776)\n[PASS] test_slippageRevertRestoresApprovalSupplyAndAllFeeState() (gas: 4496096)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 365.50ms (792.56ms CPU time)\n\nRan 11 tests for test/SeasonAdversarial.t.sol:SeasonAdversarialTest\n[PASS] testFuzz_failedPrizeDoesNotBlockOthersAndUnpaidShareReachesWall(bool) (runs: 256, μ: 2219953, ~: 2219095)\n[PASS] testFuzz_namesAreUniqueIdempotentAndReleasedOnClear(uint256,uint8) (runs: 256, μ: 297972, ~: 295600)\n[PASS] testFuzz_prizeRoundingConservesAnOddSizedPot(uint256) (runs: 256, μ: 5421094, ~: 5432895)\n[PASS] test_batchIgnoresUnknownDeniedAndRepeatedIdsButCannotReopenASeason() (gas: 1289716)\n[PASS] test_closeBeforeGraceRollsBackItsBatchRecording() (gas: 815807)\n[PASS] test_flushBeforeFinalCloseCannotMoveAnyFunds() (gas: 562424)\n[PASS] test_invalidNamesAndFailedRenamesPreserveTheOldReservation() (gas: 872899)\n[PASS] test_metadataDecodesToValidJsonAndEscapesUntrustedTextInSvg() (gas: 3039852)\n[PASS] test_onlySeasonsMintsAndFailedMintCannotIncrementSupply() (gas: 307118)\n[PASS] test_prizesRequireSixtyPointsButLaureatesDoNot() (gas: 1666957)\n[PASS] test_recordRejectsDenialsDuplicatesAndLateApprovals() (gas: 958273)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 365.50ms (855.50ms CPU time)\n\nRan 1 test for test/DistributorAdversarial.t.sol:DistributionInvariantTest\n[PASS]\nDistributionInvariantTest invariants:\n[PASS] invariant_deathAndSystemWiringArePermanent\n[PASS] invariant_distributorPaysEachCommittedLeafAtMostOnce\n[PASS] invariant_supplyEqualsAllBalancesAndOnlyBurnsReduceIt\n DistributionInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------------+----------------------------+-------+---------+----------╮\n| Contract            | Selector                   | Calls | Reverts | Discards |\n+===============================================================================+\n| DistributionHandler | advance                    | 1050  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | allowSender                | 987   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | approveAndSpend            | 1034  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | burnTokens                 | 1014  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | claimAllocation            | 1020  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | donate                     | 1067  | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | transferTokens             | 985   | 0       | 0        |\n|---------------------+----------------------------+-------+---------+----------|\n| DistributionHandler | unauthorizedAdministration | 1035  | 0       | 0        |\n╰---------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.71s (1.71s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingPleaZeroInvariantTest\n[PASS]\nTradingPleaZeroInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingPleaZeroInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 759   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 742   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 743   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 712   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 711   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 723   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 792   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 731   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 752   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 758   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 769   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2951338, ~: 2951338)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7639448)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.61s (3.74s CPU time)\n\nRan 3 tests for test/TradingInvariant.t.sol:TradingInvariantTest\n[PASS]\nTradingInvariantTest invariants:\n[PASS] invariant_allPleaIsAccountedForAndSupplyOnlyFallsByActualBurns\n[PASS] invariant_quoteConservationAndFeePaymentsMatchTheirCounters\n[PASS] invariant_wallReservesClaimsAndGateStateRemainBacked\n TradingInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+---------------+-------+---------+----------╮\n| Contract       | Selector      | Calls | Reverts | Discards |\n+=============================================================+\n| TradingHandler | advance       | 759   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | buy           | 742   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | donateQuote   | 743   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | execute       | 712   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | freeSell      | 711   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | fundWall      | 723   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | pauseCashback | 792   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | rebalance     | 731   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | redeemClaims  | 752   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | submit        | 758   | 0       | 0        |\n|----------------+---------------+-------+---------+----------|\n| TradingHandler | verdict       | 769   | 0       | 0        |\n╰----------------+---------------+-------+---------+----------╯\n\n[PASS] testFuzz_handlerAccountsForClaimFeesAndTheirRedemption(bool) (runs: 32, μ: 2952130, ~: 2952130)\n[PASS] test_handlerExercisesTradingVerdictsRebalancesAndDeath() (gas: 7634514)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.63s (3.69s CPU time)\n\nRan 3 tests for test/SeasonInvariant.t.sol:SeasonInvariantTest\n[PASS]\nSeasonInvariantTest invariants:\n[PASS] invariant_nftsRemainUniqueAndOwnedAfterRandomTransfers\n[PASS] invariant_prizeMoneyIsPaidOnceOrRemainsInThePotOrWall\n[PASS] invariant_rankingsMatchAllRecordedApprovalsAndClosedSeasonsNeverChange\n SeasonInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-------------------------+-------+---------+----------╮\n| Contract      | Selector                | Calls | Reverts | Discards |\n+======================================================================+\n| SeasonHandler | advance                 | 747   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | approvePlea             | 719   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | checkpoint              | 766   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | closeOldest             | 737   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donate                  | 749   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateClaims            | 763   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | donateWithoutCheckpoint | 754   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | endCabal                | 770   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | flush                   | 766   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | record                  | 711   | 0       | 0        |\n|---------------+-------------------------+-------+---------+----------|\n| SeasonHandler | transferLaureate        | 710   | 0       | 0        |\n╰---------------+-------------------------+-------+---------+----------╯\n\n[PASS] test_modelCoversDelayedDonationsAndPostFlushClaims() (gas: 4109081)\n[PASS] test_modelCoversPayableClosesRolloverAndFinalFlush() (gas: 5716489)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 9.78s (9.79s CPU time)\n\nRan 29 test suites in 9.79s (22.56s CPU time): 256 tests passed, 0 failed, 1 skipped (257 total tests)\n","passed":true},{"durationMs":86,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CabalGate.appeal(uint256,uint256,string)\",\"CabalGate.begin()\",\"CabalGate.executeSell(uint256)\",\"CabalGate.expire(uint256)\",\"CabalGate.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"CabalGate.onPleaFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"CabalGate.submitSell(uint256,string)\",\"CabalGate.unlockCallback(bytes)\",\"Laureates.approve(address,uint256)\",\"Laureates.mint(address,uint256,uint8,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256)\",\"Laureates.safeTransferFrom(address,address,uint256,bytes)\",\"Laureates.setApprovalForAll(address,bool)\",\"Laureates.setName(string)\",\"Laureates.transferFrom(address,address,uint256)\",\"PLEA.allow(address)\",\"PLEA.approve(address,uint256)\",\"PLEA.burn(uint256)\",\"PLEA.init(address,address)\",\"PLEA.renounceOwnership()\",\"PLEA.setLauncher(address,address,address,address)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\",\"PLEA.transferOwnership(address)\",\"PleaDistributor.claim(uint256,address,uint256,bytes32[])\",\"PleaDistributor.renounceOwnership()\",\"PleaDistributor.setMerkleRoot(bytes32)\",\"PleaDistributor.transferOwnership(address)\",\"PleaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"PleaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"PleaHook.fundWall(uint256)\",\"PleaHook.rebalance()\",\"PleaHook.seed()\",\"PleaHook.unlockCallback(bytes)\",\"PleaLaunch.deployHook(bytes32,bytes)\",\"PleaLaunch.seed()\",\"Seasons.checkpoint()\",\"Seasons.closeSeason(uint256[])\",\"Seasons.flushToWall()\",\"Seasons.record(uint256)\",\"Seasons.unlockCallback(bytes)\"],\"files\":{\".gitignore\":4,\"ADAPTATION.md\":56,\"README.md\":203,\"foundry.toml\":24,\"launch.json\":60,\"remappings.txt\":4,\"script/Deploy.s.sol\":52,\"script/MineSalt.s.sol\":44,\"src/CabalGate.sol\":632,\"src/Laureates.sol\":227,\"src/OracleAttestation.sol\":227,\"src/PLEA.sol\":123,\"src/PleaDistributor.sol\":49,\"src/PleaHook.sol\":987,\"src/PleaLaunch.sol\":107,\"src/Seasons.sol\":386,\"src/interfaces/IPleaParts.sol\":77,\"src/interfaces/IStacker.sol\":10,\"test/AuditRevision.t.sol\":260,\"test/DistributorAdversarial.t.sol\":331,\"test/Gate.t.sol\":387,\"test/GateAdversarial.t.sol\":370,\"test/Hook.t.sol\":215,\"test/HookAdversarial.t.sol\":272,\"test/Launch.t.sol\":145,\"test/LaunchManifest.t.sol\":248,\"test/OracleConformance.t.sol\":114,\"test/OracleReplay.t.sol\":59,\"test/Orientation.t.sol\":58,\"test/SeasonAdversarial.t.sol\":331,\"test/SeasonFunds.t.sol\":345,\"test/SeasonInvariant.t.sol\":393,\"test/SeasonRanking.t.sol\":195,\"test/Seasons.t.sol\":279,\"test/Token.t.sol\":78,\"test/TradingInvariant.t.sol\":454,\"test/fork/ForkTestnet.t.sol\":600,\"test/utils/ClaimTree.sol\":41,\"test/utils/Fixture.sol\":219,\"test/utils/Mocks.sol\":256,\"test/utils/SeasonModel.sol\":112,\"test/utils/SepoliaFixture.sol\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":13881,"exitCode":0,"name":"slither","output":"[high/medium] weak-prng at src/PleaHook.sol:926: PleaHook._checkpoint(uint160) (src/PleaHook.sol#926-935) uses a weak PRNG: \"c = ring[hour % 25] (src/PleaHook.sol#928)\"\n[high/medium] weak-prng at src/PleaHook.sol:901: PleaHook._updateWallGuard(int24) (src/PleaHook.sol#901-924) uses a weak PRNG: \"guardRemainder = numerator % 86400 (src/PleaHook.sol#913)\"\n[high/high] uninitialized-state at src/Seasons.sol:99: Seasons._best (src/Seasons.sol#68) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:172: Seasons._bestPleaIds (src/Seasons.sol#69) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:95: Seasons._topPleas (src/Seasons.sol#67) is never initialized. It is used in:\n[high/high] uninitialized-state at src/Seasons.sol:91: Seasons._top (src/Seasons.sol#66) is never initialized. It is used in:\n[medium/medium] divide-before-multiply at src/PleaHook.sol:957: PleaHook._alignUp(int24) (src/PleaHook.sol#957-961) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/PleaHook.sol:963: PleaHook._alignDown(int24) (src/PleaHook.sol#963-967) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/CabalGate.sol:222: CabalGate.factScore(address,uint256) (src/CabalGate.sol#222-254) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:135: Seasons.checkpoint() (src/Seasons.sol#135-146) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:661: PleaHook._applyCap() (src/PleaHook.sol#661-703) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:724: PleaHook.rebalance() (src/PleaHook.sol#724-731) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:193: CabalGate.diedAt() (src/CabalGate.sol#193-196) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:799: PleaHook._closeWall() (src/PleaHook.sol#799-816) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:661: PleaHook._applyCap() (src/PleaHook.sol#661-703) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:287: PleaHook.launchExtraBps() (src/PleaHook.sol#287-292) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:736: PleaHook._rebalance() (src/PleaHook.sol#736-797) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:736: PleaHook._rebalance() (src/PleaHook.sol#736-797) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:294: Seasons.flushToWall() (src/Seasons.sol#294-312) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:317: PleaHook._pleaIn(PleaHook.Band,uint160) (src/PleaHook.sol#317-329) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:549: CabalGate._escape(string) (src/CabalGate.sol#549-563) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:188: CabalGate.restricted() (src/CabalGate.sol#188-190) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/CabalGate.sol:549: CabalGate._escape(string) (src/CabalGate.sol#549-563) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/PleaHook.sol:871: PleaHook._settleImd(uint256) (src/PleaHook.sol#871-876) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Seasons.sol:382: Seasons._pay(address,uint256) (src/Seasons.sol#382-385) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:799: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#799-816):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:638: Reentrancy in PleaHook._payCashback(address,uint256) (src/PleaHook.sol#638-653):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:462: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#462-528):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:824: Reentrancy in PleaHook._payTip(address,uint256) (src/PleaHook.sol#824-832):\n[medium/medium] reentrancy-no-eth at src/Seasons.sol:294: Reentrancy in Seasons.flushToWall() (src/Seasons.sol#294-312):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:462: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#462-528):\n[medium/medium] reentrancy-no-eth at src/CabalGate.sol:315: Reentrancy in CabalGate._ask(uint256) (src/CabalGate.sol#315-330):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:736: Reentrancy in PleaHook._rebalance() (src/PleaHook.sol#736-797):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:661: Reentrancy in PleaHook._applyCap() (src/PleaHook.sol#661-703):\n[medium/medium] reentrancy-no-eth at src/PleaHook.sol:724: Reentrancy in PleaHook.rebalance() (src/PleaHook.sol#724-731):\n[medium/medium] reentrancy-no-eth at src/Seasons.sol:251: Reentrancy in Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290):\n[medium/medium] reentrancy-no-eth at src/CabalGate.sol:270: Reentrancy in CabalGate.appeal(uint256,uint256,string) (src/CabalGate.sol#270-291):\n[medium/medium] uninitialized-local at src/Laureates.sol:159: Laureates._svg(Laureates.Laureate,uint8,string,string,string).i (src/Laureates.sol#159) is a local variable never initialized\n[medium/medium] uninitialized-local at src/CabalGate.sol:557: CabalGate._escape(string).j (src/CabalGate.sol#557) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Laureates.sol:205: Laureates._escapeXml(bytes).out (src/Laureates.sol#205) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:361: Seasons._payBonus(uint256,Seasons.Entry[10]).paid (src/Seasons.sol#361) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Laureates.sol:220: Laureates._escapeJson(string).out (src/Laureates.sol#220) is a local variable never initialized\n[medium/medium] uninitialized-local at src/CabalGate.sol:551: CabalGate._escape(string).extra (src/CabalGate.sol#551) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:177: Seasons._record(uint256,uint256,address,uint8).mi (src/Seasons.sol#177) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:276: PleaHook.price24hAgo().bestHour (src/PleaHook.sol#276) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:546: PleaHook._payFees(address,bool,uint256,uint256,uint256).toPrize (src/PleaHook.sol#546) is a local variable never initialized\n[medium/medium] uninitialized-local at src/CabalGate.sol:580: CabalGate._validateText(string).len (src/CabalGate.sol#580) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:266: Seasons.closeSeason(uint256[]).paid (src/Seasons.sol#266) is a local variable never initialized\n[medium/medium] uninitialized-local at src/Seasons.sol:182: Seasons._record(uint256,uint256,address,uint8).pts (src/Seasons.sol#182) is a local variable never initialized\n[medium/medium] uninitialized-local at src/PleaHook.sol:263: PleaHook.latestPrice().bestHour (src/PleaHook.sol#263) is a local variable never initialized\n[medium/medium] unused-return at src/OracleAttestation.sol:158: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/OracleAttestation.sol#158-171) ignores return value by (recovered,err,None) = ECDSA.tryRecover(digest,signature) (src/OracleAttestation.sol#166)\n[medium/medium] unused-return at src/CabalGate.sol:360: CabalGate._stale(CabalGate.Plea) (src/CabalGate.sol#360-364) ignores return value by (None,None,None,completed) = intake.requests(p.intakeId) (src/CabalGate.sol#362)\n[medium/medium] unused-return at src/PleaHook.sol:871: PleaHook._settleImd(uint256) (src/PleaHook.sol#871-876) ignores return value by poolManager.settle() (src/PleaHook.sol#875)\n[medium/medium] unused-return at src/PleaHook.sol:705: PleaHook._removeLiquidity(int24,int24,uint256) (src/PleaHook.sol#705-717) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:- int256(liquidity),salt:0}),) (src/PleaHook.sol#709-713)\n[medium/medium] unused-return at src/CabalGate.sol:467: CabalGate.unlockCallback(bytes) (src/CabalGate.sol#467-494) ignores return value by pm.settle() (src/CabalGate.sol#491)\n[medium/medium] unused-return at src/PleaHook.sol:841: PleaHook.unlockCallback(bytes) (src/PleaHook.sol#841-869) ignores return value by poolManager.settle() (src/PleaHook.sol#861)\n[medium/medium] unused-return at src/Seasons.sol:251: Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290) ignores return value by (seller,None,None,None) = gate.result(lp[i_scope_1].pleaId) (src/Seasons.sol#286)\n[medium/medium] unused-return at src/PleaHook.sol:353: PleaHook.seed() (src/PleaHook.sol#353-396) ignores return value by imd.approve(address(stacker),type()(uint256).max) (src/PleaHook.sol#393)\n[medium/medium] unused-return at src/Seasons.sol:316: Seasons._redeemClaims() (src/Seasons.sol#316-323) ignores return value by pm.unlock(abi.encode(amount)) (src/Seasons.sol#322)\n[medium/medium] unused-return at src/PleaHook.sol:841: PleaHook.unlockCallback(bytes) (src/PleaHook.sol#841-869) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:int256(uint256(liquidity)),salt:0}),) (src/PleaHook.sol#848-854)\n[medium/medium] unused-return at src/PleaHook.sol:244: PleaHook.currentTick() (src/PleaHook.sol#244-246) ignores return value by (None,tick,None,None) = poolManager.getSlot0(poolId()) (src/PleaHook.sol#245)\n[medium/medium] unused-return at src/PleaHook.sol:736: PleaHook._rebalance() (src/PleaHook.sol#736-797) ignores return value by (d,None) = poolManager.modifyLiquidity(poolKey(),ModifyLiquidityParams({tickLower:lower,tickUpper:upper,liquidityDelta:int256(uint256(liquidity)),salt:0}),) (src/PleaHook.sol#777-783)\n[medium/medium] unused-return at src/PleaHook.sol:240: PleaHook.currentSqrtPriceX96() (src/PleaHook.sol#240-242) ignores return value by (sqrtPriceX96,None,None,None) = poolManager.getSlot0(poolId()) (src/PleaHook.sol#241)\n[medium/medium] unused-return at src/Laureates.sol:83: Laureates.tokenURI(uint256) (src/Laureates.sol#83-96) ignores return value by (seller,score,None,None) = g.result(l.pleaId) (src/Laureates.sol#87)\n[low/medium] missing-zero-check at src/PleaHook.sol:186: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).plea_ (src/PleaHook.sol#186) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:50: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).plea_ (src/PleaLaunch.sol#50) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:189: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).owner_ (src/PleaHook.sol#189) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaHook.sol:190: PleaHook.constructor(IPoolManager,address,IERC20,IStacker,address,address,uint256).seasons_ (src/PleaHook.sol#190) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:55: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).poolManager_ (src/PleaLaunch.sol#55) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:65: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).owner_ (src/PleaLaunch.sol#65) lacks a zero-check on :\n[low/medium] missing-zero-check at src/PleaLaunch.sol:51: PleaLaunch.constructor(address,address,address,address,address,address,address,address,uint256,uint256).gate_ (src/PleaLaunch.sol#51) lacks a zero-check on :\n[low/medium] calls-loop at src/Seasons.sol:335: Seasons._tryRecord(uint256) (src/Seasons.sol#335-342) has external calls inside a loop: (seller,score,approved,verdictAt) = gate.result(pleaId) (src/Seasons.sol#337)\n[low/medium] calls-loop at src/Seasons.sol:382: Seasons._pay(address,uint256) (src/Seasons.sol#382-385) has external calls inside a loop: (ok,ret) = address(imd).call(abi.encodeCall(IERC20.transfer,(to,amount))) (src/Seasons.sol#383)\n[low/medium] calls-loop at src/Seasons.sol:251: Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290) has external calls inside a loop: (seller,None,None,None) = gate.result(lp[i_scope_1].pleaId) (src/Seasons.sol#286)\n[low/medium] calls-loop at src/Seasons.sol:359: Seasons._payBonus(uint256,Seasons.Entry[10]) (src/Seasons.sol#359-379) has external calls inside a loop: (ok,ret) = address(token).call(abi.encodeCall(IERC20.transfer,(t[i].wallet,amount))) (src/Seasons.sol#365)\n[low/medium] calls-loop at src/Seasons.sol:168: Seasons._seasonOf(uint64) (src/Seasons.sol#168-170) has external calls inside a loop: (uint256(verdictAt) - gate.startedAt()) / SEASON (src/Seasons.sol#169)\n[low/medium] calls-loop at src/Seasons.sol:251: Seasons.closeSeason(uint256[]) (src/Seasons.sol#251-290) has external calls inside a loop: tokenId = l.mint(seller,season,uint8(i_scope_1 + 1),lp[i_scope_1].pleaId) (src/Seasons.sol#287)\n[low/medium] reentrancy-benign at src/PleaHook.sol:353: Reentrancy in PleaHook.seed() (src/PleaHook.sol#353-396):\n[low/medium] reentrancy-benign at src/Seasons.sol:359: Reentrancy in Seasons._payBonus(uint256,Seasons.Entry[10]) (src/Seasons.sol#359-379):\n[low/medium] reentrancy-benign at src/PleaHook.sol:661: Reentrancy in PleaHook._applyCap() (src/PleaHook.sol#661-703):\n[low/medium] reentrancy-benign at src/PleaHook.sol:799: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#799-816):\n[low/medium] reentrancy-benign at src/PleaHook.sol:638: Reentrancy in PleaHook._payCashback(address,uint256) (src/PleaHook.sol#638-653):\n[low/medium] reentrancy-benign at src/PleaHook.sol:535: Reentrancy in PleaHook._payFees(address,bool,uint256,uint256,uint256) (src/PleaHook.sol#535-579):\n[low/medium] reentrancy-benign at src/PleaHook.sol:462: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#462-528):\n[low/medium] reentrancy-benign at src/PleaHook.sol:661: Reentrancy in PleaHook._applyCap() (src/PleaHook.sol#661-703):\n[low/medium] reentrancy-benign at src/PleaHook.sol:353: Reentrancy in PleaHook.seed() (src/PleaHook.sol#353-396):\n[low/medium] reentrancy-benign at src/PleaHook.sol:353: Reentrancy in PleaHook.seed() (src/PleaHook.sol#353-396):\n[low/medium] reentrancy-benign at src/PleaHook.sol:535: Reentrancy in PleaHook._payFees(address,bool,uint256,uint256,uint256) (src/PleaHook.sol#535-579):\n[low/medium] reentrancy-benign at src/PleaHook.sol:535: Reentrancy in PleaHook._payFees(address,bool,uint256,uint256,uint256) (src/PleaHook.sol#535-579):\n[low/medium] reentrancy-benign at src/PleaHook.sol:799: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#799-816):\n[low/medium] reentrancy-benign at src/PleaHook.sol:462: Reentrancy in PleaHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/PleaHook.sol#462-528):\n[low/medium] reentrancy-benign at src/Seasons.sol:294: Reentrancy in Seasons.flushToWall() (src/Seasons.sol#294-312):\n[low/medium] reentrancy-benign at src/PleaHook.sol:736: Reentrancy in PleaHook._rebalance() (src/PleaHook.sol#736-797):\n[low/medium] reentrancy-benign at src/PleaHook.sol:736: Reentrancy in PleaHook._rebalance() (src/PleaHook.sol#736-797):\n[low/medium] reentrancy-benign at src/CabalGate.sol:315: Reentrancy in CabalGate._ask(uint256) (src/CabalGate.sol#315-330):\n[low/medium] reentrancy-benign at src/PleaHook.sol:799: Reentrancy in PleaHook._closeWall() (src/PleaHook.sol#799-816):\n[low/medium] reentr","passed":true},{"durationMs":1077,"exitCode":0,"name":"aderyn","output":"[high] abi-encode-packed-hash-collision at src/PleaLaunch.sol:68: `abi.encodePacked()` Hash Collision\n[high] reentrancy-state-change at src/CabalGate.sol:173: Reentrancy: State change after external call (12 places)\n[high] storage-array-memory-edit at src/PleaHook.sol:295: Storage Array Edited with Memory (3 places)\n[high] unsafe-casting at src/CabalGate.sol:303: Unsafe Casting of integers (4 places)\n[low] centralization-risk at src/PLEA.sol:13: Centralization Risk (4 places)\n[low] costly-loop at src/Seasons.sol:220: Costly operations inside loop (3 places)\n[low] internal-function-used-once at src/OracleAttestation.sol:206: Internal Function Used Only Once\n[low] large-numeric-literal at src/CabalGate.sol:225: Large Numeric Literal (8 places)\n[low] literal-instead-of-constant at src/CabalGate.sol:225: Literal Instead of Constant (77 places)\n[low] missing-inheritance at src/PleaHook.sol:35: Missing Inheritance (2 places)\n[low] require-revert-in-loop at src/CabalGate.sol:572: Loop Contains `require`/`revert` (3 places)\n[low] state-change-without-event at src/CabalGate.sol:467: State Change Without Event (3 places)\n[low] unchecked-return at src/CabalGate.sol:491: Unchecked Return (5 places)\n[low] uninitialized-local-variable at src/CabalGate.sol:551: Uninitialized Local Variable (13 places)\n[low] unsafe-erc20-operation at src/PleaHook.sol:393: Unsafe ERC20 Operation (5 places)\n[low] unsafe-oz-erc721-mint at src/Laureates.sol:41: Unsafe `ERC721::_mint()`\n[low] unused-import at src/PleaLaunch.sol:4: Unused Import (3 places)\n[low] unused-public-function at src/CabalGate.sol:193: Public Function Not Used Internally (7 places)\n[low] unused-state-variable at src/PLEA.sol:26: Unused State Variable (4 places)","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"c075b63f86b0ee72d623b86c92042033e0900bd6dd4ee574ea5bc80a10514ba2","verifiedTreeHash":"64a17398e9fe17ad211f83c4432fcdb09b3f2409","verifierVersion":"0.1.0+0e08a464"}]}