ETH Price: $3,793.02 (+1.16%)

Transaction Decoder

Block:
21973738 at Mar-04-2025 01:11:11 PM +UTC
Transaction Fee:
0.000283921759465408 ETH $1.08
Gas Used:
203,732 Gas / 1.393604144 Gwei

Emitted Events:

352 ERC1967Proxy.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x000000000000000000000000d93ed3fd9717b22006443de6e1cd60220ddd642a, 0x000000000000000000000000a1bea5fe917450041748dbbbe7e9ac57a4bbebab, 000000000000000000000000000000000000000000000009432ab56ec920290d )
353 ERC1967Proxy.0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925( 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925, 0x000000000000000000000000a1bea5fe917450041748dbbbe7e9ac57a4bbebab, 0x0000000000000000000000000000000000001ff3684f28c67538d4d072c22734, 000000000000000000000000000000000000000000000009432ab56ec920290d )
354 WETH9.Transfer( src=UniswapV3Pool, dst=MainnetSettler, wad=5944685686458220 )
355 ERC1967Proxy.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x000000000000000000000000a1bea5fe917450041748dbbbe7e9ac57a4bbebab, 0x000000000000000000000000e061b362aa157a5037b225570cff9ebf1d657929, 000000000000000000000000000000000000000000000009432ab56ec920290d )
356 UniswapV3Pool.Swap( sender=MainnetSettler, recipient=MainnetSettler, amount0=170860576900374341901, amount1=-5944685686458220, sqrtPriceX96=469667802591665036980802785, liquidity=14800783546453571091920, tick=-102567 )
357 WETH9.Withdrawal( src=MainnetSettler, wad=5944685686458220 )

Account State Difference:

  Address   Before After State Difference Code
0x88909D48...9Bf78FD9a
(beaverbuild)
13.567398482452293566 Eth13.567408669052293566 Eth0.0000101866
0xC02aaA39...83C756Cc2 2,869,031.941776686465863548 Eth2,869,031.935832000779405328 Eth0.00594468568645822
0xd93ED3fd...20DdD642A
0.004995700733810542 Eth
Nonce: 910
0.004711778974345134 Eth
Nonce: 911
0.000283921759465408
0xE061B362...f1d657929
(Uniswap V3: L3)
0xf70da978...8dfA3dbEF
(Relay: Solver)
421.069407736190179108 Eth421.075352421876637328 Eth0.00594468568645822

Execution Trace

