{"matchId":"543411","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-07-16T12:43:17Z","creationBytecode":{"onchainBytecode":"0x6080604052348015600e575f5ffd5b506107908061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c806384c68e2514610038578063d39c4de714610061575b5f5ffd5b61004b6100463660046104d0565b610093565b604051610058919061054a565b60405180910390f35b61008361006f36600461058e565b5f6020819052908152604090205460ff1681565b6040519015158152602001610058565b60603330146100e95760405162461bcd60e51b815260206004820152601860248201527f42617463684578656375746f723a206f6e6c792073656c66000000000000000060448201526064015b60405180910390fd5b5f82900361010a5760405163c2e5347d60e01b815260040160405180910390fd5b5f8481526020819052604090205460ff161561013c57604051630aa1e0e560e31b8152600481018590526024016100e0565b5f5b8281101561017b5761017384848381811061015b5761015b6105a5565b905060200281019061016d91906105b9565b82610382565b60010161013e565b505f848152602081905260409020805460ff191660011790558167ffffffffffffffff8111156101ad576101ad6105d7565b6040519080825280602002602001820160405280156101d6578160200160208202803683370190505b5090505f5b8281101561033f575f5f8585848181106101f7576101f76105a5565b905060200281019061020991906105b9565b610217906020810190610602565b6001600160a01b0316868685818110610232576102326105a5565b905060200281019061024491906105b9565b610252906020810190610624565b60405161026092919061066e565b5f604051808303815f865af19150503d805f8114610299576040519150601f19603f3d011682016040523d82523d5f602084013e61029e565b606091505b5091509150818484815181106102b6576102b66105a5565b91151560209283029190910190910152867fffa121fed461c011cd401a1a236bfcad57b38f21192f5bf53539cce0be3edf04848888828181106102fb576102fb6105a5565b905060200281019061030d91906105b9565b61031b906020810190610602565b858560405161032d949392919061067d565b60405180910390a250506001016101db565b50604080514281526020810184905285917f6f35692cff62eecb7cbc2d8ba3f6f36ef2f168885894d557e4de4446ecbdc3be910160405180910390a29392505050565b61038f6020830183610602565b6001600160a01b03163b5f036103d857806103ad6020840184610602565b604051630222f98960e41b815260048101929092526001600160a01b031660248201526044016100e0565b6103e56020830183610624565b905060441461040a5760405163941eefc360e01b8152600481018290526024016100e0565b5f6104186020840184610624565b610426916004915f916106d1565b61042f916106f8565b90506001600160e01b0319811663095ea7b360e01b146104755760405163a7dd6a9560e01b8152600481018390526001600160e01b0319821660248201526044016100e0565b5f6104836020850185610624565b6104919160049082906106d1565b81019061049e9190610730565b91505080156104ca5760405163598fcfe360e11b815260048101849052602481018290526044016100e0565b50505050565b5f5f5f604084860312156104e2575f5ffd5b83359250602084013567ffffffffffffffff8111156104ff575f5ffd5b8401601f8101861361050f575f5ffd5b803567ffffffffffffffff811115610525575f5ffd5b8660208260051b8401011115610539575f5ffd5b939660209190910195509293505050565b602080825282518282018190525f918401906040840190835b818110156105835783511515835260209384019390920191600101610563565b509095945050505050565b5f6020828403121561059e575f5ffd5b5035919050565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126105cd575f5ffd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03811681146105ff575f5ffd5b50565b5f60208284031215610612575f5ffd5b813561061d816105eb565b9392505050565b5f5f8335601e19843603018112610639575f5ffd5b83018035915067ffffffffffffffff821115610653575f5ffd5b602001915036819003821315610667575f5ffd5b9250929050565b818382375f9101908152919050565b84815260018060a01b03841660208201528215156040820152608060608201525f8251806080840152806020850160a085015e5f60a0828501015260a0601f19601f83011684010191505095945050505050565b5f5f858511156106df575f5ffd5b838611156106eb575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610729576001600160e01b0319600485900360031b81901b82161691505b5092915050565b5f5f60408385031215610741575f5ffd5b823561074c816105eb565b94602093909301359350505056fea264697066735822122040644259ec27ad891d5f8eab7ab97f411391cd7a6fe42b2b6f59a5288c87994a64736f6c634300081c0033","recompiledBytecode":"0x6080604052348015600e575f5ffd5b506107908061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c806384c68e2514610038578063d39c4de714610061575b5f5ffd5b61004b6100463660046104d0565b610093565b604051610058919061054a565b60405180910390f35b61008361006f36600461058e565b5f6020819052908152604090205460ff1681565b6040519015158152602001610058565b60603330146100e95760405162461bcd60e51b815260206004820152601860248201527f42617463684578656375746f723a206f6e6c792073656c66000000000000000060448201526064015b60405180910390fd5b5f82900361010a5760405163c2e5347d60e01b815260040160405180910390fd5b5f8481526020819052604090205460ff161561013c57604051630aa1e0e560e31b8152600481018590526024016100e0565b5f5b8281101561017b5761017384848381811061015b5761015b6105a5565b905060200281019061016d91906105b9565b82610382565b60010161013e565b505f848152602081905260409020805460ff191660011790558167ffffffffffffffff8111156101ad576101ad6105d7565b6040519080825280602002602001820160405280156101d6578160200160208202803683370190505b5090505f5b8281101561033f575f5f8585848181106101f7576101f76105a5565b905060200281019061020991906105b9565b610217906020810190610602565b6001600160a01b0316868685818110610232576102326105a5565b905060200281019061024491906105b9565b610252906020810190610624565b60405161026092919061066e565b5f604051808303815f865af19150503d805f8114610299576040519150601f19603f3d011682016040523d82523d5f602084013e61029e565b606091505b5091509150818484815181106102b6576102b66105a5565b91151560209283029190910190910152867fffa121fed461c011cd401a1a236bfcad57b38f21192f5bf53539cce0be3edf04848888828181106102fb576102fb6105a5565b905060200281019061030d91906105b9565b61031b906020810190610602565b858560405161032d949392919061067d565b60405180910390a250506001016101db565b50604080514281526020810184905285917f6f35692cff62eecb7cbc2d8ba3f6f36ef2f168885894d557e4de4446ecbdc3be910160405180910390a29392505050565b61038f6020830183610602565b6001600160a01b03163b5f036103d857806103ad6020840184610602565b604051630222f98960e41b815260048101929092526001600160a01b031660248201526044016100e0565b6103e56020830183610624565b905060441461040a5760405163941eefc360e01b8152600481018290526024016100e0565b5f6104186020840184610624565b610426916004915f916106d1565b61042f916106f8565b90506001600160e01b0319811663095ea7b360e01b146104755760405163a7dd6a9560e01b8152600481018390526001600160e01b0319821660248201526044016100e0565b5f6104836020850185610624565b6104919160049082906106d1565b81019061049e9190610730565b91505080156104ca5760405163598fcfe360e11b815260048101849052602481018290526044016100e0565b50505050565b5f5f5f604084860312156104e2575f5ffd5b83359250602084013567ffffffffffffffff8111156104ff575f5ffd5b8401601f8101861361050f575f5ffd5b803567ffffffffffffffff811115610525575f5ffd5b8660208260051b8401011115610539575f5ffd5b939660209190910195509293505050565b602080825282518282018190525f918401906040840190835b818110156105835783511515835260209384019390920191600101610563565b509095945050505050565b5f6020828403121561059e575f5ffd5b5035919050565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126105cd575f5ffd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03811681146105ff575f5ffd5b50565b5f60208284031215610612575f5ffd5b813561061d816105eb565b9392505050565b5f5f8335601e19843603018112610639575f5ffd5b83018035915067ffffffffffffffff821115610653575f5ffd5b602001915036819003821315610667575f5ffd5b9250929050565b818382375f9101908152919050565b84815260018060a01b03841660208201528215156040820152608060608201525f8251806080840152806020850160a085015e5f60a0828501015260a0601f19601f83011684010191505095945050505050565b5f5f858511156106df575f5ffd5b838611156106eb575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610729576001600160e01b0319600485900360031b81901b82161691505b5092915050565b5f5f60408385031215610741575f5ffd5b823561074c816105eb565b94602093909301359350505056fea264697066735822122040644259ec27ad891d5f8eab7ab97f411391cd7a6fe42b2b6f59a5288c87994a64736f6c634300081c0033","sourceMap":"1606:3847:0:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa264697066735822122040644259ec27ad891d5f8eab7ab97f411391cd7a6fe42b2b6f59a5288c87994a64736f6c634300081c0033","offset":1911}},"transformations":[],"transformationValues":{}},"runtimeBytecode":{"onchainBytecode":"0x608060405234801561000f575f5ffd5b5060043610610034575f3560e01c806384c68e2514610038578063d39c4de714610061575b5f5ffd5b61004b6100463660046104d0565b610093565b604051610058919061054a565b60405180910390f35b61008361006f36600461058e565b5f6020819052908152604090205460ff1681565b6040519015158152602001610058565b60603330146100e95760405162461bcd60e51b815260206004820152601860248201527f42617463684578656375746f723a206f6e6c792073656c66000000000000000060448201526064015b60405180910390fd5b5f82900361010a5760405163c2e5347d60e01b815260040160405180910390fd5b5f8481526020819052604090205460ff161561013c57604051630aa1e0e560e31b8152600481018590526024016100e0565b5f5b8281101561017b5761017384848381811061015b5761015b6105a5565b905060200281019061016d91906105b9565b82610382565b60010161013e565b505f848152602081905260409020805460ff191660011790558167ffffffffffffffff8111156101ad576101ad6105d7565b6040519080825280602002602001820160405280156101d6578160200160208202803683370190505b5090505f5b8281101561033f575f5f8585848181106101f7576101f76105a5565b905060200281019061020991906105b9565b610217906020810190610602565b6001600160a01b0316868685818110610232576102326105a5565b905060200281019061024491906105b9565b610252906020810190610624565b60405161026092919061066e565b5f604051808303815f865af19150503d805f8114610299576040519150601f19603f3d011682016040523d82523d5f602084013e61029e565b606091505b5091509150818484815181106102b6576102b66105a5565b91151560209283029190910190910152867fffa121fed461c011cd401a1a236bfcad57b38f21192f5bf53539cce0be3edf04848888828181106102fb576102fb6105a5565b905060200281019061030d91906105b9565b61031b906020810190610602565b858560405161032d949392919061067d565b60405180910390a250506001016101db565b50604080514281526020810184905285917f6f35692cff62eecb7cbc2d8ba3f6f36ef2f168885894d557e4de4446ecbdc3be910160405180910390a29392505050565b61038f6020830183610602565b6001600160a01b03163b5f036103d857806103ad6020840184610602565b604051630222f98960e41b815260048101929092526001600160a01b031660248201526044016100e0565b6103e56020830183610624565b905060441461040a5760405163941eefc360e01b8152600481018290526024016100e0565b5f6104186020840184610624565b610426916004915f916106d1565b61042f916106f8565b90506001600160e01b0319811663095ea7b360e01b146104755760405163a7dd6a9560e01b8152600481018390526001600160e01b0319821660248201526044016100e0565b5f6104836020850185610624565b6104919160049082906106d1565b81019061049e9190610730565b91505080156104ca5760405163598fcfe360e11b815260048101849052602481018290526044016100e0565b50505050565b5f5f5f604084860312156104e2575f5ffd5b83359250602084013567ffffffffffffffff8111156104ff575f5ffd5b8401601f8101861361050f575f5ffd5b803567ffffffffffffffff811115610525575f5ffd5b8660208260051b8401011115610539575f5ffd5b939660209190910195509293505050565b602080825282518282018190525f918401906040840190835b818110156105835783511515835260209384019390920191600101610563565b509095945050505050565b5f6020828403121561059e575f5ffd5b5035919050565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126105cd575f5ffd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03811681146105ff575f5ffd5b50565b5f60208284031215610612575f5ffd5b813561061d816105eb565b9392505050565b5f5f8335601e19843603018112610639575f5ffd5b83018035915067ffffffffffffffff821115610653575f5ffd5b602001915036819003821315610667575f5ffd5b9250929050565b818382375f9101908152919050565b84815260018060a01b03841660208201528215156040820152608060608201525f8251806080840152806020850160a085015e5f60a0828501015260a0601f19601f83011684010191505095945050505050565b5f5f858511156106df575f5ffd5b838611156106eb575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610729576001600160e01b0319600485900360031b81901b82161691505b5092915050565b5f5f60408385031215610741575f5ffd5b823561074c816105eb565b94602093909301359350505056fea264697066735822122040644259ec27ad891d5f8eab7ab97f411391cd7a6fe42b2b6f59a5288c87994a64736f6c634300081c0033","recompiledBytecode":"0x608060405234801561000f575f5ffd5b5060043610610034575f3560e01c806384c68e2514610038578063d39c4de714610061575b5f5ffd5b61004b6100463660046104d0565b610093565b604051610058919061054a565b60405180910390f35b61008361006f36600461058e565b5f6020819052908152604090205460ff1681565b6040519015158152602001610058565b60603330146100e95760405162461bcd60e51b815260206004820152601860248201527f42617463684578656375746f723a206f6e6c792073656c66000000000000000060448201526064015b60405180910390fd5b5f82900361010a5760405163c2e5347d60e01b815260040160405180910390fd5b5f8481526020819052604090205460ff161561013c57604051630aa1e0e560e31b8152600481018590526024016100e0565b5f5b8281101561017b5761017384848381811061015b5761015b6105a5565b905060200281019061016d91906105b9565b82610382565b60010161013e565b505f848152602081905260409020805460ff191660011790558167ffffffffffffffff8111156101ad576101ad6105d7565b6040519080825280602002602001820160405280156101d6578160200160208202803683370190505b5090505f5b8281101561033f575f5f8585848181106101f7576101f76105a5565b905060200281019061020991906105b9565b610217906020810190610602565b6001600160a01b0316868685818110610232576102326105a5565b905060200281019061024491906105b9565b610252906020810190610624565b60405161026092919061066e565b5f604051808303815f865af19150503d805f8114610299576040519150601f19603f3d011682016040523d82523d5f602084013e61029e565b606091505b5091509150818484815181106102b6576102b66105a5565b91151560209283029190910190910152867fffa121fed461c011cd401a1a236bfcad57b38f21192f5bf53539cce0be3edf04848888828181106102fb576102fb6105a5565b905060200281019061030d91906105b9565b61031b906020810190610602565b858560405161032d949392919061067d565b60405180910390a250506001016101db565b50604080514281526020810184905285917f6f35692cff62eecb7cbc2d8ba3f6f36ef2f168885894d557e4de4446ecbdc3be910160405180910390a29392505050565b61038f6020830183610602565b6001600160a01b03163b5f036103d857806103ad6020840184610602565b604051630222f98960e41b815260048101929092526001600160a01b031660248201526044016100e0565b6103e56020830183610624565b905060441461040a5760405163941eefc360e01b8152600481018290526024016100e0565b5f6104186020840184610624565b610426916004915f916106d1565b61042f916106f8565b90506001600160e01b0319811663095ea7b360e01b146104755760405163a7dd6a9560e01b8152600481018390526001600160e01b0319821660248201526044016100e0565b5f6104836020850185610624565b6104919160049082906106d1565b81019061049e9190610730565b91505080156104ca5760405163598fcfe360e11b815260048101849052602481018290526044016100e0565b50505050565b5f5f5f604084860312156104e2575f5ffd5b83359250602084013567ffffffffffffffff8111156104ff575f5ffd5b8401601f8101861361050f575f5ffd5b803567ffffffffffffffff811115610525575f5ffd5b8660208260051b8401011115610539575f5ffd5b939660209190910195509293505050565b602080825282518282018190525f918401906040840190835b818110156105835783511515835260209384019390920191600101610563565b509095945050505050565b5f6020828403121561059e575f5ffd5b5035919050565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126105cd575f5ffd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03811681146105ff575f5ffd5b50565b5f60208284031215610612575f5ffd5b813561061d816105eb565b9392505050565b5f5f8335601e19843603018112610639575f5ffd5b83018035915067ffffffffffffffff821115610653575f5ffd5b602001915036819003821315610667575f5ffd5b9250929050565b818382375f9101908152919050565b84815260018060a01b03841660208201528215156040820152608060608201525f8251806080840152806020850160a085015e5f60a0828501015260a0601f19601f83011684010191505095945050505050565b5f5f858511156106df575f5ffd5b838611156106eb575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610729576001600160e01b0319600485900360031b81901b82161691505b5092915050565b5f5f60408385031215610741575f5ffd5b823561074c816105eb565b94602093909301359350505056fea264697066735822122040644259ec27ad891d5f8eab7ab97f411391cd7a6fe42b2b6f59a5288c87994a64736f6c634300081c0033","sourceMap":"1606:3847:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3955:969;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2915:43;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;1789:14:1;;1782:22;1764:41;;1752:2;1737:18;2915:43:0;1624:187:1;3955:969:0;4062:23;4109:10;4131:4;4109:27;4101:64;;;;-1:-1:-1;;;4101:64:0;;2018:2:1;4101:64:0;;;2000:21:1;2057:2;2037:18;;;2030:30;2096:26;2076:18;;;2069:54;2140:18;;4101:64:0;;;;;;;;;4197:1;4179:19;;;4175:44;;4207:12;;-1:-1:-1;;;4207:12:0;;;;;;;;;;;4175:44;4233:11;:27;;;;;;;;;;;;;4229:73;;;4269:33;;-1:-1:-1;;;4269:33:0;;;;;2315:25:1;;;2288:18;;4269:33:0;2169:177:1;4229:73:0;4318:9;4313:94;4333:18;;;4313:94;;;4372:24;4382:7;;4390:1;4382:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4394:1;4372:9;:24::i;:::-;4353:3;;4313:94;;;-1:-1:-1;4499:11:0;:27;;;;;;;;;;:34;;-1:-1:-1;;4499:34:0;4529:4;4499:34;;;4567:7;4556:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4556:26:0;-1:-1:-1;4544:38:0;-1:-1:-1;4597:9:0;4592:248;4612:18;;;4592:248;;;4652:7;4661:16;4681:7;;4689:1;4681:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:17;;;;;;;:::i;:::-;-1:-1:-1;;;;;4681:22:0;4704:7;;4712:1;4704:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;;;;;;:::i;:::-;4681:39;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4651:69;;;;4749:2;4734:9;4744:1;4734:12;;;;;;;;:::i;:::-;:17;;;:12;;;;;;;;;;;:17;4783:14;4770:59;4799:1;4802:7;;4799:1;4802:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:17;;;;;;;:::i;:::-;4821:2;4825:3;4770:59;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;4632:3:0;;4592:248;;;-1:-1:-1;4855:62:0;;;4885:15;4980:25:1;;5036:2;5021:18;;5014:34;;;4869:14:0;;4855:62;;4953:18:1;4855:62:0;;;;;;;3955:969;;;;;:::o;4930:521::-;5015:13;;;;:6;:13;:::i;:::-;-1:-1:-1;;;;;5015:25:0;;5044:1;5015:30;5011:80;;5070:5;5077:13;;;;:6;:13;:::i;:::-;5054:37;;-1:-1:-1;;;5054:37:0;;;;;5233:25:1;;;;-1:-1:-1;;;;;5294:32:1;5274:18;;;5267:60;5206:18;;5054:37:0;5059:274:1;5011:80:0;5105:11;;;;:6;:11;:::i;:::-;:18;;5127:2;5105:24;5101:61;;5138:24;;-1:-1:-1;;;5138:24:0;;;;;2315:25:1;;;2288:18;;5138:24:0;2169:177:1;5101:61:0;5173:15;5198:11;;;;:6;:11;:::i;:::-;:15;;5211:1;;5198:15;;;:::i;:::-;5191:23;;;:::i;:::-;5173:41;-1:-1:-1;;;;;;;5228:28:0;;-1:-1:-1;;;5228:28:0;5224:77;;5265:36;;-1:-1:-1;;;5265:36:0;;;;;6371:25:1;;;-1:-1:-1;;;;;;6432:33:1;;6412:18;;;6405:61;6344:18;;5265:36:0;6199:273:1;5224:77:0;5315:14;5344:11;;;;:6;:11;:::i;:::-;:15;;5356:1;;5344:15;;;:::i;:::-;5333:47;;;;;;;:::i;:::-;5312:68;-1:-1:-1;;5394:11:0;;5390:54;;5414:30;;-1:-1:-1;;;5414:30:0;;;;;4980:25:1;;;5021:18;;;5014:34;;;4953:18;;5414:30:0;4806:248:1;5390:54:0;5001:450;;4930:521;;:::o;14:748:1:-;133:6;141;149;202:2;190:9;181:7;177:23;173:32;170:52;;;218:1;215;208:12;170:52;263:23;;;-1:-1:-1;361:2:1;346:18;;333:32;388:18;377:30;;374:50;;;420:1;417;410:12;374:50;443:22;;496:4;488:13;;484:27;-1:-1:-1;474:55:1;;525:1;522;515:12;474:55;565:2;552:16;591:18;583:6;580:30;577:50;;;623:1;620;613:12;577:50;676:7;671:2;661:6;658:1;654:14;650:2;646:23;642:32;639:45;636:65;;;697:1;694;687:12;636:65;14:748;;728:2;720:11;;;;;-1:-1:-1;750:6:1;;-1:-1:-1;;;14:748:1:o;767:621::-;951:2;963:21;;;1033:13;;936:18;;;1055:22;;;903:4;;1134:15;;;1108:2;1093:18;;;903:4;1177:185;1191:6;1188:1;1185:13;1177:185;;;1266:13;;1259:21;1252:29;1240:42;;1311:2;1337:15;;;;1302:12;;;;1213:1;1206:9;1177:185;;;-1:-1:-1;1379:3:1;;767:621;-1:-1:-1;;;;;767:621:1:o;1393:226::-;1452:6;1505:2;1493:9;1484:7;1480:23;1476:32;1473:52;;;1521:1;1518;1511:12;1473:52;-1:-1:-1;1566:23:1;;1393:226;-1:-1:-1;1393:226:1:o;2351:127::-;2412:10;2407:3;2403:20;2400:1;2393:31;2443:4;2440:1;2433:15;2467:4;2464:1;2457:15;2483:321;2573:4;2631:11;2618:25;2725:2;2721:7;2710:8;2694:14;2690:29;2686:43;2666:18;2662:68;2652:96;;2744:1;2741;2734:12;2652:96;2765:33;;;;;2483:321;-1:-1:-1;;2483:321:1:o;2809:127::-;2870:10;2865:3;2861:20;2858:1;2851:31;2901:4;2898:1;2891:15;2925:4;2922:1;2915:15;2941:131;-1:-1:-1;;;;;3016:31:1;;3006:42;;2996:70;;3062:1;3059;3052:12;2996:70;2941:131;:::o;3077:247::-;3136:6;3189:2;3177:9;3168:7;3164:23;3160:32;3157:52;;;3205:1;3202;3195:12;3157:52;3244:9;3231:23;3263:31;3288:5;3263:31;:::i;:::-;3313:5;3077:247;-1:-1:-1;;;3077:247:1:o;3329:521::-;3406:4;3412:6;3472:11;3459:25;3566:2;3562:7;3551:8;3535:14;3531:29;3527:43;3507:18;3503:68;3493:96;;3585:1;3582;3575:12;3493:96;3612:33;;3664:20;;;-1:-1:-1;3707:18:1;3696:30;;3693:50;;;3739:1;3736;3729:12;3693:50;3772:4;3760:17;;-1:-1:-1;3803:14:1;3799:27;;;3789:38;;3786:58;;;3840:1;3837;3830:12;3786:58;3329:521;;;;;:::o;3855:271::-;4038:6;4030;4025:3;4012:33;3994:3;4064:16;;4089:13;;;4064:16;3855:271;-1:-1:-1;3855:271:1:o;4131:670::-;4356:6;4345:9;4338:25;4428:1;4424;4419:3;4415:11;4411:19;4403:6;4399:32;4394:2;4383:9;4379:18;4372:60;4482:6;4475:14;4468:22;4463:2;4452:9;4448:18;4441:50;4527:3;4522:2;4511:9;4507:18;4500:31;4319:4;4560:6;4554:13;4604:6;4598:3;4587:9;4583:19;4576:35;4664:6;4659:2;4651:6;4647:15;4641:3;4630:9;4626:19;4620:51;4721:1;4715:3;4706:6;4695:9;4691:22;4687:32;4680:43;4791:3;4784:2;4780:7;4775:2;4767:6;4763:15;4759:29;4748:9;4744:45;4740:55;4732:63;;;4131:670;;;;;;;:::o;5520:331::-;5625:9;5636;5678:8;5666:10;5663:24;5660:44;;;5700:1;5697;5690:12;5660:44;5729:6;5719:8;5716:20;5713:40;;;5749:1;5746;5739:12;5713:40;-1:-1:-1;;5775:23:1;;;5820:25;;;;;-1:-1:-1;5520:331:1:o;5856:338::-;5976:19;;-1:-1:-1;;;;;;6013:29:1;;;6062:1;6054:10;;6051:137;;;-1:-1:-1;;;;;;6123:1:1;6119:11;;;6116:1;6112:19;6108:46;;;6100:55;;6096:82;;-1:-1:-1;6051:137:1;;5856:338;;;;:::o;6477:323::-;6553:6;6561;6614:2;6602:9;6593:7;6589:23;6585:32;6582:52;;;6630:1;6627;6620:12;6582:52;6669:9;6656:23;6688:31;6713:5;6688:31;:::i;:::-;6738:5;6790:2;6775:18;;;;6762:32;;-1:-1:-1;;;6477:323:1:o","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa264697066735822122040644259ec27ad891d5f8eab7ab97f411391cd7a6fe42b2b6f59a5288c87994a64736f6c634300081c0033","offset":1883}},"immutableReferences":{},"transformations":[],"transformationValues":{}},"deployment":{"transactionHash":"0x8c3421a83bc482bbcd20dd232a4d3eecd69f9d07136f86ed26a3c89a8092c37a","blockNumber":"88132222","transactionIndex":"9","deployer":"0x35160A4238CB5F3166046399c397B6E0c12FD872"},"sources":{"src/BatchExecutor.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.28;\n\n/// @title BatchExecutor\n/// @notice Minimal batched-action executor for WalletBrief's demo action: batch-revoke\n/// stale ERC20 approvals in one human-approved call.\n///\n/// @dev Designed to be attached to a wallet EOA via EIP-7702 delegation (Monad mainnet\n/// supports type-0x04 SetCode txs natively -- docs.monad.xyz/developer-essentials/eip-7702),\n/// so that `address(this)` inside executeBatch resolves to the wallet's own address and\n/// outbound calls carry the wallet as msg.sender. That is required for an action like\n/// `IERC20.approve(spender, 0)` to actually revoke *that wallet's* allowance -- a shared\n/// executor calling out on its own behalf could only revoke its own allowances, not the\n/// wallet's.\n///\n/// Holds zero fund custody by construction: no `receive()`/payable fallback, no balance\n/// bookkeeping, no logic that could accumulate a token balance under this contract's own\n/// deployed address.\n///\n/// Access control: `executeBatch` requires `msg.sender == address(this)`. When the wallet\n/// submits the transaction directly (`to: wallet, from: wallet`), this holds naturally and\n/// blocks any other address -- delegated or not -- from driving the wallet's calls.\n/// ponytail: this blocks EIP-7702 gas-sponsored/relayed execution (a relayer-submitted tx\n/// would have msg.sender == relayer, not the wallet). If sponsored execution is needed\n/// later, replace this check with a signature-based approval check (e.g. EIP-712) instead\n/// of the self-call requirement. Gas sponsorship is outside this demo's scope.\ncontract BatchExecutor {\n    bytes4 private constant APPROVE_SELECTOR = 0x095ea7b3;\n\n    struct Action {\n        address target;\n        bytes data;\n    }\n\n    /// @dev approvalDigest => used. Enforces single-use / non-replayable approvals\n    /// (product spec user story 9, acceptance criteria: \"approvalDigest single-use\").\n    ///\n    /// This digest is an opaque, caller-supplied\n    /// bytes32 -- the contract never derives or checks it against `actions`, so\n    /// uniqueness is tracked per-digest-value, not per-action-content. Two\n    /// different digests wrapping identical actions both execute independently;\n    /// a single digest can never be replayed regardless of what actions\n    /// accompany the first use. Binding a digest to its intended action content\n    /// is an OFF-CHAIN trust boundary (prepare.ts derives the digest\n    /// deterministically from the exact revoke set it packages, and execute()\n    /// submits both together in the one wallet-signed transaction) -- not\n    /// something this mapping enforces. This is safe here specifically because\n    /// `executeBatch` also requires `msg.sender == address(this)`: nobody but\n    /// the wallet itself can ever submit a (digest, actions) pair, so there is\n    /// no third party who could exploit the digest/content gap.\n    mapping(bytes32 => bool) public usedDigests;\n\n    event BatchExecuted(bytes32 indexed approvalDigest, uint256 timestamp, uint256 actionCount);\n    event ActionResult(\n        bytes32 indexed approvalDigest,\n        uint256 index,\n        address target,\n        bool success,\n        bytes returnData\n    );\n\n    error DigestAlreadyUsed(bytes32 approvalDigest);\n    error EmptyBatch();\n    error MalformedCalldata(uint256 index);\n    error TargetHasNoCode(uint256 index, address target);\n    error UnsupportedSelector(uint256 index, bytes4 selector);\n    error NonZeroApproval(uint256 index, uint256 amount);\n\n    /// @notice Executes a batch of low-level calls once per unique approvalDigest.\n    /// @param approvalDigest Caller-supplied digest identifying the human-approved action.\n    ///        Must be unique per approval; replaying an already-used digest reverts.\n    /// @param actions The ordered list of {target, calldata} pairs to execute.\n    /// @return successes Per-action success flags, in the same order as `actions`.\n    function executeBatch(bytes32 approvalDigest, Action[] calldata actions)\n        external\n        returns (bool[] memory successes)\n    {\n        require(msg.sender == address(this), \"BatchExecutor: only self\");\n        if (actions.length == 0) revert EmptyBatch();\n        if (usedDigests[approvalDigest]) revert DigestAlreadyUsed(approvalDigest);\n\n        for (uint256 i = 0; i < actions.length; i++) {\n            _validate(actions[i], i);\n        }\n\n        // Effects before interactions (CEI): mark used before any external call.\n        usedDigests[approvalDigest] = true;\n\n        successes = new bool[](actions.length);\n        for (uint256 i = 0; i < actions.length; i++) {\n            (bool ok, bytes memory ret) = actions[i].target.call(actions[i].data);\n            successes[i] = ok;\n            emit ActionResult(approvalDigest, i, actions[i].target, ok, ret);\n        }\n\n        emit BatchExecuted(approvalDigest, block.timestamp, actions.length);\n    }\n\n    function _validate(Action calldata action, uint256 index) private view {\n        if (action.target.code.length == 0) revert TargetHasNoCode(index, action.target);\n        if (action.data.length != 68) revert MalformedCalldata(index);\n\n        bytes4 selector = bytes4(action.data[:4]);\n        if (selector != APPROVE_SELECTOR) revert UnsupportedSelector(index, selector);\n\n        (, uint256 amount) = abi.decode(action.data[4:], (address, uint256));\n        if (amount != 0) revert NonZeroApproval(index, amount);\n    }\n}\n"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.8.28+commit.7893614a","compilerSettings":{"viaIR":false,"metadata":{"appendCBOR":true,"bytecodeHash":"ipfs","useLiteralContent":false},"libraries":{},"optimizer":{"runs":200,"enabled":true},"evmVersion":"prague","remappings":["forge-std/=lib/forge-std/src/"]},"name":"BatchExecutor","fullyQualifiedName":"src/BatchExecutor.sol:BatchExecutor"},"abi":[{"name":"DigestAlreadyUsed","type":"error","inputs":[{"name":"approvalDigest","type":"bytes32","internalType":"bytes32"}]},{"name":"EmptyBatch","type":"error","inputs":[]},{"name":"MalformedCalldata","type":"error","inputs":[{"name":"index","type":"uint256","internalType":"uint256"}]},{"name":"NonZeroApproval","type":"error","inputs":[{"name":"index","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"TargetHasNoCode","type":"error","inputs":[{"name":"index","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"}]},{"name":"UnsupportedSelector","type":"error","inputs":[{"name":"index","type":"uint256","internalType":"uint256"},{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"name":"ActionResult","type":"event","inputs":[{"name":"approvalDigest","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"success","type":"bool","indexed":false,"internalType":"bool"},{"name":"returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"name":"BatchExecuted","type":"event","inputs":[{"name":"approvalDigest","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"actionCount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"executeBatch","type":"function","inputs":[{"name":"approvalDigest","type":"bytes32","internalType":"bytes32"},{"name":"actions","type":"tuple[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"internalType":"struct BatchExecutor.Action[]"}],"outputs":[{"name":"successes","type":"bool[]","internalType":"bool[]"}],"stateMutability":"nonpayable"},{"name":"usedDigests","type":"function","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"}],"metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"approvalDigest","type":"bytes32"}],"name":"DigestAlreadyUsed","type":"error"},{"inputs":[],"name":"EmptyBatch","type":"error"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"MalformedCalldata","type":"error"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NonZeroApproval","type":"error"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"target","type":"address"}],"name":"TargetHasNoCode","type":"error"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"UnsupportedSelector","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"approvalDigest","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"ActionResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"approvalDigest","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"actionCount","type":"uint256"}],"name":"BatchExecuted","type":"event"},{"inputs":[{"internalType":"bytes32","name":"approvalDigest","type":"bytes32"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct BatchExecutor.Action[]","name":"actions","type":"tuple[]"}],"name":"executeBatch","outputs":[{"internalType":"bool[]","name":"successes","type":"bool[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"usedDigests","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Designed to be attached to a wallet EOA via EIP-7702 delegation (Monad mainnet supports type-0x04 SetCode txs natively -- docs.monad.xyz/developer-essentials/eip-7702), so that `address(this)` inside executeBatch resolves to the wallet's own address and outbound calls carry the wallet as msg.sender. That is required for an action like `IERC20.approve(spender, 0)` to actually revoke *that wallet's* allowance -- a shared executor calling out on its own behalf could only revoke its own allowances, not the wallet's. Holds zero fund custody by construction: no `receive()`/payable fallback, no balance bookkeeping, no logic that could accumulate a token balance under this contract's own deployed address. Access control: `executeBatch` requires `msg.sender == address(this)`. When the wallet submits the transaction directly (`to: wallet, from: wallet`), this holds naturally and blocks any other address -- delegated or not -- from driving the wallet's calls. ponytail: this blocks EIP-7702 gas-sponsored/relayed execution (a relayer-submitted tx would have msg.sender == relayer, not the wallet). If sponsored execution is needed later, replace this check with a signature-based approval check (e.g. EIP-712) instead of the self-call requirement. Gas sponsorship is outside this demo's scope.","kind":"dev","methods":{"executeBatch(bytes32,(address,bytes)[])":{"params":{"actions":"The ordered list of {target, calldata} pairs to execute.","approvalDigest":"Caller-supplied digest identifying the human-approved action.        Must be unique per approval; replaying an already-used digest reverts."},"returns":{"successes":"Per-action success flags, in the same order as `actions`."}}},"stateVariables":{"usedDigests":{"details":"approvalDigest => used. Enforces single-use / non-replayable approvals (product spec user story 9, acceptance criteria: \"approvalDigest single-use\"). This digest is an opaque, caller-supplied bytes32 -- the contract never derives or checks it against `actions`, so uniqueness is tracked per-digest-value, not per-action-content. Two different digests wrapping identical actions both execute independently; a single digest can never be replayed regardless of what actions accompany the first use. Binding a digest to its intended action content is an OFF-CHAIN trust boundary (prepare.ts derives the digest deterministically from the exact revoke set it packages, and execute() submits both together in the one wallet-signed transaction) -- not something this mapping enforces. This is safe here specifically because `executeBatch` also requires `msg.sender == address(this)`: nobody but the wallet itself can ever submit a (digest, actions) pair, so there is no third party who could exploit the digest/content gap."}},"title":"BatchExecutor","version":1},"userdoc":{"kind":"user","methods":{"executeBatch(bytes32,(address,bytes)[])":{"notice":"Executes a batch of low-level calls once per unique approvalDigest."}},"notice":"Minimal batched-action executor for WalletBrief's demo action: batch-revoke stale ERC20 approvals in one human-approved call.","version":1}},"settings":{"compilationTarget":{"src/BatchExecutor.sol":"BatchExecutor"},"evmVersion":"prague","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[":forge-std/=lib/forge-std/src/"]},"sources":{"src/BatchExecutor.sol":{"keccak256":"0xba8e7a5f5719a601421821622c4b4b63a3206264ac7b0d268f220cd79a915310","license":"MIT","urls":["bzz-raw://2d6526f72fb7613d5e0727faa821c82b8e92e7f218091b8b9cbf3d81d315f619","dweb:/ipfs/QmUkqTraxTjdvAQ4M1Rsaxi6jKitEVEyzNbNjLP69PUfDZ"]}},"version":1},"storageLayout":{"types":{"t_bool":{"label":"bool","encoding":"inplace","numberOfBytes":"1"},"t_bytes32":{"label":"bytes32","encoding":"inplace","numberOfBytes":"32"},"t_mapping(t_bytes32,t_bool)":{"key":"t_bytes32","label":"mapping(bytes32 => bool)","value":"t_bool","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_mapping(t_bytes32,t_bool)","astId":15,"label":"usedDigests","offset":0,"contract":"src/BatchExecutor.sol:BatchExecutor"}]},"userdoc":{"kind":"user","notice":"Minimal batched-action executor for WalletBrief's demo action: batch-revoke stale ERC20 approvals in one human-approved call.","methods":{"executeBatch(bytes32,(address,bytes)[])":{"notice":"Executes a batch of low-level calls once per unique approvalDigest."}},"version":1},"devdoc":{"kind":"dev","title":"BatchExecutor","details":"Designed to be attached to a wallet EOA via EIP-7702 delegation (Monad mainnet supports type-0x04 SetCode txs natively -- docs.monad.xyz/developer-essentials/eip-7702), so that `address(this)` inside executeBatch resolves to the wallet's own address and outbound calls carry the wallet as msg.sender. That is required for an action like `IERC20.approve(spender, 0)` to actually revoke *that wallet's* allowance -- a shared executor calling out on its own behalf could only revoke its own allowances, not the wallet's. Holds zero fund custody by construction: no `receive()`/payable fallback, no balance bookkeeping, no logic that could accumulate a token balance under this contract's own deployed address. Access control: `executeBatch` requires `msg.sender == address(this)`. When the wallet submits the transaction directly (`to: wallet, from: wallet`), this holds naturally and blocks any other address -- delegated or not -- from driving the wallet's calls. ponytail: this blocks EIP-7702 gas-sponsored/relayed execution (a relayer-submitted tx would have msg.sender == relayer, not the wallet). If sponsored execution is needed later, replace this check with a signature-based approval check (e.g. EIP-712) instead of the self-call requirement. Gas sponsorship is outside this demo's scope.","methods":{"executeBatch(bytes32,(address,bytes)[])":{"params":{"actions":"The ordered list of {target, calldata} pairs to execute.","approvalDigest":"Caller-supplied digest identifying the human-approved action.        Must be unique per approval; replaying an already-used digest reverts."},"returns":{"successes":"Per-action success flags, in the same order as `actions`."}}},"version":1,"stateVariables":{"usedDigests":{"details":"approvalDigest => used. Enforces single-use / non-replayable approvals (product spec user story 9, acceptance criteria: \"approvalDigest single-use\"). This digest is an opaque, caller-supplied bytes32 -- the contract never derives or checks it against `actions`, so uniqueness is tracked per-digest-value, not per-action-content. Two different digests wrapping identical actions both execute independently; a single digest can never be replayed regardless of what actions accompany the first use. Binding a digest to its intended action content is an OFF-CHAIN trust boundary (prepare.ts derives the digest deterministically from the exact revoke set it packages, and execute() submits both together in the one wallet-signed transaction) -- not something this mapping enforces. This is safe here specifically because `executeBatch` also requires `msg.sender == address(this)`: nobody but the wallet itself can ever submit a (digest, actions) pair, so there is no third party who could exploit the digest/content gap."}}},"sourceIds":{"src/BatchExecutor.sol":{"id":0}},"stdJsonInput":{"language":"Solidity","sources":{"src/BatchExecutor.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.28;\n\n/// @title BatchExecutor\n/// @notice Minimal batched-action executor for WalletBrief's demo action: batch-revoke\n/// stale ERC20 approvals in one human-approved call.\n///\n/// @dev Designed to be attached to a wallet EOA via EIP-7702 delegation (Monad mainnet\n/// supports type-0x04 SetCode txs natively -- docs.monad.xyz/developer-essentials/eip-7702),\n/// so that `address(this)` inside executeBatch resolves to the wallet's own address and\n/// outbound calls carry the wallet as msg.sender. That is required for an action like\n/// `IERC20.approve(spender, 0)` to actually revoke *that wallet's* allowance -- a shared\n/// executor calling out on its own behalf could only revoke its own allowances, not the\n/// wallet's.\n///\n/// Holds zero fund custody by construction: no `receive()`/payable fallback, no balance\n/// bookkeeping, no logic that could accumulate a token balance under this contract's own\n/// deployed address.\n///\n/// Access control: `executeBatch` requires `msg.sender == address(this)`. When the wallet\n/// submits the transaction directly (`to: wallet, from: wallet`), this holds naturally and\n/// blocks any other address -- delegated or not -- from driving the wallet's calls.\n/// ponytail: this blocks EIP-7702 gas-sponsored/relayed execution (a relayer-submitted tx\n/// would have msg.sender == relayer, not the wallet). If sponsored execution is needed\n/// later, replace this check with a signature-based approval check (e.g. EIP-712) instead\n/// of the self-call requirement. Gas sponsorship is outside this demo's scope.\ncontract BatchExecutor {\n    bytes4 private constant APPROVE_SELECTOR = 0x095ea7b3;\n\n    struct Action {\n        address target;\n        bytes data;\n    }\n\n    /// @dev approvalDigest => used. Enforces single-use / non-replayable approvals\n    /// (product spec user story 9, acceptance criteria: \"approvalDigest single-use\").\n    ///\n    /// This digest is an opaque, caller-supplied\n    /// bytes32 -- the contract never derives or checks it against `actions`, so\n    /// uniqueness is tracked per-digest-value, not per-action-content. Two\n    /// different digests wrapping identical actions both execute independently;\n    /// a single digest can never be replayed regardless of what actions\n    /// accompany the first use. Binding a digest to its intended action content\n    /// is an OFF-CHAIN trust boundary (prepare.ts derives the digest\n    /// deterministically from the exact revoke set it packages, and execute()\n    /// submits both together in the one wallet-signed transaction) -- not\n    /// something this mapping enforces. This is safe here specifically because\n    /// `executeBatch` also requires `msg.sender == address(this)`: nobody but\n    /// the wallet itself can ever submit a (digest, actions) pair, so there is\n    /// no third party who could exploit the digest/content gap.\n    mapping(bytes32 => bool) public usedDigests;\n\n    event BatchExecuted(bytes32 indexed approvalDigest, uint256 timestamp, uint256 actionCount);\n    event ActionResult(\n        bytes32 indexed approvalDigest,\n        uint256 index,\n        address target,\n        bool success,\n        bytes returnData\n    );\n\n    error DigestAlreadyUsed(bytes32 approvalDigest);\n    error EmptyBatch();\n    error MalformedCalldata(uint256 index);\n    error TargetHasNoCode(uint256 index, address target);\n    error UnsupportedSelector(uint256 index, bytes4 selector);\n    error NonZeroApproval(uint256 index, uint256 amount);\n\n    /// @notice Executes a batch of low-level calls once per unique approvalDigest.\n    /// @param approvalDigest Caller-supplied digest identifying the human-approved action.\n    ///        Must be unique per approval; replaying an already-used digest reverts.\n    /// @param actions The ordered list of {target, calldata} pairs to execute.\n    /// @return successes Per-action success flags, in the same order as `actions`.\n    function executeBatch(bytes32 approvalDigest, Action[] calldata actions)\n        external\n        returns (bool[] memory successes)\n    {\n        require(msg.sender == address(this), \"BatchExecutor: only self\");\n        if (actions.length == 0) revert EmptyBatch();\n        if (usedDigests[approvalDigest]) revert DigestAlreadyUsed(approvalDigest);\n\n        for (uint256 i = 0; i < actions.length; i++) {\n            _validate(actions[i], i);\n        }\n\n        // Effects before interactions (CEI): mark used before any external call.\n        usedDigests[approvalDigest] = true;\n\n        successes = new bool[](actions.length);\n        for (uint256 i = 0; i < actions.length; i++) {\n            (bool ok, bytes memory ret) = actions[i].target.call(actions[i].data);\n            successes[i] = ok;\n            emit ActionResult(approvalDigest, i, actions[i].target, ok, ret);\n        }\n\n        emit BatchExecuted(approvalDigest, block.timestamp, actions.length);\n    }\n\n    function _validate(Action calldata action, uint256 index) private view {\n        if (action.target.code.length == 0) revert TargetHasNoCode(index, action.target);\n        if (action.data.length != 68) revert MalformedCalldata(index);\n\n        bytes4 selector = bytes4(action.data[:4]);\n        if (selector != APPROVE_SELECTOR) revert UnsupportedSelector(index, selector);\n\n        (, uint256 amount) = abi.decode(action.data[4:], (address, uint256));\n        if (amount != 0) revert NonZeroApproval(index, amount);\n    }\n}\n"}},"settings":{"viaIR":false,"metadata":{"appendCBOR":true,"bytecodeHash":"ipfs","useLiteralContent":false},"libraries":{},"optimizer":{"runs":200,"enabled":true},"evmVersion":"prague","remappings":["forge-std/=lib/forge-std/src/"]}},"stdJsonOutput":{"sources":{"src/BatchExecutor.sol":{"id":0}},"contracts":{"src/BatchExecutor.sol":{"BatchExecutor":{"abi":[{"name":"DigestAlreadyUsed","type":"error","inputs":[{"name":"approvalDigest","type":"bytes32","internalType":"bytes32"}]},{"name":"EmptyBatch","type":"error","inputs":[]},{"name":"MalformedCalldata","type":"error","inputs":[{"name":"index","type":"uint256","internalType":"uint256"}]},{"name":"NonZeroApproval","type":"error","inputs":[{"name":"index","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"TargetHasNoCode","type":"error","inputs":[{"name":"index","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"}]},{"name":"UnsupportedSelector","type":"error","inputs":[{"name":"index","type":"uint256","internalType":"uint256"},{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"name":"ActionResult","type":"event","inputs":[{"name":"approvalDigest","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"success","type":"bool","indexed":false,"internalType":"bool"},{"name":"returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"name":"BatchExecuted","type":"event","inputs":[{"name":"approvalDigest","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"actionCount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"executeBatch","type":"function","inputs":[{"name":"approvalDigest","type":"bytes32","internalType":"bytes32"},{"name":"actions","type":"tuple[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"internalType":"struct BatchExecutor.Action[]"}],"outputs":[{"name":"successes","type":"bool[]","internalType":"bool[]"}],"stateMutability":"nonpayable"},{"name":"usedDigests","type":"function","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"}],"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"approvalDigest\",\"type\":\"bytes32\"}],\"name\":\"DigestAlreadyUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"MalformedCalldata\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NonZeroApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"TargetHasNoCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"UnsupportedSelector\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"approvalDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ActionResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"approvalDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actionCount\",\"type\":\"uint256\"}],\"name\":\"BatchExecuted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"approvalDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct BatchExecutor.Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"}],\"name\":\"executeBatch\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"successes\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"usedDigests\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Designed to be attached to a wallet EOA via EIP-7702 delegation (Monad mainnet supports type-0x04 SetCode txs natively -- docs.monad.xyz/developer-essentials/eip-7702), so that `address(this)` inside executeBatch resolves to the wallet's own address and outbound calls carry the wallet as msg.sender. That is required for an action like `IERC20.approve(spender, 0)` to actually revoke *that wallet's* allowance -- a shared executor calling out on its own behalf could only revoke its own allowances, not the wallet's. Holds zero fund custody by construction: no `receive()`/payable fallback, no balance bookkeeping, no logic that could accumulate a token balance under this contract's own deployed address. Access control: `executeBatch` requires `msg.sender == address(this)`. When the wallet submits the transaction directly (`to: wallet, from: wallet`), this holds naturally and blocks any other address -- delegated or not -- from driving the wallet's calls. ponytail: this blocks EIP-7702 gas-sponsored/relayed execution (a relayer-submitted tx would have msg.sender == relayer, not the wallet). If sponsored execution is needed later, replace this check with a signature-based approval check (e.g. EIP-712) instead of the self-call requirement. Gas sponsorship is outside this demo's scope.\",\"kind\":\"dev\",\"methods\":{\"executeBatch(bytes32,(address,bytes)[])\":{\"params\":{\"actions\":\"The ordered list of {target, calldata} pairs to execute.\",\"approvalDigest\":\"Caller-supplied digest identifying the human-approved action.        Must be unique per approval; replaying an already-used digest reverts.\"},\"returns\":{\"successes\":\"Per-action success flags, in the same order as `actions`.\"}}},\"stateVariables\":{\"usedDigests\":{\"details\":\"approvalDigest => used. Enforces single-use / non-replayable approvals (product spec user story 9, acceptance criteria: \\\"approvalDigest single-use\\\"). This digest is an opaque, caller-supplied bytes32 -- the contract never derives or checks it against `actions`, so uniqueness is tracked per-digest-value, not per-action-content. Two different digests wrapping identical actions both execute independently; a single digest can never be replayed regardless of what actions accompany the first use. Binding a digest to its intended action content is an OFF-CHAIN trust boundary (prepare.ts derives the digest deterministically from the exact revoke set it packages, and execute() submits both together in the one wallet-signed transaction) -- not something this mapping enforces. This is safe here specifically because `executeBatch` also requires `msg.sender == address(this)`: nobody but the wallet itself can ever submit a (digest, actions) pair, so there is no third party who could exploit the digest/content gap.\"}},\"title\":\"BatchExecutor\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeBatch(bytes32,(address,bytes)[])\":{\"notice\":\"Executes a batch of low-level calls once per unique approvalDigest.\"}},\"notice\":\"Minimal batched-action executor for WalletBrief's demo action: batch-revoke stale ERC20 approvals in one human-approved call.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/BatchExecutor.sol\":\"BatchExecutor\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/BatchExecutor.sol\":{\"keccak256\":\"0xba8e7a5f5719a601421821622c4b4b63a3206264ac7b0d268f220cd79a915310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d6526f72fb7613d5e0727faa821c82b8e92e7f218091b8b9cbf3d81d315f619\",\"dweb:/ipfs/QmUkqTraxTjdvAQ4M1Rsaxi6jKitEVEyzNbNjLP69PUfDZ\"]}},\"version\":1}","userdoc":{"kind":"user","notice":"Minimal batched-action executor for WalletBrief's demo action: batch-revoke stale ERC20 approvals in one human-approved call.","methods":{"executeBatch(bytes32,(address,bytes)[])":{"notice":"Executes a batch of low-level calls once per unique approvalDigest."}},"version":1},"devdoc":{"kind":"dev","title":"BatchExecutor","details":"Designed to be attached to a wallet EOA via EIP-7702 delegation (Monad mainnet supports type-0x04 SetCode txs natively -- docs.monad.xyz/developer-essentials/eip-7702), so that `address(this)` inside executeBatch resolves to the wallet's own address and outbound calls carry the wallet as msg.sender. That is required for an action like `IERC20.approve(spender, 0)` to actually revoke *that wallet's* allowance -- a shared executor calling out on its own behalf could only revoke its own allowances, not the wallet's. Holds zero fund custody by construction: no `receive()`/payable fallback, no balance bookkeeping, no logic that could accumulate a token balance under this contract's own deployed address. Access control: `executeBatch` requires `msg.sender == address(this)`. When the wallet submits the transaction directly (`to: wallet, from: wallet`), this holds naturally and blocks any other address -- delegated or not -- from driving the wallet's calls. ponytail: this blocks EIP-7702 gas-sponsored/relayed execution (a relayer-submitted tx would have msg.sender == relayer, not the wallet). If sponsored execution is needed later, replace this check with a signature-based approval check (e.g. EIP-712) instead of the self-call requirement. Gas sponsorship is outside this demo's scope.","methods":{"executeBatch(bytes32,(address,bytes)[])":{"params":{"actions":"The ordered list of {target, calldata} pairs to execute.","approvalDigest":"Caller-supplied digest identifying the human-approved action.        Must be unique per approval; replaying an already-used digest reverts."},"returns":{"successes":"Per-action success flags, in the same order as `actions`."}}},"version":1,"stateVariables":{"usedDigests":{"details":"approvalDigest => used. Enforces single-use / non-replayable approvals (product spec user story 9, acceptance criteria: \"approvalDigest single-use\"). This digest is an opaque, caller-supplied bytes32 -- the contract never derives or checks it against `actions`, so uniqueness is tracked per-digest-value, not per-action-content. Two different digests wrapping identical actions both execute independently; a single digest can never be replayed regardless of what actions accompany the first use. Binding a digest to its intended action content is an OFF-CHAIN trust boundary (prepare.ts derives the digest deterministically from the exact revoke set it packages, and execute() submits both together in the one wallet-signed transaction) -- not something this mapping enforces. This is safe here specifically because `executeBatch` also requires `msg.sender == address(this)`: nobody but the wallet itself can ever submit a (digest, actions) pair, so there is no third party who could exploit the digest/content gap."}}},"storageLayout":{"types":{"t_bool":{"label":"bool","encoding":"inplace","numberOfBytes":"1"},"t_bytes32":{"label":"bytes32","encoding":"inplace","numberOfBytes":"32"},"t_mapping(t_bytes32,t_bool)":{"key":"t_bytes32","label":"mapping(bytes32 => bool)","value":"t_bool","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_mapping(t_bytes32,t_bool)","astId":15,"label":"usedDigests","offset":0,"contract":"src/BatchExecutor.sol:BatchExecutor"}]},"evm":{"bytecode":{"object":"6080604052348015600e575f5ffd5b506107908061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c806384c68e2514610038578063d39c4de714610061575b5f5ffd5b61004b6100463660046104d0565b610093565b604051610058919061054a565b60405180910390f35b61008361006f36600461058e565b5f6020819052908152604090205460ff1681565b6040519015158152602001610058565b60603330146100e95760405162461bcd60e51b815260206004820152601860248201527f42617463684578656375746f723a206f6e6c792073656c66000000000000000060448201526064015b60405180910390fd5b5f82900361010a5760405163c2e5347d60e01b815260040160405180910390fd5b5f8481526020819052604090205460ff161561013c57604051630aa1e0e560e31b8152600481018590526024016100e0565b5f5b8281101561017b5761017384848381811061015b5761015b6105a5565b905060200281019061016d91906105b9565b82610382565b60010161013e565b505f848152602081905260409020805460ff191660011790558167ffffffffffffffff8111156101ad576101ad6105d7565b6040519080825280602002602001820160405280156101d6578160200160208202803683370190505b5090505f5b8281101561033f575f5f8585848181106101f7576101f76105a5565b905060200281019061020991906105b9565b610217906020810190610602565b6001600160a01b0316868685818110610232576102326105a5565b905060200281019061024491906105b9565b610252906020810190610624565b60405161026092919061066e565b5f604051808303815f865af19150503d805f8114610299576040519150601f19603f3d011682016040523d82523d5f602084013e61029e565b606091505b5091509150818484815181106102b6576102b66105a5565b91151560209283029190910190910152867fffa121fed461c011cd401a1a236bfcad57b38f21192f5bf53539cce0be3edf04848888828181106102fb576102fb6105a5565b905060200281019061030d91906105b9565b61031b906020810190610602565b858560405161032d949392919061067d565b60405180910390a250506001016101db565b50604080514281526020810184905285917f6f35692cff62eecb7cbc2d8ba3f6f36ef2f168885894d557e4de4446ecbdc3be910160405180910390a29392505050565b61038f6020830183610602565b6001600160a01b03163b5f036103d857806103ad6020840184610602565b604051630222f98960e41b815260048101929092526001600160a01b031660248201526044016100e0565b6103e56020830183610624565b905060441461040a5760405163941eefc360e01b8152600481018290526024016100e0565b5f6104186020840184610624565b610426916004915f916106d1565b61042f916106f8565b90506001600160e01b0319811663095ea7b360e01b146104755760405163a7dd6a9560e01b8152600481018390526001600160e01b0319821660248201526044016100e0565b5f6104836020850185610624565b6104919160049082906106d1565b81019061049e9190610730565b91505080156104ca5760405163598fcfe360e11b815260048101849052602481018290526044016100e0565b50505050565b5f5f5f604084860312156104e2575f5ffd5b83359250602084013567ffffffffffffffff8111156104ff575f5ffd5b8401601f8101861361050f575f5ffd5b803567ffffffffffffffff811115610525575f5ffd5b8660208260051b8401011115610539575f5ffd5b939660209190910195509293505050565b602080825282518282018190525f918401906040840190835b818110156105835783511515835260209384019390920191600101610563565b509095945050505050565b5f6020828403121561059e575f5ffd5b5035919050565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126105cd575f5ffd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03811681146105ff575f5ffd5b50565b5f60208284031215610612575f5ffd5b813561061d816105eb565b9392505050565b5f5f8335601e19843603018112610639575f5ffd5b83018035915067ffffffffffffffff821115610653575f5ffd5b602001915036819003821315610667575f5ffd5b9250929050565b818382375f9101908152919050565b84815260018060a01b03841660208201528215156040820152608060608201525f8251806080840152806020850160a085015e5f60a0828501015260a0601f19601f83011684010191505095945050505050565b5f5f858511156106df575f5ffd5b838611156106eb575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610729576001600160e01b0319600485900360031b81901b82161691505b5092915050565b5f5f60408385031215610741575f5ffd5b823561074c816105eb565b94602093909301359350505056fea264697066735822122040644259ec27ad891d5f8eab7ab97f411391cd7a6fe42b2b6f59a5288c87994a64736f6c634300081c0033","sourceMap":"1606:3847:0:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"608060405234801561000f575f5ffd5b5060043610610034575f3560e01c806384c68e2514610038578063d39c4de714610061575b5f5ffd5b61004b6100463660046104d0565b610093565b604051610058919061054a565b60405180910390f35b61008361006f36600461058e565b5f6020819052908152604090205460ff1681565b6040519015158152602001610058565b60603330146100e95760405162461bcd60e51b815260206004820152601860248201527f42617463684578656375746f723a206f6e6c792073656c66000000000000000060448201526064015b60405180910390fd5b5f82900361010a5760405163c2e5347d60e01b815260040160405180910390fd5b5f8481526020819052604090205460ff161561013c57604051630aa1e0e560e31b8152600481018590526024016100e0565b5f5b8281101561017b5761017384848381811061015b5761015b6105a5565b905060200281019061016d91906105b9565b82610382565b60010161013e565b505f848152602081905260409020805460ff191660011790558167ffffffffffffffff8111156101ad576101ad6105d7565b6040519080825280602002602001820160405280156101d6578160200160208202803683370190505b5090505f5b8281101561033f575f5f8585848181106101f7576101f76105a5565b905060200281019061020991906105b9565b610217906020810190610602565b6001600160a01b0316868685818110610232576102326105a5565b905060200281019061024491906105b9565b610252906020810190610624565b60405161026092919061066e565b5f604051808303815f865af19150503d805f8114610299576040519150601f19603f3d011682016040523d82523d5f602084013e61029e565b606091505b5091509150818484815181106102b6576102b66105a5565b91151560209283029190910190910152867fffa121fed461c011cd401a1a236bfcad57b38f21192f5bf53539cce0be3edf04848888828181106102fb576102fb6105a5565b905060200281019061030d91906105b9565b61031b906020810190610602565b858560405161032d949392919061067d565b60405180910390a250506001016101db565b50604080514281526020810184905285917f6f35692cff62eecb7cbc2d8ba3f6f36ef2f168885894d557e4de4446ecbdc3be910160405180910390a29392505050565b61038f6020830183610602565b6001600160a01b03163b5f036103d857806103ad6020840184610602565b604051630222f98960e41b815260048101929092526001600160a01b031660248201526044016100e0565b6103e56020830183610624565b905060441461040a5760405163941eefc360e01b8152600481018290526024016100e0565b5f6104186020840184610624565b610426916004915f916106d1565b61042f916106f8565b90506001600160e01b0319811663095ea7b360e01b146104755760405163a7dd6a9560e01b8152600481018390526001600160e01b0319821660248201526044016100e0565b5f6104836020850185610624565b6104919160049082906106d1565b81019061049e9190610730565b91505080156104ca5760405163598fcfe360e11b815260048101849052602481018290526044016100e0565b50505050565b5f5f5f604084860312156104e2575f5ffd5b83359250602084013567ffffffffffffffff8111156104ff575f5ffd5b8401601f8101861361050f575f5ffd5b803567ffffffffffffffff811115610525575f5ffd5b8660208260051b8401011115610539575f5ffd5b939660209190910195509293505050565b602080825282518282018190525f918401906040840190835b818110156105835783511515835260209384019390920191600101610563565b509095945050505050565b5f6020828403121561059e575f5ffd5b5035919050565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126105cd575f5ffd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03811681146105ff575f5ffd5b50565b5f60208284031215610612575f5ffd5b813561061d816105eb565b9392505050565b5f5f8335601e19843603018112610639575f5ffd5b83018035915067ffffffffffffffff821115610653575f5ffd5b602001915036819003821315610667575f5ffd5b9250929050565b818382375f9101908152919050565b84815260018060a01b03841660208201528215156040820152608060608201525f8251806080840152806020850160a085015e5f60a0828501015260a0601f19601f83011684010191505095945050505050565b5f5f858511156106df575f5ffd5b838611156106eb575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610729576001600160e01b0319600485900360031b81901b82161691505b5092915050565b5f5f60408385031215610741575f5ffd5b823561074c816105eb565b94602093909301359350505056fea264697066735822122040644259ec27ad891d5f8eab7ab97f411391cd7a6fe42b2b6f59a5288c87994a64736f6c634300081c0033","sourceMap":"1606:3847:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3955:969;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2915:43;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;1789:14:1;;1782:22;1764:41;;1752:2;1737:18;2915:43:0;1624:187:1;3955:969:0;4062:23;4109:10;4131:4;4109:27;4101:64;;;;-1:-1:-1;;;4101:64:0;;2018:2:1;4101:64:0;;;2000:21:1;2057:2;2037:18;;;2030:30;2096:26;2076:18;;;2069:54;2140:18;;4101:64:0;;;;;;;;;4197:1;4179:19;;;4175:44;;4207:12;;-1:-1:-1;;;4207:12:0;;;;;;;;;;;4175:44;4233:11;:27;;;;;;;;;;;;;4229:73;;;4269:33;;-1:-1:-1;;;4269:33:0;;;;;2315:25:1;;;2288:18;;4269:33:0;2169:177:1;4229:73:0;4318:9;4313:94;4333:18;;;4313:94;;;4372:24;4382:7;;4390:1;4382:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4394:1;4372:9;:24::i;:::-;4353:3;;4313:94;;;-1:-1:-1;4499:11:0;:27;;;;;;;;;;:34;;-1:-1:-1;;4499:34:0;4529:4;4499:34;;;4567:7;4556:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4556:26:0;-1:-1:-1;4544:38:0;-1:-1:-1;4597:9:0;4592:248;4612:18;;;4592:248;;;4652:7;4661:16;4681:7;;4689:1;4681:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:17;;;;;;;:::i;:::-;-1:-1:-1;;;;;4681:22:0;4704:7;;4712:1;4704:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;;;;;;:::i;:::-;4681:39;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4651:69;;;;4749:2;4734:9;4744:1;4734:12;;;;;;;;:::i;:::-;:17;;;:12;;;;;;;;;;;:17;4783:14;4770:59;4799:1;4802:7;;4799:1;4802:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:17;;;;;;;:::i;:::-;4821:2;4825:3;4770:59;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;4632:3:0;;4592:248;;;-1:-1:-1;4855:62:0;;;4885:15;4980:25:1;;5036:2;5021:18;;5014:34;;;4869:14:0;;4855:62;;4953:18:1;4855:62:0;;;;;;;3955:969;;;;;:::o;4930:521::-;5015:13;;;;:6;:13;:::i;:::-;-1:-1:-1;;;;;5015:25:0;;5044:1;5015:30;5011:80;;5070:5;5077:13;;;;:6;:13;:::i;:::-;5054:37;;-1:-1:-1;;;5054:37:0;;;;;5233:25:1;;;;-1:-1:-1;;;;;5294:32:1;5274:18;;;5267:60;5206:18;;5054:37:0;5059:274:1;5011:80:0;5105:11;;;;:6;:11;:::i;:::-;:18;;5127:2;5105:24;5101:61;;5138:24;;-1:-1:-1;;;5138:24:0;;;;;2315:25:1;;;2288:18;;5138:24:0;2169:177:1;5101:61:0;5173:15;5198:11;;;;:6;:11;:::i;:::-;:15;;5211:1;;5198:15;;;:::i;:::-;5191:23;;;:::i;:::-;5173:41;-1:-1:-1;;;;;;;5228:28:0;;-1:-1:-1;;;5228:28:0;5224:77;;5265:36;;-1:-1:-1;;;5265:36:0;;;;;6371:25:1;;;-1:-1:-1;;;;;;6432:33:1;;6412:18;;;6405:61;6344:18;;5265:36:0;6199:273:1;5224:77:0;5315:14;5344:11;;;;:6;:11;:::i;:::-;:15;;5356:1;;5344:15;;;:::i;:::-;5333:47;;;;;;;:::i;:::-;5312:68;-1:-1:-1;;5394:11:0;;5390:54;;5414:30;;-1:-1:-1;;;5414:30:0;;;;;4980:25:1;;;5021:18;;;5014:34;;;4953:18;;5414:30:0;4806:248:1;5390:54:0;5001:450;;4930:521;;:::o;14:748:1:-;133:6;141;149;202:2;190:9;181:7;177:23;173:32;170:52;;;218:1;215;208:12;170:52;263:23;;;-1:-1:-1;361:2:1;346:18;;333:32;388:18;377:30;;374:50;;;420:1;417;410:12;374:50;443:22;;496:4;488:13;;484:27;-1:-1:-1;474:55:1;;525:1;522;515:12;474:55;565:2;552:16;591:18;583:6;580:30;577:50;;;623:1;620;613:12;577:50;676:7;671:2;661:6;658:1;654:14;650:2;646:23;642:32;639:45;636:65;;;697:1;694;687:12;636:65;14:748;;728:2;720:11;;;;;-1:-1:-1;750:6:1;;-1:-1:-1;;;14:748:1:o;767:621::-;951:2;963:21;;;1033:13;;936:18;;;1055:22;;;903:4;;1134:15;;;1108:2;1093:18;;;903:4;1177:185;1191:6;1188:1;1185:13;1177:185;;;1266:13;;1259:21;1252:29;1240:42;;1311:2;1337:15;;;;1302:12;;;;1213:1;1206:9;1177:185;;;-1:-1:-1;1379:3:1;;767:621;-1:-1:-1;;;;;767:621:1:o;1393:226::-;1452:6;1505:2;1493:9;1484:7;1480:23;1476:32;1473:52;;;1521:1;1518;1511:12;1473:52;-1:-1:-1;1566:23:1;;1393:226;-1:-1:-1;1393:226:1:o;2351:127::-;2412:10;2407:3;2403:20;2400:1;2393:31;2443:4;2440:1;2433:15;2467:4;2464:1;2457:15;2483:321;2573:4;2631:11;2618:25;2725:2;2721:7;2710:8;2694:14;2690:29;2686:43;2666:18;2662:68;2652:96;;2744:1;2741;2734:12;2652:96;2765:33;;;;;2483:321;-1:-1:-1;;2483:321:1:o;2809:127::-;2870:10;2865:3;2861:20;2858:1;2851:31;2901:4;2898:1;2891:15;2925:4;2922:1;2915:15;2941:131;-1:-1:-1;;;;;3016:31:1;;3006:42;;2996:70;;3062:1;3059;3052:12;2996:70;2941:131;:::o;3077:247::-;3136:6;3189:2;3177:9;3168:7;3164:23;3160:32;3157:52;;;3205:1;3202;3195:12;3157:52;3244:9;3231:23;3263:31;3288:5;3263:31;:::i;:::-;3313:5;3077:247;-1:-1:-1;;;3077:247:1:o;3329:521::-;3406:4;3412:6;3472:11;3459:25;3566:2;3562:7;3551:8;3535:14;3531:29;3527:43;3507:18;3503:68;3493:96;;3585:1;3582;3575:12;3493:96;3612:33;;3664:20;;;-1:-1:-1;3707:18:1;3696:30;;3693:50;;;3739:1;3736;3729:12;3693:50;3772:4;3760:17;;-1:-1:-1;3803:14:1;3799:27;;;3789:38;;3786:58;;;3840:1;3837;3830:12;3786:58;3329:521;;;;;:::o;3855:271::-;4038:6;4030;4025:3;4012:33;3994:3;4064:16;;4089:13;;;4064:16;3855:271;-1:-1:-1;3855:271:1:o;4131:670::-;4356:6;4345:9;4338:25;4428:1;4424;4419:3;4415:11;4411:19;4403:6;4399:32;4394:2;4383:9;4379:18;4372:60;4482:6;4475:14;4468:22;4463:2;4452:9;4448:18;4441:50;4527:3;4522:2;4511:9;4507:18;4500:31;4319:4;4560:6;4554:13;4604:6;4598:3;4587:9;4583:19;4576:35;4664:6;4659:2;4651:6;4647:15;4641:3;4630:9;4626:19;4620:51;4721:1;4715:3;4706:6;4695:9;4691:22;4687:32;4680:43;4791:3;4784:2;4780:7;4775:2;4767:6;4763:15;4759:29;4748:9;4744:45;4740:55;4732:63;;;4131:670;;;;;;;:::o;5520:331::-;5625:9;5636;5678:8;5666:10;5663:24;5660:44;;;5700:1;5697;5690:12;5660:44;5729:6;5719:8;5716:20;5713:40;;;5749:1;5746;5739:12;5713:40;-1:-1:-1;;5775:23:1;;;5820:25;;;;;-1:-1:-1;5520:331:1:o;5856:338::-;5976:19;;-1:-1:-1;;;;;;6013:29:1;;;6062:1;6054:10;;6051:137;;;-1:-1:-1;;;;;;6123:1:1;6119:11;;;6116:1;6112:19;6108:46;;;6100:55;;6096:82;;-1:-1:-1;6051:137:1;;5856:338;;;;:::o;6477:323::-;6553:6;6561;6614:2;6602:9;6593:7;6589:23;6585:32;6582:52;;;6630:1;6627;6620:12;6582:52;6669:9;6656:23;6688:31;6713:5;6688:31;:::i;:::-;6738:5;6790:2;6775:18;;;;6762:32;;-1:-1:-1;;;6477:323:1:o","linkReferences":{},"immutableReferences":{}}}}}}},"signatures":{"function":[{"signature":"executeBatch(bytes32,(address,bytes)[])","signatureHash32":"0x84c68e25417dbf40d136301c9e28dfb901bab44748f8bbb31fe90cbb8a7ffb35","signatureHash4":"0x84c68e25"},{"signature":"usedDigests(bytes32)","signatureHash32":"0xd39c4de7182767ecf9d767c895032f77bc0964552ba7db9535fe8d8a894149cf","signatureHash4":"0xd39c4de7"}],"event":[{"signature":"ActionResult(bytes32,uint256,address,bool,bytes)","signatureHash32":"0xffa121fed461c011cd401a1a236bfcad57b38f21192f5bf53539cce0be3edf04","signatureHash4":"0xffa121fe"},{"signature":"BatchExecuted(bytes32,uint256,uint256)","signatureHash32":"0x6f35692cff62eecb7cbc2d8ba3f6f36ef2f168885894d557e4de4446ecbdc3be","signatureHash4":"0x6f35692c"}],"error":[{"signature":"DigestAlreadyUsed(bytes32)","signatureHash32":"0x550f07285de6f0afdfd1abbafa0baa2221b70eca48f6e5ed7c2bff552c96a738","signatureHash4":"0x550f0728"},{"signature":"EmptyBatch()","signatureHash32":"0xc2e5347df6cf8d1bf68f8a9651642312bd381b900d857d97cd665976180d6ae0","signatureHash4":"0xc2e5347d"},{"signature":"MalformedCalldata(uint256)","signatureHash32":"0x941eefc3804e48dc0c99dbb43488d7c3e5a60dd4ada3e2c06c7e967b3a5ead4b","signatureHash4":"0x941eefc3"},{"signature":"NonZeroApproval(uint256,uint256)","signatureHash32":"0xb31f9fc649a92b98f8788a825d7d000aa8015adc7eda603a6b8a912e0eb61660","signatureHash4":"0xb31f9fc6"},{"signature":"TargetHasNoCode(uint256,address)","signatureHash32":"0x222f9890565e864e2841a0061db2ccdb341dc9b20233c42c61a5cfcec8436dd9","signatureHash4":"0x222f9890"},{"signature":"UnsupportedSelector(uint256,bytes4)","signatureHash32":"0xa7dd6a95a2a103ebeee30b2a1f99b60ed60692bd52aaaad42e41a51408035eeb","signatureHash4":"0xa7dd6a95"}]},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"match":"exact_match","chainId":"143","address":"0x2Aebb502460c8C6aECA8879d2165AaDFD6639658"}