ApprovalProxy.transferAndMulticall( tokens=[0x88909D489678dD17aA6D9609F89B0419Bf78FD9a], amounts=[170860576900374341901], targets=[0x88909D489678dD17aA6D9609F89B0419Bf78FD9a, 0x0000000000001fF3684f28c67538d4D072C22734], datas=[CV6nswAAAAAAAAAAAAAAAAAAAAAAAB/zaE8oxnU41NBywic0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0=, IhO8CwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAiJCdSJZ43ReqbZYJ+JsEGb94/ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlDKrVuySApDQAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBB//mR8AAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAO7u7u7u7u7u7u7u7u7u7u7u7u7uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSyhuURwWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoFTDmGGaExDDspiBJgr0PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQizm7eAAAAAAAAAAAAAAAADQ42SqeFIpGIPBYrItbYH2NVQo8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIiQnUiWeN0Xqm2WCfibBBm/eP2aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnxvzXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsiJCdSJZ43ReqbZYJ+JsEGb94/ZoAACcQwCqqObIj/o0KDlxPJ+rZCDx1bMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEOMnBRwAAAAAAAAAAAAAAAMAqqjmyI/6NCg5cTyfq2Qg8dWzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxAAAAAAAAAAAAAAAADAKqo5siP+jQoOXE8n6tkIPHVswgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJC4afU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001 )
  • ERC1967Proxy.23b872dd( )
    • Layer3.transferFrom( from=0xd93ED3fd9717b22006443DE6e1cd60220DdD642A, to=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, value=170860576900374341901 ) => ( True )
    • ERC20Router.delegatecallMulticall( targets=[0x88909D489678dD17aA6D9609F89B0419Bf78FD9a, 0x0000000000001fF3684f28c67538d4D072C22734], datas=[CV6nswAAAAAAAAAAAAAAAAAAAAAAAB/zaE8oxnU41NBywic0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0=, IhO8CwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAiJCdSJZ43ReqbZYJ+JsEGb94/ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlDKrVuySApDQAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBB//mR8AAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAO7u7u7u7u7u7u7u7u7u7u7u7u7uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSyhuURwWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoFTDmGGaExDDspiBJgr0PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQizm7eAAAAAAAAAAAAAAAADQ42SqeFIpGIPBYrItbYH2NVQo8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIiQnUiWeN0Xqm2WCfibBBm/eP2aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnxvzXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsiJCdSJZ43ReqbZYJ+JsEGb94/ZoAACcQwCqqObIj/o0KDlxPJ+rZCDx1bMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEOMnBRwAAAAAAAAAAAAAAAMAqqjmyI/6NCg5cTyfq2Qg8dWzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxAAAAAAAAAAAAAAAADAKqo5siP+jQoOXE8n6tkIPHVswgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJC4afU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001 )
      • Multicaller.aggregate( targets=[0x88909D489678dD17aA6D9609F89B0419Bf78FD9a, 0x0000000000001fF3684f28c67538d4D072C22734], data=[CV6nswAAAAAAAAAAAAAAAAAAAAAAAB/zaE8oxnU41NBywic0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0=, IhO8CwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAiJCdSJZ43ReqbZYJ+JsEGb94/ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlDKrVuySApDQAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBB//mR8AAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAO7u7u7u7u7u7u7u7u7u7u7u7u7uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSyhuURwWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoFTDmGGaExDDspiBJgr0PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQizm7eAAAAAAAAAAAAAAAADQ42SqeFIpGIPBYrItbYH2NVQo8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIiQnUiWeN0Xqm2WCfibBBm/eP2aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnxvzXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsiJCdSJZ43ReqbZYJ+JsEGb94/ZoAACcQwCqqObIj/o0KDlxPJ+rZCDx1bMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEOMnBRwAAAAAAAAAAAAAAAMAqqjmyI/6NCg5cTyfq2Qg8dWzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxAAAAAAAAAAAAAAAADAKqo5siP+jQoOXE8n6tkIPHVswgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJC4afU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=, AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB] )
        • ERC1967Proxy.095ea7b3( )
          • Layer3.approve( spender=0x0000000000001fF3684f28c67538d4D072C22734, value=170860576900374341901 ) => ( True )
          • AllowanceHolder.2213bc0b( )
            • MainnetSettler.balanceOf( 0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB )
            • MainnetSettler.execute( slippage=[{name:recipient, type:address, order:1, indexed:false, value:0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, valueString:0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB}, {name:buyToken, type:address, order:2, indexed:false, value:0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE, valueString:0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE}, {name:minAmountOut, type:uint256, order:3, indexed:false, value:5825791972721000, valueString:5825791972721000}], actions=[Is5u3gAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACIkJ1IlnjdF6ptlgn4mwQZv3j9mgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUMqtW7JICkNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ8b81wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALIiQnUiWeN0Xqm2WCfibBBm/eP2aAAAnEMAqqjmyI/6NCg5cTyfq2Qg8dWzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==, OMnBRwAAAAAAAAAAAAAAAMAqqjmyI/6NCg5cTyfq2Qg8dWzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxAAAAAAAAAAAAAAAADAKqo5siP+jQoOXE8n6tkIPHVswgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJC4afU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=], 54C398619A1310C3B29881260AF43C0000000000000000000000000000000000 ) => ( True )
              • UniswapV3Pool.swap( recipient=0x0d0E364aa7852291883C162B22D6D81f6355428F, zeroForOne=True, amountSpecified=170860576900374341901, sqrtPriceLimitX96=4295128740, data=0x000000000000000000000000000000000000000088909D489678DD17AA6D9609F89B0419BF78FD9A000000000000000000000000000000000000000000000009432AB56EC920290D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067C6FCD701 ) => ( amount0=170860576900374341901, amount1=-5944685686458220 )
                • WETH9.transfer( dst=0x0d0E364aa7852291883C162B22D6D81f6355428F, wad=5944685686458220 ) => ( True )
                • ERC1967Proxy.70a08231( )
                • MainnetSettler.fa461e33( )
                • ERC1967Proxy.70a08231( )
                • WETH9.balanceOf( 0x0d0E364aa7852291883C162B22D6D81f6355428F ) => ( 5944685686458220 )
                • WETH9.withdraw( wad=5944685686458220 )
                  • ETH 0.00594468568645822 MainnetSettler.CALL( )
                  • ETH 0.00594468568645822 ERC20Router.CALL( )
                  • ETH 0.00594468568645822 Relay: Solver.CALL( )
                    transferAndMulticall[ApprovalProxy (ln:37)]
                    File 1 of 9: ApprovalProxy
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // SPDX-License-Identifier: MIT
                    pragma solidity ^0.8.23;
                    import {Ownable} from "solady/src/auth/Ownable.sol";
                    import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
                    import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
                    import {IERC20Router} from "../src/types/interfaces/IERC20Router.sol";
                    contract ApprovalProxy is Ownable {
                    using SafeERC20 for IERC20;
                    error ArrayLengthsMismatch();
                    error ERC20TransferFromFailed();
                    error NativeTransferFailed();
                    event RouterUpdated(address newRouter);
                    address public router;
                    receive() external payable {}
                    constructor(address _owner, address _router) {
                    _initializeOwner(_owner);
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                    File 2 of 9: ERC1967Proxy
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // SPDX-License-Identifier: MIT
                    // OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Proxy.sol)
                    pragma solidity ^0.8.20;
                    import {Proxy} from "../Proxy.sol";
                    import {ERC1967Utils} from "./ERC1967Utils.sol";
                    /**
                    * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
                    * implementation address that can be changed. This address is stored in storage in the location specified by
                    * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
                    * implementation behind the proxy.
                    */
                    contract ERC1967Proxy is Proxy {
                    /**
                    * @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`.
                    *
                    * If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                    File 3 of 9: UniswapV3Pool
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // SPDX-License-Identifier: BUSL-1.1
                    pragma solidity =0.7.6;
                    import './interfaces/IUniswapV3Pool.sol';
                    import './NoDelegateCall.sol';
                    import './libraries/LowGasSafeMath.sol';
                    import './libraries/SafeCast.sol';
                    import './libraries/Tick.sol';
                    import './libraries/TickBitmap.sol';
                    import './libraries/Position.sol';
                    import './libraries/Oracle.sol';
                    import './libraries/FullMath.sol';
                    import './libraries/FixedPoint128.sol';
                    import './libraries/TransferHelper.sol';
                    import './libraries/TickMath.sol';
                    import './libraries/LiquidityMath.sol';
                    import './libraries/SqrtPriceMath.sol';
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                    File 4 of 9: MainnetSettler
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // SPDX-License-Identifier: MIT
                    pragma solidity =0.8.25 >=0.6.2 >=0.8.25 ^0.8.0 ^0.8.25;
                    // lib/forge-std/src/interfaces/IERC165.sol
                    interface IERC165 {
                    /// @notice Query if a contract implements an interface
                    /// @param interfaceID The interface identifier, as specified in ERC-165
                    /// @dev Interface identification is specified in ERC-165. This function
                    /// uses less than 30,000 gas.
                    /// @return `true` if the contract implements `interfaceID` and
                    /// `interfaceID` is not 0xffffffff, `false` otherwise
                    function supportsInterface(bytes4 interfaceID) external view returns (bool);
                    }
                    // lib/forge-std/src/interfaces/IERC20.sol
                    /// @dev Interface of the ERC20 standard as defined in the EIP.
                    /// @dev This includes the optional name, symbol, and decimals metadata.
                    interface IERC20 {
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                    File 5 of 9: WETH9
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // Copyright (C) 2015, 2016, 2017 Dapphub
                    // This program is free software: you can redistribute it and/or modify
                    // it under the terms of the GNU General Public License as published by
                    // the Free Software Foundation, either version 3 of the License, or
                    // (at your option) any later version.
                    // This program is distributed in the hope that it will be useful,
                    // but WITHOUT ANY WARRANTY; without even the implied warranty of
                    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
                    // GNU General Public License for more details.
                    // You should have received a copy of the GNU General Public License
                    // along with this program. If not, see <http://www.gnu.org/licenses/>.
                    pragma solidity ^0.4.18;
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                    File 6 of 9: Layer3
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // SPDX-License-Identifier: Apache-2.0
                    /*
                    .____ ________
                    | | _____ ___.__. __________\\_____ \\
                    | | \\__ \\< | |/ __ \\_ __ \\_(__ <
                    | |___ / __ \\\\___ \\ ___/| | \\/ \\
                    |_______ (____ / ____|\\___ >__| /______ /
                    \\/ \\/\\/ \\/ \\/
                    */
                    pragma solidity 0.8.20;
                    import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
                    import {ERC20BurnableUpgradeable} from
                    "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol";
                    import {ERC20PermitUpgradeable} from
                    "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol";
                    import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                    File 7 of 9: ERC20Router
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // SPDX-License-Identifier: MIT
                    pragma solidity ^0.8.25;
                    import {Ownable} from "solady/src/auth/Ownable.sol";
                    import {Tstorish} from "tstorish/src/Tstorish.sol";
                    import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
                    import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
                    import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
                    import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
                    import {IAllowanceTransfer} from "permit2-relay/src/interfaces/IAllowanceTransfer.sol";
                    import {ISignatureTransfer} from "permit2-relay/src/interfaces/ISignatureTransfer.sol";
                    import {IPermit2} from "permit2-relay/src/interfaces/IPermit2.sol";
                    import {RelayerWitness} from "./types/lib/RelayStructs.sol";
                    import {IMulticaller} from "./types/interfaces/IMulticaller.sol";
                    contract ERC20Router is Ownable, Tstorish {
                    using SafeERC20 for IERC20;
                    // --- Errors --- //
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                    File 8 of 9: Multicaller
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // SPDX-License-Identifier: MIT
                    pragma solidity ^0.8.4;
                    /**
                    * @title Multicaller
                    * @author vectorized.eth
                    * @notice Contract that allows for efficient aggregation
                    * of multiple calls in a single transaction.
                    */
                    contract Multicaller {
                    // =============================================================
                    // ERRORS
                    // =============================================================
                    /**
                    * @dev The lengths of the input arrays are not the same.
                    */
                    error ArrayLengthsMismatch();
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                    File 9 of 9: AllowanceHolder
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // SPDX-License-Identifier: MIT
                    pragma solidity ^0.8.25;
                    import {AllowanceHolderBase} from "./AllowanceHolderBase.sol";
                    import {TransientStorage} from "./TransientStorage.sol";
                    /// @custom:security-contact security@0x.org
                    contract AllowanceHolder is TransientStorage, AllowanceHolderBase {
                    constructor() {
                    require(address(this) == 0x0000000000001fF3684f28c67538d4D072C22734 || block.chainid == 31337);
                    }
                    /// @inheritdoc AllowanceHolderBase
                    function exec(address operator, address token, uint256 amount, address payable target, bytes calldata data)
                    internal
                    override
                    returns (bytes memory)
                    {
                    (bytes memory result, address sender, TSlot allowance) = _exec(operator, token, amount, target, data);
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX