/**

Generated by the following Solidity interface...
```solidity
interface ERC20ForwarderV3 {
    error BalanceMismatch(uint256 expected, uint256 actual);
    error EmergencyCallerAlreadySet(address emergencyCaller);
    error EmergencyCallerNotSet();
    error InvalidForwarderV1(address expected, address actual);
    error InvalidForwarderV2(address expected, address actual);
    error InvalidInputLength(uint256 expected, uint256 actual);
    error InvalidMigrationCommitmentTreeRootV1(bytes32 expected, bytes32 actual);
    error InvalidMigrationCommitmentTreeRootV2(bytes32 expected, bytes32 actual);
    error InvalidMigrationLogicRefV1(bytes32 expected, bytes32 actual);
    error InvalidMigrationLogicRefV2(bytes32 expected, bytes32 actual);
    error PreExistingNullifier(bytes32 nullifier);
    error ProtocolAdapterNotStopped();
    error ReentrancyGuardReentrantCall();
    error ResourceAlreadyConsumed(bytes32 nullifier);
    error SafeERC20FailedOperation(address token);
    error UnauthorizedCaller(address expected, address actual);
    error UnauthorizedLogicRef(bytes32 expected, bytes32 actual);
    error UnstoppedProtocolAdapterV1(address protocolAdapterV1);
    error UnstoppedProtocolAdapterV2(address protocolAdapterV2);
    error ZeroNotAllowed();

    event Unwrapped(address indexed token, address indexed to, uint128 amount);
    event Wrapped(address indexed token, address indexed from, uint128 amount);

    constructor(address protocolAdapterV3, bytes32 logicRefV3, address emergencyCommittee, address erc20ForwarderV1, address erc20ForwarderV2);

    function forwardCall(bytes32 logicRef, bytes memory input) external returns (bytes memory output);
    function forwardEmergencyCall(bytes memory input) external returns (bytes memory output);
    function getEmergencyCaller() external view returns (address caller);
    function getLogicRef() external view returns (bytes32 logicRef);
    function getProtocolAdapter() external view returns (address protocolAdapter);
    function getVersion() external pure returns (bytes32 version);
    function isNullifierContained(bytes32 nullifier) external view returns (bool isContained);
    function nullifierAtIndex(uint256 index) external view returns (bytes32 nullifier);
    function nullifierCount() external view returns (uint256 count);
    function setEmergencyCaller(address newEmergencyCaller) external;
}
```

...which was generated by the following JSON ABI:
```json
[
  {
    "type": "constructor",
    "inputs": [
      {
        "name": "protocolAdapterV3",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "logicRefV3",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "emergencyCommittee",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "erc20ForwarderV1",
        "type": "address",
        "internalType": "contract ERC20Forwarder"
      },
      {
        "name": "erc20ForwarderV2",
        "type": "address",
        "internalType": "contract ERC20ForwarderV2"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "forwardCall",
    "inputs": [
      {
        "name": "logicRef",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "input",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [
      {
        "name": "output",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "forwardEmergencyCall",
    "inputs": [
      {
        "name": "input",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [
      {
        "name": "output",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "getEmergencyCaller",
    "inputs": [],
    "outputs": [
      {
        "name": "caller",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getLogicRef",
    "inputs": [],
    "outputs": [
      {
        "name": "logicRef",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getProtocolAdapter",
    "inputs": [],
    "outputs": [
      {
        "name": "protocolAdapter",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getVersion",
    "inputs": [],
    "outputs": [
      {
        "name": "version",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "isNullifierContained",
    "inputs": [
      {
        "name": "nullifier",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "isContained",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "nullifierAtIndex",
    "inputs": [
      {
        "name": "index",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "nullifier",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "nullifierCount",
    "inputs": [],
    "outputs": [
      {
        "name": "count",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "setEmergencyCaller",
    "inputs": [
      {
        "name": "newEmergencyCaller",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "event",
    "name": "Unwrapped",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "to",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "amount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Wrapped",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "from",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "amount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      }
    ],
    "anonymous": false
  },
  {
    "type": "error",
    "name": "BalanceMismatch",
    "inputs": [
      {
        "name": "expected",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "actual",
        "type": "uint256",
        "internalType": "uint256"
      }
    ]
  },
  {
    "type": "error",
    "name": "EmergencyCallerAlreadySet",
    "inputs": [
      {
        "name": "emergencyCaller",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "EmergencyCallerNotSet",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidForwarderV1",
    "inputs": [
      {
        "name": "expected",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "actual",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidForwarderV2",
    "inputs": [
      {
        "name": "expected",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "actual",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidInputLength",
    "inputs": [
      {
        "name": "expected",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "actual",
        "type": "uint256",
        "internalType": "uint256"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidMigrationCommitmentTreeRootV1",
    "inputs": [
      {
        "name": "expected",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "actual",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidMigrationCommitmentTreeRootV2",
    "inputs": [
      {
        "name": "expected",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "actual",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidMigrationLogicRefV1",
    "inputs": [
      {
        "name": "expected",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "actual",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidMigrationLogicRefV2",
    "inputs": [
      {
        "name": "expected",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "actual",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "PreExistingNullifier",
    "inputs": [
      {
        "name": "nullifier",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "ProtocolAdapterNotStopped",
    "inputs": []
  },
  {
    "type": "error",
    "name": "ReentrancyGuardReentrantCall",
    "inputs": []
  },
  {
    "type": "error",
    "name": "ResourceAlreadyConsumed",
    "inputs": [
      {
        "name": "nullifier",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "SafeERC20FailedOperation",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "UnauthorizedCaller",
    "inputs": [
      {
        "name": "expected",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "actual",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "UnauthorizedLogicRef",
    "inputs": [
      {
        "name": "expected",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "actual",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "UnstoppedProtocolAdapterV1",
    "inputs": [
      {
        "name": "protocolAdapterV1",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "UnstoppedProtocolAdapterV2",
    "inputs": [
      {
        "name": "protocolAdapterV2",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "ZeroNotAllowed",
    "inputs": []
  }
]
```*/
#[allow(
    non_camel_case_types,
    non_snake_case,
    clippy::pub_underscore_fields,
    clippy::style,
    clippy::empty_structs_with_brackets
)]
pub mod ERC20ForwarderV3 {
    use super::*;
    use alloy::sol_types as alloy_sol_types;
    /// The creation / init bytecode of the contract.
    ///
    /// ```text
     
    /// ```
    #[rustfmt::skip]
    #[allow(clippy::all)]
    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
        b"a\x01\xE0\x80`@R4a\x02\xFEW`\xA0\x81a\x1B\xFA\x808\x03\x80\x91a\0 \x82\x85a\x04\xD6V[\x839\x81\x01\x03\x12a\x02\xFEWa\x003\x81a\x05\rV[\x90` \x81\x01Q\x90a\0F`@\x82\x01a\x05\rV[``\x82\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x92\x90\x91\x90\x83\x83\x03a\x02\xFEW`\x80\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x95\x90\x94\x90\x86\x86\x03a\x02\xFEW`\x01`\x01`\xA0\x1B\x03\x81\x16\x15\x80\x15a\x04\xCEW[a\x03\xD9W`\x80R`\xA0R`\x01`\x01`\xA0\x1B\x03\x81\x16\x15a\x03\xD9W`\xC0R\x81\x15a\x03\xD9W`\xE0R`@Qc\x0Fn\x10c`\xE2\x1B\x81R` \x81`\x04\x81\x85Z\xFA\x90\x81\x15a\x03\nW_\x91a\x04\x8FW[Pa\x01\0\x81\x90R`@Qc\xFD\xDDH7`\xE0\x1B\x81R\x90` \x90\x82\x90`\x04\x90\x82\x90`\x01`\x01`\xA0\x1B\x03\x16Z\xFA\x90\x81\x15a\x03\nW_\x91a\x04pW[P\x15a\x04MWa\x01\0Q`@Qc\xBD\xEBD-`\xE0\x1B\x81R\x90` \x90\x82\x90`\x04\x90\x82\x90`\x01`\x01`\xA0\x1B\x03\x16Z\xFA\x90\x81\x15a\x03\nW_\x91a\x04\x1AW[Pa\x01 R`@Qc\xCB\xAD\0\xE5`\xE0\x1B\x81R\x90` \x90\x82\x90`\x04\x90\x82\x90Z\xFA\x90\x81\x15a\x03\nW_\x91a\x03\xE8W[Pa\x01@R\x81\x15a\x03\xD9Wa\x01`R`@Qc\x0Fn\x10c`\xE2\x1B\x81R` \x81`\x04\x81\x85Z\xFA\x90\x81\x15a\x03\nW_\x91a\x03\x9AW[Pa\x01\x80\x81\x90R`@Qc\xFD\xDDH7`\xE0\x1B\x81R\x90` \x90\x82\x90`\x04\x90\x82\x90`\x01`\x01`\xA0\x1B\x03\x16Z\xFA\x90\x81\x15a\x03\nW_\x91a\x03kW[P\x15a\x03HWa\x01\0Q`@Qc\xBD\xEBD-`\xE0\x1B\x81R\x90` \x90\x82\x90`\x04\x90\x82\x90`\x01`\x01`\xA0\x1B\x03\x16Z\xFA\x90\x81\x15a\x03\nW_\x91a\x03\x15W[Pa\x01\xA0R`@Qc\xCB\xAD\0\xE5`\xE0\x1B\x81R\x90` \x90\x82\x90`\x04\x90\x82\x90Z\xFA\x90\x81\x15a\x03\nW_\x91a\x02\xD4W[Pa\x01\xC0R`@Qa\x16\xC0\x90\x81a\x05:\x829`\x80Q\x81\x81\x81a\x03\xC7\x01R\x81\x81a\x04-\x01Ra\x14\xFD\x01R`\xA0Q\x81\x81\x81a\x01\xA8\x01Ra\x04S\x01R`\xC0Q\x81`\xC1\x01R`\xE0Q\x81PPa\x01\0Q\x81PPa\x01 Q\x81PPa\x01@Q\x81PPa\x01`Q\x81\x81\x81a\x0FI\x01Ra\x12\xDC\x01Ra\x01\x80Q\x81a\x12\x05\x01Ra\x01\xA0Q\x81a\x12R\x01Ra\x01\xC0Q\x81a\x12\x81\x01R\xF3[\x90P` \x81=` \x11a\x03\x02W[\x81a\x02\xEF` \x93\x83a\x04\xD6V[\x81\x01\x03\x12a\x02\xFEWQ_a\x02GV[_\x80\xFD[=\x91Pa\x02\xE2V[`@Q=_\x82>=\x90\xFD[\x90P` \x81=` \x11a\x03@W[\x81a\x030` \x93\x83a\x04\xD6V[\x81\x01\x03\x12a\x02\xFEWQ`\x04a\x02\x1AV[=\x91Pa\x03#V[a\x01\x80Qc\xAC^\x02!`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x90\x91\x16`\x04R`$\x90\xFD[a\x03\x8D\x91P` =` \x11a\x03\x93W[a\x03\x85\x81\x83a\x04\xD6V[\x81\x01\x90a\x05!V[_a\x01\xDFV[P=a\x03{V[\x90P` \x81=` \x11a\x03\xD1W[\x81a\x03\xB5` \x93\x83a\x04\xD6V[\x81\x01\x03\x12a\x02\xFEW` a\x03\xCA`\x04\x92a\x05\rV[\x91Pa\x01\xA7V[=\x91Pa\x03\xA8V[cg\xA5\xA7\x17`\xE1\x1B_R`\x04_\xFD[\x90P` \x81=` \x11a\x04\x12W[\x81a\x04\x03` \x93\x83a\x04\xD6V[\x81\x01\x03\x12a\x02\xFEWQ_a\x01tV[=\x91Pa\x03\xF6V[\x90P` \x81=` \x11a\x04EW[\x81a\x045` \x93\x83a\x04\xD6V[\x81\x01\x03\x12a\x02\xFEWQ`\x04a\x01GV[=\x91Pa\x04(V[a\x01\0Qc\xE3\xBF\x0F\xCF`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x90\x91\x16`\x04R`$\x90\xFD[a\x04\x89\x91P` =` \x11a\x03\x93Wa\x03\x85\x81\x83a\x04\xD6V[_a\x01\x0CV[\x90P` \x81=` \x11a\x04\xC6W[\x81a\x04\xAA` \x93\x83a\x04\xD6V[\x81\x01\x03\x12a\x02\xFEW` a\x04\xBF`\x04\x92a\x05\rV[\x91Pa\0\xD4V[=\x91Pa\x04\x9DV[P\x81\x15a\0\x8BV[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x04\xF9W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x02\xFEWV[\x90\x81` \x91\x03\x12a\x02\xFEWQ\x80\x15\x15\x81\x03a\x02\xFEW\x90V\xFE`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c\r\x8En,\x14a\x04\xB4WP\x80c3\xA8\x92\x03\x14a\x03\xEBW\x80c=\xB8A\x8C\x14a\x03\x9BW\x80c@\xF3MB\x14a\x03~W\x80c\x9A\xD9\x1DL\x14a\x03\x01W\x80c\xA7\xF7\xEB\xD5\x14a\x02\xCFW\x80c\xBF\xA8\xF8)\x14a\x01\xF7W\x80c\xC1\xB0\xBE\xD7\x14a\x01\xCBW\x80c\xCB\xAD\0\xE5\x14a\x01\x91Wc\xE1~\xECb\x14a\0\x8AW_\x80\xFD[4a\x01\x8DW` `\x03\x196\x01\x12a\x01\x8DW`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01\x8DWa\0\xE5\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x05\xF2V[\x80\x15a\x01eW_Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80a\x01:WP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x014a\x14\xBAV[\x16\x17_U\0[\x7FWAC_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x7F\xCFKN.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80\xFD[4a\x01\x8DW_`\x03\x196\x01\x12a\x01\x8DW` `@Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xF3[4a\x01\x8DW` `\x03\x196\x01\x12a\x01\x8DW`\x045_R`\x02` R` `@_ T\x15\x15`@Q\x90\x81R\xF3[4a\x01\x8DW` `\x03\x196\x01\x12a\x01\x8DW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01\x8DWa\x02(\x906\x90`\x04\x01a\x04\xECV[a\x020a\x05~V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x90\x81\x15a\x02\xA7Wa\x02\xA3\x92a\x02_a\x02l\x93a\x05\xF2V[a\x02ga\x14\xBAV[a\x07!V[_\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x05\x1AV[\x03\x90\xF3[\x7F\x81`\xE4\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01\x8DW_`\x03\x196\x01\x12a\x01\x8DW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01\x8DW` `\x03\x196\x01\x12a\x01\x8DW`\x045`\x01T\x81\x10\x15a\x03QW`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x01T`@Q\x90\x81R` \x90\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[4a\x01\x8DW_`\x03\x196\x01\x12a\x01\x8DW` `\x01T`@Q\x90\x81R\xF3[4a\x01\x8DW_`\x03\x196\x01\x12a\x01\x8DW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x01\x8DW`@`\x03\x196\x01\x12a\x01\x8DW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01\x8DWa\x04\x1F\x906\x90`\x04\x01a\x04\xECV[\x91a\x04(a\x05~V[a\x04Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x05\xF2V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x81\x03a\x04\x86Wa\x02\xA3a\x02l\x85\x85a\x07!V[\x7F\xA9p\x85\xAB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[4a\x01\x8DW_`\x03\x196\x01\x12a\x01\x8DW\x80\x7F1.0.1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x92R\xF3[\x91\x81`\x1F\x84\x01\x12\x15a\x01\x8DW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01\x8DW` \x83\x81\x86\x01\x95\x01\x01\x11a\x01\x8DWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01\x8DWV[\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0\\a\x05\xCAW`\x01\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]V[\x7F>\xE5\xAE\xB5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x803\x03a\x06\x12WPV[\x7FSm\xD9\xEF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R3`$R`D_\xFD[` \x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@RV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@RV[\x91\x90\x82\x03\x91\x82\x11a\x06\xF4WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x90\x80``\x11a\x01\x8DW``\x82\x01\x825`\x04\x81\x10\x15a\x01\x8DW` \x84\x015\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x01\x8DW`@\x85\x015\x92o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x01\x8DW_\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x81\x01`@Q\x94\x7Fp\xA0\x821\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R0`\x04\x87\x01R` \x86`$\x81\x87Z\xFA\x95\x86\x15a\x0EYW_\x96a\x14nW[P\x80a\x0C\xC7WP`\xE0\x81\x03a\x0C\x97WP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x87`\xE0\x92\x81\x01\x03\x01\x12a\x01\x8DW`@Q\x91`\xE0\x83\x01\x83\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@R5\x82R` \x82\x01`\x80\x87\x015\x81Ra\x08\\`\xA0\x88\x01a\x05]V[\x96`@\x84\x01\x97\x88R``\x84\x01`\xC0\x82\x015\x81R`\x80\x85\x01\x94`\xE0\x83\x015\x86Ra\x01 `\xA0\x82\x01\x93a\x01\0\x81\x015\x85R\x015\x92`\xFF\x84\x16\x84\x03a\x01\x8DW`\xC0\x82\x01\x93\x84R`@Q\x91a\x08\xAC\x83a\x06\x8AV[\x86\x83R\x89` \x84\x01RQ\x94Q\x90`@Q\x92``\x84\x01\x84\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@R\x83R` \x83\x01\x95\x86R`@\x83\x01\x91\x82R`@Qa\x08\xF3\x81a\x06\x8AV[0\x81R\x8A` \x82\x01Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x8DQ\x16\x94Q\x98`@Q\x99a\t$\x8Ba\x06AV[\x8AR\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`@\x9A`\x1F` \x8Da\t[\x81Q\x91\x82a\x06\xA6V[\x82\x81R\x01\x7FWitness(bytes32 actionTreeRoot)\0\x81R \x90Q\x8CQ\x90` \x82\x01\x92\x83R\x8D\x82\x01R\x8C\x81Ra\t\xA1``\x82a\x06\xA6V[Q\x90 \x97\x8BQ\x92a\t\xB3`\x80\x85a\x06\xA6V[`]\x84R\x7FWitness witness)TokenPermissions` \x85\x01R\x7F(address token,uint256 amount)Wi\x8D\x85\x01R\x7Ftness(bytes32 actionTreeRoot)\0\0\0``\x85\x01RQ\x94Q\x90Q\x90\x8CQ\x95` \x87\x01R\x8C\x86\x01R`\xF8\x1B\x16``\x84\x01R`A\x83Ra\nR`a\x84a\x06\xA6V[n\"\xD4s\x03\x0F\x11m\xDE\xE9\xF6\xB4:\xC7\x8B\xA3;\x15a\x01\x8DW_\x96a\n\xCE\x96a\x0B\x02a\x0B \x94a\x0B3\x97\x8EQ\x9C\x8D\x9B\x8C\x9B\x7F\x13|)\xFE\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8DR`\x04\x8D\x01\x90Q` \x80\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81Q\x16\x84R\x01Q\x91\x01RV[Q`D\x8B\x01RQ`d\x8A\x01R\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x84\x8A\x01R` \x01Q`\xA4\x89\x01RV[`\xC4\x87\x01R`\xE4\x86\x01Ra\x01@a\x01\x04\x86\x01Ra\x01D\x85\x01\x90a\x05\x1AV[\x90`\x03\x19\x84\x83\x03\x01a\x01$\x85\x01Ra\x05\x1AV[\x03\x81\x83n\"\xD4s\x03\x0F\x11m\xDE\xE9\xF6\xB4:\xC7\x8B\xA3Z\xF1\x80\x15a\x0C\x8DWa\x0CqW[P` \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x95\x96\x97Q\x16\x81\x7F\xA2\x01,G\x9F\xE0$\x0CPw\xC8\xE79\x84\x1D\xE4\xD4\xC0\xE6\xE8\t\xF6Q\x08~\xCF7\xCF\xC4\x9F\x12e\x84\x86Q\x8A\x81R\xA3\x82Q\x94\x85\x80\x92\x7Fp\xA0\x821\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R0`\x04\x83\x01RZ\xFA\x90\x81\x15a\x0ChWP\x84\x90a\x0C4W[a\x0B\xE6\x92Pa\x06\xE7V[\x90[\x80\x82\x03a\x0C\x05WPP`@Q\x90a\x0C\0` \x83a\x06\xA6V[\x81R\x90V[`D\x93P\x7Fne\xED\x84\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x04R`$R\xFD[P` \x82=` \x11a\x0C`W[\x81a\x0CN` \x93\x83a\x06\xA6V[\x81\x01\x03\x12a\x01\x8DWa\x0B\xE6\x91Qa\x0B\xDCV[=\x91Pa\x0CAV[Q=\x86\x82>=\x90\xFD[`$\x94\x95P\x90a\x0C\x83_` \x93a\x06\xA6V[_\x95\x94P\x90a\x0BSV[\x83Q=_\x82>=\x90\xFD[\x7F\xE9*\xFC\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\xE0`\x04R`$R`D_\xFD[\x96\x97\x95\x96\x94\x95\x92\x94`\x01\x81\x03a\x0E\xDFWP` \x81\x03a\x0E\xAFWP\x81\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x91` \x93\x01\x03\x01\x12a\x01\x8DWa\r$`@Q\x91a\r\x1F\x83a\x06AV[a\x05]V[\x90\x81\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x92\x7F\xA9\x05\x9C\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R\x84`$R` _`D\x81\x80\x87Z\xF1`\x01_Q\x14\x81\x16\x15a\x0E\x90W[\x82`@R\x15a\x0EdW\x91` \x91\x81\x7F\x91<}\xDD\xA7\xBB.\xF1\xA6I\x0B\xD8\xCA\x12\xCE\xD1\xAE\x8D\x83.\x1Fn\xD5Y\xB4vj\xF8U\xA5\xEA&\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x98\x97Q\x16\x93\x89\x81R\xA3`@Q\x93\x84\x80\x92\x7Fp\xA0\x821\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R0`\x04\x83\x01RZ\xFA\x90\x81\x15a\x0EYW_\x91a\x0E#W[a\x0E\x1D\x92Pa\x06\xE7V[\x90a\x0B\xE8V[\x90P` \x82=` \x11a\x0EQW[\x81a\x0E>` \x93\x83a\x06\xA6V[\x81\x01\x03\x12a\x01\x8DWa\x0E\x1D\x91Q\x90a\x0E\x13V[=\x91Pa\x0E1V[`@Q=_\x82>=\x90\xFD[\x82\x7FRt\xAF\xE7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[`\x01\x81\x15\x16a\x0E\xA6W\x83;\x15\x15=\x15\x16\x16a\r\x83V[\x82=_\x82>=\x90\xFD[\x7F\xE9*\xFC\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R` `\x04R`$R`D_\xFD[\x92\x95\x94\x93\x92`\x02\x03a\x11tW`\x80\x81\x03a\x11DWP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0`\x80\x91\x86\x01\x95\x86\x03\x01\x12a\x01\x8DWa\x10\n\x93a\x0F0\x91a\x15|V[\x90_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92\x80Q\x90` \x81\x01Q\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF```@\x83\x01Q\x92\x01Q\x16\x91`@Q\x93`\x02` \x86\x01R\x86`@\x86\x01R\x8A``\x86\x01R`\x80\x85\x01R`\xA0\x84\x01R`\xC0\x83\x01R`\xE0\x82\x01R`\xE0\x81Ra\x0F\xCFa\x01\0\x82a\x06\xA6V[`@Q\x80\x96\x81\x92\x7F\xBF\xA8\xF8)\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x05\x1AV[\x03\x81\x83\x86Z\xF1\x93\x84\x15a\x0EYWa\x10M\x94a\x11,W[P_`@Q`\x01` \x82\x01R\x82`@\x82\x01R\x86``\x82\x01R0`\x80\x82\x01R`\x80\x81Ra\x0F\xCF`\xA0\x82a\x06\xA6V[\x03\x81\x83\x86Z\xF1\x91\x82\x15a\x0EYW`$\x94` \x93a\x11\x0CW[P\x81\x7F\xA2\x01,G\x9F\xE0$\x0CPw\xC8\xE79\x84\x1D\xE4\xD4\xC0\xE6\xE8\t\xF6Q\x08~\xCF7\xCF\xC4\x9F\x12e\x84`@Q\x89\x81R\xA3`@Q\x93\x84\x80\x92\x7Fp\xA0\x821\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R0`\x04\x83\x01RZ\xFA\x80\x15a\x0EYW_\x90a\x10\xD8Wa\x0E\x1D\x92Pa\x06\xE7V[P` \x82=` \x11a\x11\x04W[\x81a\x10\xF2` \x93\x83a\x06\xA6V[\x81\x01\x03\x12a\x01\x8DWa\x0E\x1D\x91Qa\x0E\x13V[=\x91Pa\x10\xE5V[a\x11'\x90=\x80_\x83>a\x11\x1F\x81\x83a\x06\xA6V[\x81\x01\x90a\x15\xD0V[a\x10eV[a\x11?\x90=\x80_\x83>a\x11\x1F\x81\x83a\x06\xA6V[a\x10 V[\x7F\xE9*\xFC\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x80`\x04R`$R`D_\xFD[`\x80\x81\x96\x93\x94\x95\x96\x03a\x11DWP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0`\x80\x91\x83\x01\x92\x83\x03\x01\x12a\x01\x8DWa\x11\xBA\x91a\x15|V[\x80Q`@Q\x90\x7F\xC1\xB0\xBE\xD7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04\x82\x01R` \x81`$\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x90\x81\x15a\x0EYW_\x91a\x14?W[Pa\x14\x13W\x80Qa\x12E\x81a\x16aV[\x15a\x13\xE8WP` \x81\x01Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x80\x82\x03a\x13\xBAWPP`@\x81\x01Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x80\x82\x03a\x13\x8CWPP``s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x01Q\x16\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91\x82\x81\x03a\x13]WP\x90a\x10M\x92\x91_`@Qa\x13\x18\x81a\x06AV[0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91`\x01` \x84\x01R\x84`@\x84\x01R\x88``\x84\x01RQ\x16`\x80\x82\x01R`\x80\x81Ra\x0F\xCF`\xA0\x82a\x06\xA6V[\x82\x7F\xCDj\x880\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x7FA\x7F\xD4\xAA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x7F\xF6z\xBF\xAE\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x7F9\xA9@\xC5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[Q\x7F`\xA4\xA1.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[a\x14a\x91P` =` \x11a\x14gW[a\x14Y\x81\x83a\x06\xA6V[\x81\x01\x90a\x14\xA2V[_a\x125V[P=a\x14OV[\x90\x95P` \x81=` \x11a\x14\x9AW[\x81a\x14\x8A` \x93\x83a\x06\xA6V[\x81\x01\x03\x12a\x01\x8DWQ\x94_a\x07\xE6V[=\x91Pa\x14}V[\x90\x81` \x91\x03\x12a\x01\x8DWQ\x80\x15\x15\x81\x03a\x01\x8DW\x90V[`@Q\x7F\xFD\xDDH7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` \x81`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x90\x81\x15a\x0EYW_\x91a\x15]W[P\x15a\x155WV[\x7F\xFE@\xB0u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[a\x15v\x91P` =` \x11a\x14gWa\x14Y\x81\x83a\x06\xA6V[_a\x15-V[\x91\x90\x82`\x80\x91\x03\x12a\x01\x8DW`@Q`\x80\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@R``a\x15\xCB\x81\x83\x95\x805\x85R` \x81\x015` \x86\x01R`@\x81\x015`@\x86\x01R\x01a\x05]V[\x91\x01RV[` \x81\x83\x03\x12a\x01\x8DW\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\x8DW\x01\x81`\x1F\x82\x01\x12\x15a\x01\x8DW\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06]W`@Q\x92a\x16@`\x1F\x84\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x85a\x06\xA6V[\x82\x84R` \x83\x83\x01\x01\x11a\x01\x8DW\x81_\x92` \x80\x93\x01\x83\x86\x01^\x83\x01\x01R\x90V[\x80_R`\x02` R`@_ T\x15_\x14a\x16\xBBW`\x01Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x06]W`\x01\x81\x01`\x01U`\x01T\x81\x10\x15a\x03QW\x81\x90`\x01_R` _ \x01U`\x01T\x90_R`\x02` R`@_ U`\x01\x90V[P_\x90V",
    );
    /// The runtime bytecode of the contract, as deployed on the network.
    ///
    /// ```text
     
    /// ```
    #[rustfmt::skip]
    #[allow(clippy::all)]
    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
        b"`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c\r\x8En,\x14a\x04\xB4WP\x80c3\xA8\x92\x03\x14a\x03\xEBW\x80c=\xB8A\x8C\x14a\x03\x9BW\x80c@\xF3MB\x14a\x03~W\x80c\x9A\xD9\x1DL\x14a\x03\x01W\x80c\xA7\xF7\xEB\xD5\x14a\x02\xCFW\x80c\xBF\xA8\xF8)\x14a\x01\xF7W\x80c\xC1\xB0\xBE\xD7\x14a\x01\xCBW\x80c\xCB\xAD\0\xE5\x14a\x01\x91Wc\xE1~\xECb\x14a\0\x8AW_\x80\xFD[4a\x01\x8DW` `\x03\x196\x01\x12a\x01\x8DW`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01\x8DWa\0\xE5\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x05\xF2V[\x80\x15a\x01eW_Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80a\x01:WP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x014a\x14\xBAV[\x16\x17_U\0[\x7FWAC_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x7F\xCFKN.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80\xFD[4a\x01\x8DW_`\x03\x196\x01\x12a\x01\x8DW` `@Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xF3[4a\x01\x8DW` `\x03\x196\x01\x12a\x01\x8DW`\x045_R`\x02` R` `@_ T\x15\x15`@Q\x90\x81R\xF3[4a\x01\x8DW` `\x03\x196\x01\x12a\x01\x8DW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01\x8DWa\x02(\x906\x90`\x04\x01a\x04\xECV[a\x020a\x05~V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x90\x81\x15a\x02\xA7Wa\x02\xA3\x92a\x02_a\x02l\x93a\x05\xF2V[a\x02ga\x14\xBAV[a\x07!V[_\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x05\x1AV[\x03\x90\xF3[\x7F\x81`\xE4\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01\x8DW_`\x03\x196\x01\x12a\x01\x8DW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01\x8DW` `\x03\x196\x01\x12a\x01\x8DW`\x045`\x01T\x81\x10\x15a\x03QW`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x01T`@Q\x90\x81R` \x90\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[4a\x01\x8DW_`\x03\x196\x01\x12a\x01\x8DW` `\x01T`@Q\x90\x81R\xF3[4a\x01\x8DW_`\x03\x196\x01\x12a\x01\x8DW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x01\x8DW`@`\x03\x196\x01\x12a\x01\x8DW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01\x8DWa\x04\x1F\x906\x90`\x04\x01a\x04\xECV[\x91a\x04(a\x05~V[a\x04Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x05\xF2V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x81\x03a\x04\x86Wa\x02\xA3a\x02l\x85\x85a\x07!V[\x7F\xA9p\x85\xAB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[4a\x01\x8DW_`\x03\x196\x01\x12a\x01\x8DW\x80\x7F1.0.1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x92R\xF3[\x91\x81`\x1F\x84\x01\x12\x15a\x01\x8DW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01\x8DW` \x83\x81\x86\x01\x95\x01\x01\x11a\x01\x8DWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01\x8DWV[\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0\\a\x05\xCAW`\x01\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]V[\x7F>\xE5\xAE\xB5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x803\x03a\x06\x12WPV[\x7FSm\xD9\xEF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R3`$R`D_\xFD[` \x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@RV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@RV[\x91\x90\x82\x03\x91\x82\x11a\x06\xF4WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x90\x80``\x11a\x01\x8DW``\x82\x01\x825`\x04\x81\x10\x15a\x01\x8DW` \x84\x015\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x01\x8DW`@\x85\x015\x92o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x01\x8DW_\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x81\x01`@Q\x94\x7Fp\xA0\x821\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R0`\x04\x87\x01R` \x86`$\x81\x87Z\xFA\x95\x86\x15a\x0EYW_\x96a\x14nW[P\x80a\x0C\xC7WP`\xE0\x81\x03a\x0C\x97WP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x87`\xE0\x92\x81\x01\x03\x01\x12a\x01\x8DW`@Q\x91`\xE0\x83\x01\x83\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@R5\x82R` \x82\x01`\x80\x87\x015\x81Ra\x08\\`\xA0\x88\x01a\x05]V[\x96`@\x84\x01\x97\x88R``\x84\x01`\xC0\x82\x015\x81R`\x80\x85\x01\x94`\xE0\x83\x015\x86Ra\x01 `\xA0\x82\x01\x93a\x01\0\x81\x015\x85R\x015\x92`\xFF\x84\x16\x84\x03a\x01\x8DW`\xC0\x82\x01\x93\x84R`@Q\x91a\x08\xAC\x83a\x06\x8AV[\x86\x83R\x89` \x84\x01RQ\x94Q\x90`@Q\x92``\x84\x01\x84\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@R\x83R` \x83\x01\x95\x86R`@\x83\x01\x91\x82R`@Qa\x08\xF3\x81a\x06\x8AV[0\x81R\x8A` \x82\x01Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x8DQ\x16\x94Q\x98`@Q\x99a\t$\x8Ba\x06AV[\x8AR\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`@\x9A`\x1F` \x8Da\t[\x81Q\x91\x82a\x06\xA6V[\x82\x81R\x01\x7FWitness(bytes32 actionTreeRoot)\0\x81R \x90Q\x8CQ\x90` \x82\x01\x92\x83R\x8D\x82\x01R\x8C\x81Ra\t\xA1``\x82a\x06\xA6V[Q\x90 \x97\x8BQ\x92a\t\xB3`\x80\x85a\x06\xA6V[`]\x84R\x7FWitness witness)TokenPermissions` \x85\x01R\x7F(address token,uint256 amount)Wi\x8D\x85\x01R\x7Ftness(bytes32 actionTreeRoot)\0\0\0``\x85\x01RQ\x94Q\x90Q\x90\x8CQ\x95` \x87\x01R\x8C\x86\x01R`\xF8\x1B\x16``\x84\x01R`A\x83Ra\nR`a\x84a\x06\xA6V[n\"\xD4s\x03\x0F\x11m\xDE\xE9\xF6\xB4:\xC7\x8B\xA3;\x15a\x01\x8DW_\x96a\n\xCE\x96a\x0B\x02a\x0B \x94a\x0B3\x97\x8EQ\x9C\x8D\x9B\x8C\x9B\x7F\x13|)\xFE\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8DR`\x04\x8D\x01\x90Q` \x80\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81Q\x16\x84R\x01Q\x91\x01RV[Q`D\x8B\x01RQ`d\x8A\x01R\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x84\x8A\x01R` \x01Q`\xA4\x89\x01RV[`\xC4\x87\x01R`\xE4\x86\x01Ra\x01@a\x01\x04\x86\x01Ra\x01D\x85\x01\x90a\x05\x1AV[\x90`\x03\x19\x84\x83\x03\x01a\x01$\x85\x01Ra\x05\x1AV[\x03\x81\x83n\"\xD4s\x03\x0F\x11m\xDE\xE9\xF6\xB4:\xC7\x8B\xA3Z\xF1\x80\x15a\x0C\x8DWa\x0CqW[P` \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x95\x96\x97Q\x16\x81\x7F\xA2\x01,G\x9F\xE0$\x0CPw\xC8\xE79\x84\x1D\xE4\xD4\xC0\xE6\xE8\t\xF6Q\x08~\xCF7\xCF\xC4\x9F\x12e\x84\x86Q\x8A\x81R\xA3\x82Q\x94\x85\x80\x92\x7Fp\xA0\x821\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R0`\x04\x83\x01RZ\xFA\x90\x81\x15a\x0ChWP\x84\x90a\x0C4W[a\x0B\xE6\x92Pa\x06\xE7V[\x90[\x80\x82\x03a\x0C\x05WPP`@Q\x90a\x0C\0` \x83a\x06\xA6V[\x81R\x90V[`D\x93P\x7Fne\xED\x84\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x04R`$R\xFD[P` \x82=` \x11a\x0C`W[\x81a\x0CN` \x93\x83a\x06\xA6V[\x81\x01\x03\x12a\x01\x8DWa\x0B\xE6\x91Qa\x0B\xDCV[=\x91Pa\x0CAV[Q=\x86\x82>=\x90\xFD[`$\x94\x95P\x90a\x0C\x83_` \x93a\x06\xA6V[_\x95\x94P\x90a\x0BSV[\x83Q=_\x82>=\x90\xFD[\x7F\xE9*\xFC\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\xE0`\x04R`$R`D_\xFD[\x96\x97\x95\x96\x94\x95\x92\x94`\x01\x81\x03a\x0E\xDFWP` \x81\x03a\x0E\xAFWP\x81\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x91` \x93\x01\x03\x01\x12a\x01\x8DWa\r$`@Q\x91a\r\x1F\x83a\x06AV[a\x05]V[\x90\x81\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x92\x7F\xA9\x05\x9C\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R\x84`$R` _`D\x81\x80\x87Z\xF1`\x01_Q\x14\x81\x16\x15a\x0E\x90W[\x82`@R\x15a\x0EdW\x91` \x91\x81\x7F\x91<}\xDD\xA7\xBB.\xF1\xA6I\x0B\xD8\xCA\x12\xCE\xD1\xAE\x8D\x83.\x1Fn\xD5Y\xB4vj\xF8U\xA5\xEA&\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x98\x97Q\x16\x93\x89\x81R\xA3`@Q\x93\x84\x80\x92\x7Fp\xA0\x821\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R0`\x04\x83\x01RZ\xFA\x90\x81\x15a\x0EYW_\x91a\x0E#W[a\x0E\x1D\x92Pa\x06\xE7V[\x90a\x0B\xE8V[\x90P` \x82=` \x11a\x0EQW[\x81a\x0E>` \x93\x83a\x06\xA6V[\x81\x01\x03\x12a\x01\x8DWa\x0E\x1D\x91Q\x90a\x0E\x13V[=\x91Pa\x0E1V[`@Q=_\x82>=\x90\xFD[\x82\x7FRt\xAF\xE7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[`\x01\x81\x15\x16a\x0E\xA6W\x83;\x15\x15=\x15\x16\x16a\r\x83V[\x82=_\x82>=\x90\xFD[\x7F\xE9*\xFC\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R` `\x04R`$R`D_\xFD[\x92\x95\x94\x93\x92`\x02\x03a\x11tW`\x80\x81\x03a\x11DWP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0`\x80\x91\x86\x01\x95\x86\x03\x01\x12a\x01\x8DWa\x10\n\x93a\x0F0\x91a\x15|V[\x90_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92\x80Q\x90` \x81\x01Q\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF```@\x83\x01Q\x92\x01Q\x16\x91`@Q\x93`\x02` \x86\x01R\x86`@\x86\x01R\x8A``\x86\x01R`\x80\x85\x01R`\xA0\x84\x01R`\xC0\x83\x01R`\xE0\x82\x01R`\xE0\x81Ra\x0F\xCFa\x01\0\x82a\x06\xA6V[`@Q\x80\x96\x81\x92\x7F\xBF\xA8\xF8)\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x05\x1AV[\x03\x81\x83\x86Z\xF1\x93\x84\x15a\x0EYWa\x10M\x94a\x11,W[P_`@Q`\x01` \x82\x01R\x82`@\x82\x01R\x86``\x82\x01R0`\x80\x82\x01R`\x80\x81Ra\x0F\xCF`\xA0\x82a\x06\xA6V[\x03\x81\x83\x86Z\xF1\x91\x82\x15a\x0EYW`$\x94` \x93a\x11\x0CW[P\x81\x7F\xA2\x01,G\x9F\xE0$\x0CPw\xC8\xE79\x84\x1D\xE4\xD4\xC0\xE6\xE8\t\xF6Q\x08~\xCF7\xCF\xC4\x9F\x12e\x84`@Q\x89\x81R\xA3`@Q\x93\x84\x80\x92\x7Fp\xA0\x821\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R0`\x04\x83\x01RZ\xFA\x80\x15a\x0EYW_\x90a\x10\xD8Wa\x0E\x1D\x92Pa\x06\xE7V[P` \x82=` \x11a\x11\x04W[\x81a\x10\xF2` \x93\x83a\x06\xA6V[\x81\x01\x03\x12a\x01\x8DWa\x0E\x1D\x91Qa\x0E\x13V[=\x91Pa\x10\xE5V[a\x11'\x90=\x80_\x83>a\x11\x1F\x81\x83a\x06\xA6V[\x81\x01\x90a\x15\xD0V[a\x10eV[a\x11?\x90=\x80_\x83>a\x11\x1F\x81\x83a\x06\xA6V[a\x10 V[\x7F\xE9*\xFC\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x80`\x04R`$R`D_\xFD[`\x80\x81\x96\x93\x94\x95\x96\x03a\x11DWP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0`\x80\x91\x83\x01\x92\x83\x03\x01\x12a\x01\x8DWa\x11\xBA\x91a\x15|V[\x80Q`@Q\x90\x7F\xC1\xB0\xBE\xD7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04\x82\x01R` \x81`$\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x90\x81\x15a\x0EYW_\x91a\x14?W[Pa\x14\x13W\x80Qa\x12E\x81a\x16aV[\x15a\x13\xE8WP` \x81\x01Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x80\x82\x03a\x13\xBAWPP`@\x81\x01Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x80\x82\x03a\x13\x8CWPP``s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x01Q\x16\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91\x82\x81\x03a\x13]WP\x90a\x10M\x92\x91_`@Qa\x13\x18\x81a\x06AV[0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91`\x01` \x84\x01R\x84`@\x84\x01R\x88``\x84\x01RQ\x16`\x80\x82\x01R`\x80\x81Ra\x0F\xCF`\xA0\x82a\x06\xA6V[\x82\x7F\xCDj\x880\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x7FA\x7F\xD4\xAA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x7F\xF6z\xBF\xAE\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x7F9\xA9@\xC5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[Q\x7F`\xA4\xA1.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[a\x14a\x91P` =` \x11a\x14gW[a\x14Y\x81\x83a\x06\xA6V[\x81\x01\x90a\x14\xA2V[_a\x125V[P=a\x14OV[\x90\x95P` \x81=` \x11a\x14\x9AW[\x81a\x14\x8A` \x93\x83a\x06\xA6V[\x81\x01\x03\x12a\x01\x8DWQ\x94_a\x07\xE6V[=\x91Pa\x14}V[\x90\x81` \x91\x03\x12a\x01\x8DWQ\x80\x15\x15\x81\x03a\x01\x8DW\x90V[`@Q\x7F\xFD\xDDH7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` \x81`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x90\x81\x15a\x0EYW_\x91a\x15]W[P\x15a\x155WV[\x7F\xFE@\xB0u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[a\x15v\x91P` =` \x11a\x14gWa\x14Y\x81\x83a\x06\xA6V[_a\x15-V[\x91\x90\x82`\x80\x91\x03\x12a\x01\x8DW`@Q`\x80\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06]W`@R``a\x15\xCB\x81\x83\x95\x805\x85R` \x81\x015` \x86\x01R`@\x81\x015`@\x86\x01R\x01a\x05]V[\x91\x01RV[` \x81\x83\x03\x12a\x01\x8DW\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\x8DW\x01\x81`\x1F\x82\x01\x12\x15a\x01\x8DW\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06]W`@Q\x92a\x16@`\x1F\x84\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x85a\x06\xA6V[\x82\x84R` \x83\x83\x01\x01\x11a\x01\x8DW\x81_\x92` \x80\x93\x01\x83\x86\x01^\x83\x01\x01R\x90V[\x80_R`\x02` R`@_ T\x15_\x14a\x16\xBBW`\x01Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x06]W`\x01\x81\x01`\x01U`\x01T\x81\x10\x15a\x03QW\x81\x90`\x01_R` _ \x01U`\x01T\x90_R`\x02` R`@_ U`\x01\x90V[P_\x90V",
    );
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `BalanceMismatch(uint256,uint256)` and selector `0x6e65ed84`.
```solidity
error BalanceMismatch(uint256 expected, uint256 actual);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct BalanceMismatch {
        #[allow(missing_docs)]
        pub expected: alloy::sol_types::private::primitives::aliases::U256,
        #[allow(missing_docs)]
        pub actual: alloy::sol_types::private::primitives::aliases::U256,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (
            alloy::sol_types::sol_data::Uint<256>,
            alloy::sol_types::sol_data::Uint<256>,
        );
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (
            alloy::sol_types::private::primitives::aliases::U256,
            alloy::sol_types::private::primitives::aliases::U256,
        );
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<BalanceMismatch> for UnderlyingRustTuple<'_> {
            fn from(value: BalanceMismatch) -> Self {
                (value.expected, value.actual)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BalanceMismatch {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self {
                    expected: tuple.0,
                    actual: tuple.1,
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for BalanceMismatch {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "BalanceMismatch(uint256,uint256)";
            const SELECTOR: [u8; 4] = [110u8, 101u8, 237u8, 132u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Uint<
                        256,
                    > as alloy_sol_types::SolType>::tokenize(&self.expected),
                    <alloy::sol_types::sol_data::Uint<
                        256,
                    > as alloy_sol_types::SolType>::tokenize(&self.actual),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `EmergencyCallerAlreadySet(address)` and selector `0x5741435f`.
```solidity
error EmergencyCallerAlreadySet(address emergencyCaller);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct EmergencyCallerAlreadySet {
        #[allow(missing_docs)]
        pub emergencyCaller: alloy::sol_types::private::Address,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<EmergencyCallerAlreadySet>
        for UnderlyingRustTuple<'_> {
            fn from(value: EmergencyCallerAlreadySet) -> Self {
                (value.emergencyCaller,)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>>
        for EmergencyCallerAlreadySet {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self { emergencyCaller: tuple.0 }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for EmergencyCallerAlreadySet {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "EmergencyCallerAlreadySet(address)";
            const SELECTOR: [u8; 4] = [87u8, 65u8, 67u8, 95u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.emergencyCaller,
                    ),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `EmergencyCallerNotSet()` and selector `0x8160e4bb`.
```solidity
error EmergencyCallerNotSet();
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct EmergencyCallerNotSet;
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = ();
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = ();
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<EmergencyCallerNotSet> for UnderlyingRustTuple<'_> {
            fn from(value: EmergencyCallerNotSet) -> Self {
                ()
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>> for EmergencyCallerNotSet {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for EmergencyCallerNotSet {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "EmergencyCallerNotSet()";
            const SELECTOR: [u8; 4] = [129u8, 96u8, 228u8, 187u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                ()
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `InvalidForwarderV1(address,address)` and selector `0x11bea874`.
```solidity
error InvalidForwarderV1(address expected, address actual);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct InvalidForwarderV1 {
        #[allow(missing_docs)]
        pub expected: alloy::sol_types::private::Address,
        #[allow(missing_docs)]
        pub actual: alloy::sol_types::private::Address,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (
            alloy::sol_types::sol_data::Address,
            alloy::sol_types::sol_data::Address,
        );
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (
            alloy::sol_types::private::Address,
            alloy::sol_types::private::Address,
        );
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<InvalidForwarderV1> for UnderlyingRustTuple<'_> {
            fn from(value: InvalidForwarderV1) -> Self {
                (value.expected, value.actual)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidForwarderV1 {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self {
                    expected: tuple.0,
                    actual: tuple.1,
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for InvalidForwarderV1 {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "InvalidForwarderV1(address,address)";
            const SELECTOR: [u8; 4] = [17u8, 190u8, 168u8, 116u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.expected,
                    ),
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.actual,
                    ),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `InvalidForwarderV2(address,address)` and selector `0xcd6a8830`.
```solidity
error InvalidForwarderV2(address expected, address actual);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct InvalidForwarderV2 {
        #[allow(missing_docs)]
        pub expected: alloy::sol_types::private::Address,
        #[allow(missing_docs)]
        pub actual: alloy::sol_types::private::Address,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (
            alloy::sol_types::sol_data::Address,
            alloy::sol_types::sol_data::Address,
        );
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (
            alloy::sol_types::private::Address,
            alloy::sol_types::private::Address,
        );
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<InvalidForwarderV2> for UnderlyingRustTuple<'_> {
            fn from(value: InvalidForwarderV2) -> Self {
                (value.expected, value.actual)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidForwarderV2 {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self {
                    expected: tuple.0,
                    actual: tuple.1,
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for InvalidForwarderV2 {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "InvalidForwarderV2(address,address)";
            const SELECTOR: [u8; 4] = [205u8, 106u8, 136u8, 48u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.expected,
                    ),
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.actual,
                    ),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `InvalidInputLength(uint256,uint256)` and selector `0xe92afc13`.
```solidity
error InvalidInputLength(uint256 expected, uint256 actual);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct InvalidInputLength {
        #[allow(missing_docs)]
        pub expected: alloy::sol_types::private::primitives::aliases::U256,
        #[allow(missing_docs)]
        pub actual: alloy::sol_types::private::primitives::aliases::U256,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (
            alloy::sol_types::sol_data::Uint<256>,
            alloy::sol_types::sol_data::Uint<256>,
        );
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (
            alloy::sol_types::private::primitives::aliases::U256,
            alloy::sol_types::private::primitives::aliases::U256,
        );
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<InvalidInputLength> for UnderlyingRustTuple<'_> {
            fn from(value: InvalidInputLength) -> Self {
                (value.expected, value.actual)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidInputLength {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self {
                    expected: tuple.0,
                    actual: tuple.1,
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for InvalidInputLength {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "InvalidInputLength(uint256,uint256)";
            const SELECTOR: [u8; 4] = [233u8, 42u8, 252u8, 19u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Uint<
                        256,
                    > as alloy_sol_types::SolType>::tokenize(&self.expected),
                    <alloy::sol_types::sol_data::Uint<
                        256,
                    > as alloy_sol_types::SolType>::tokenize(&self.actual),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `InvalidMigrationCommitmentTreeRootV1(bytes32,bytes32)` and selector `0x302aca5e`.
```solidity
error InvalidMigrationCommitmentTreeRootV1(bytes32 expected, bytes32 actual);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct InvalidMigrationCommitmentTreeRootV1 {
        #[allow(missing_docs)]
        pub expected: alloy::sol_types::private::FixedBytes<32>,
        #[allow(missing_docs)]
        pub actual: alloy::sol_types::private::FixedBytes<32>,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (
            alloy::sol_types::sol_data::FixedBytes<32>,
            alloy::sol_types::sol_data::FixedBytes<32>,
        );
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (
            alloy::sol_types::private::FixedBytes<32>,
            alloy::sol_types::private::FixedBytes<32>,
        );
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<InvalidMigrationCommitmentTreeRootV1>
        for UnderlyingRustTuple<'_> {
            fn from(value: InvalidMigrationCommitmentTreeRootV1) -> Self {
                (value.expected, value.actual)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>>
        for InvalidMigrationCommitmentTreeRootV1 {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self {
                    expected: tuple.0,
                    actual: tuple.1,
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for InvalidMigrationCommitmentTreeRootV1 {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "InvalidMigrationCommitmentTreeRootV1(bytes32,bytes32)";
            const SELECTOR: [u8; 4] = [48u8, 42u8, 202u8, 94u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.expected),
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.actual),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `InvalidMigrationCommitmentTreeRootV2(bytes32,bytes32)` and selector `0xf67abfae`.
```solidity
error InvalidMigrationCommitmentTreeRootV2(bytes32 expected, bytes32 actual);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct InvalidMigrationCommitmentTreeRootV2 {
        #[allow(missing_docs)]
        pub expected: alloy::sol_types::private::FixedBytes<32>,
        #[allow(missing_docs)]
        pub actual: alloy::sol_types::private::FixedBytes<32>,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (
            alloy::sol_types::sol_data::FixedBytes<32>,
            alloy::sol_types::sol_data::FixedBytes<32>,
        );
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (
            alloy::sol_types::private::FixedBytes<32>,
            alloy::sol_types::private::FixedBytes<32>,
        );
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<InvalidMigrationCommitmentTreeRootV2>
        for UnderlyingRustTuple<'_> {
            fn from(value: InvalidMigrationCommitmentTreeRootV2) -> Self {
                (value.expected, value.actual)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>>
        for InvalidMigrationCommitmentTreeRootV2 {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self {
                    expected: tuple.0,
                    actual: tuple.1,
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for InvalidMigrationCommitmentTreeRootV2 {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "InvalidMigrationCommitmentTreeRootV2(bytes32,bytes32)";
            const SELECTOR: [u8; 4] = [246u8, 122u8, 191u8, 174u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.expected),
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.actual),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `InvalidMigrationLogicRefV1(bytes32,bytes32)` and selector `0x07f0e2dd`.
```solidity
error InvalidMigrationLogicRefV1(bytes32 expected, bytes32 actual);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct InvalidMigrationLogicRefV1 {
        #[allow(missing_docs)]
        pub expected: alloy::sol_types::private::FixedBytes<32>,
        #[allow(missing_docs)]
        pub actual: alloy::sol_types::private::FixedBytes<32>,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (
            alloy::sol_types::sol_data::FixedBytes<32>,
            alloy::sol_types::sol_data::FixedBytes<32>,
        );
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (
            alloy::sol_types::private::FixedBytes<32>,
            alloy::sol_types::private::FixedBytes<32>,
        );
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<InvalidMigrationLogicRefV1>
        for UnderlyingRustTuple<'_> {
            fn from(value: InvalidMigrationLogicRefV1) -> Self {
                (value.expected, value.actual)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>>
        for InvalidMigrationLogicRefV1 {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self {
                    expected: tuple.0,
                    actual: tuple.1,
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for InvalidMigrationLogicRefV1 {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "InvalidMigrationLogicRefV1(bytes32,bytes32)";
            const SELECTOR: [u8; 4] = [7u8, 240u8, 226u8, 221u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.expected),
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.actual),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `InvalidMigrationLogicRefV2(bytes32,bytes32)` and selector `0x417fd4aa`.
```solidity
error InvalidMigrationLogicRefV2(bytes32 expected, bytes32 actual);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct InvalidMigrationLogicRefV2 {
        #[allow(missing_docs)]
        pub expected: alloy::sol_types::private::FixedBytes<32>,
        #[allow(missing_docs)]
        pub actual: alloy::sol_types::private::FixedBytes<32>,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (
            alloy::sol_types::sol_data::FixedBytes<32>,
            alloy::sol_types::sol_data::FixedBytes<32>,
        );
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (
            alloy::sol_types::private::FixedBytes<32>,
            alloy::sol_types::private::FixedBytes<32>,
        );
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<InvalidMigrationLogicRefV2>
        for UnderlyingRustTuple<'_> {
            fn from(value: InvalidMigrationLogicRefV2) -> Self {
                (value.expected, value.actual)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>>
        for InvalidMigrationLogicRefV2 {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self {
                    expected: tuple.0,
                    actual: tuple.1,
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for InvalidMigrationLogicRefV2 {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "InvalidMigrationLogicRefV2(bytes32,bytes32)";
            const SELECTOR: [u8; 4] = [65u8, 127u8, 212u8, 170u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.expected),
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.actual),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `PreExistingNullifier(bytes32)` and selector `0x39a940c5`.
```solidity
error PreExistingNullifier(bytes32 nullifier);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct PreExistingNullifier {
        #[allow(missing_docs)]
        pub nullifier: alloy::sol_types::private::FixedBytes<32>,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<PreExistingNullifier> for UnderlyingRustTuple<'_> {
            fn from(value: PreExistingNullifier) -> Self {
                (value.nullifier,)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PreExistingNullifier {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self { nullifier: tuple.0 }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for PreExistingNullifier {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "PreExistingNullifier(bytes32)";
            const SELECTOR: [u8; 4] = [57u8, 169u8, 64u8, 197u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.nullifier),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `ProtocolAdapterNotStopped()` and selector `0xfe40b075`.
```solidity
error ProtocolAdapterNotStopped();
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct ProtocolAdapterNotStopped;
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = ();
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = ();
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<ProtocolAdapterNotStopped>
        for UnderlyingRustTuple<'_> {
            fn from(value: ProtocolAdapterNotStopped) -> Self {
                ()
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>>
        for ProtocolAdapterNotStopped {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for ProtocolAdapterNotStopped {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "ProtocolAdapterNotStopped()";
            const SELECTOR: [u8; 4] = [254u8, 64u8, 176u8, 117u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                ()
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `ReentrancyGuardReentrantCall()` and selector `0x3ee5aeb5`.
```solidity
error ReentrancyGuardReentrantCall();
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct ReentrancyGuardReentrantCall;
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = ();
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = ();
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<ReentrancyGuardReentrantCall>
        for UnderlyingRustTuple<'_> {
            fn from(value: ReentrancyGuardReentrantCall) -> Self {
                ()
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>>
        for ReentrancyGuardReentrantCall {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for ReentrancyGuardReentrantCall {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "ReentrancyGuardReentrantCall()";
            const SELECTOR: [u8; 4] = [62u8, 229u8, 174u8, 181u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                ()
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `ResourceAlreadyConsumed(bytes32)` and selector `0x60a4a12e`.
```solidity
error ResourceAlreadyConsumed(bytes32 nullifier);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct ResourceAlreadyConsumed {
        #[allow(missing_docs)]
        pub nullifier: alloy::sol_types::private::FixedBytes<32>,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<ResourceAlreadyConsumed> for UnderlyingRustTuple<'_> {
            fn from(value: ResourceAlreadyConsumed) -> Self {
                (value.nullifier,)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>> for ResourceAlreadyConsumed {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self { nullifier: tuple.0 }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for ResourceAlreadyConsumed {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "ResourceAlreadyConsumed(bytes32)";
            const SELECTOR: [u8; 4] = [96u8, 164u8, 161u8, 46u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.nullifier),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `SafeERC20FailedOperation(address)` and selector `0x5274afe7`.
```solidity
error SafeERC20FailedOperation(address token);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct SafeERC20FailedOperation {
        #[allow(missing_docs)]
        pub token: alloy::sol_types::private::Address,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<SafeERC20FailedOperation>
        for UnderlyingRustTuple<'_> {
            fn from(value: SafeERC20FailedOperation) -> Self {
                (value.token,)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>>
        for SafeERC20FailedOperation {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self { token: tuple.0 }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for SafeERC20FailedOperation {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "SafeERC20FailedOperation(address)";
            const SELECTOR: [u8; 4] = [82u8, 116u8, 175u8, 231u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.token,
                    ),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `UnauthorizedCaller(address,address)` and selector `0x536dd9ef`.
```solidity
error UnauthorizedCaller(address expected, address actual);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct UnauthorizedCaller {
        #[allow(missing_docs)]
        pub expected: alloy::sol_types::private::Address,
        #[allow(missing_docs)]
        pub actual: alloy::sol_types::private::Address,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (
            alloy::sol_types::sol_data::Address,
            alloy::sol_types::sol_data::Address,
        );
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (
            alloy::sol_types::private::Address,
            alloy::sol_types::private::Address,
        );
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnauthorizedCaller> for UnderlyingRustTuple<'_> {
            fn from(value: UnauthorizedCaller) -> Self {
                (value.expected, value.actual)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>> for UnauthorizedCaller {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self {
                    expected: tuple.0,
                    actual: tuple.1,
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for UnauthorizedCaller {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "UnauthorizedCaller(address,address)";
            const SELECTOR: [u8; 4] = [83u8, 109u8, 217u8, 239u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.expected,
                    ),
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.actual,
                    ),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `UnauthorizedLogicRef(bytes32,bytes32)` and selector `0xa97085ab`.
```solidity
error UnauthorizedLogicRef(bytes32 expected, bytes32 actual);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct UnauthorizedLogicRef {
        #[allow(missing_docs)]
        pub expected: alloy::sol_types::private::FixedBytes<32>,
        #[allow(missing_docs)]
        pub actual: alloy::sol_types::private::FixedBytes<32>,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (
            alloy::sol_types::sol_data::FixedBytes<32>,
            alloy::sol_types::sol_data::FixedBytes<32>,
        );
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (
            alloy::sol_types::private::FixedBytes<32>,
            alloy::sol_types::private::FixedBytes<32>,
        );
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnauthorizedLogicRef> for UnderlyingRustTuple<'_> {
            fn from(value: UnauthorizedLogicRef) -> Self {
                (value.expected, value.actual)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>> for UnauthorizedLogicRef {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self {
                    expected: tuple.0,
                    actual: tuple.1,
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for UnauthorizedLogicRef {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "UnauthorizedLogicRef(bytes32,bytes32)";
            const SELECTOR: [u8; 4] = [169u8, 112u8, 133u8, 171u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.expected),
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.actual),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `UnstoppedProtocolAdapterV1(address)` and selector `0xe3bf0fcf`.
```solidity
error UnstoppedProtocolAdapterV1(address protocolAdapterV1);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct UnstoppedProtocolAdapterV1 {
        #[allow(missing_docs)]
        pub protocolAdapterV1: alloy::sol_types::private::Address,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnstoppedProtocolAdapterV1>
        for UnderlyingRustTuple<'_> {
            fn from(value: UnstoppedProtocolAdapterV1) -> Self {
                (value.protocolAdapterV1,)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>>
        for UnstoppedProtocolAdapterV1 {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self { protocolAdapterV1: tuple.0 }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for UnstoppedProtocolAdapterV1 {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "UnstoppedProtocolAdapterV1(address)";
            const SELECTOR: [u8; 4] = [227u8, 191u8, 15u8, 207u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.protocolAdapterV1,
                    ),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `UnstoppedProtocolAdapterV2(address)` and selector `0xac5e0221`.
```solidity
error UnstoppedProtocolAdapterV2(address protocolAdapterV2);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct UnstoppedProtocolAdapterV2 {
        #[allow(missing_docs)]
        pub protocolAdapterV2: alloy::sol_types::private::Address,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnstoppedProtocolAdapterV2>
        for UnderlyingRustTuple<'_> {
            fn from(value: UnstoppedProtocolAdapterV2) -> Self {
                (value.protocolAdapterV2,)
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>>
        for UnstoppedProtocolAdapterV2 {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self { protocolAdapterV2: tuple.0 }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for UnstoppedProtocolAdapterV2 {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "UnstoppedProtocolAdapterV2(address)";
            const SELECTOR: [u8; 4] = [172u8, 94u8, 2u8, 33u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.protocolAdapterV2,
                    ),
                )
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Custom error with signature `ZeroNotAllowed()` and selector `0xcf4b4e2e`.
```solidity
error ZeroNotAllowed();
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct ZeroNotAllowed;
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[doc(hidden)]
        #[allow(dead_code)]
        type UnderlyingSolTuple<'a> = ();
        #[doc(hidden)]
        type UnderlyingRustTuple<'a> = ();
        #[cfg(test)]
        #[allow(dead_code, unreachable_patterns)]
        fn _type_assertion(
            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
        ) {
            match _t {
                alloy_sol_types::private::AssertTypeEq::<
                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                >(_) => {}
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<ZeroNotAllowed> for UnderlyingRustTuple<'_> {
            fn from(value: ZeroNotAllowed) -> Self {
                ()
            }
        }
        #[automatically_derived]
        #[doc(hidden)]
        impl ::core::convert::From<UnderlyingRustTuple<'_>> for ZeroNotAllowed {
            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                Self
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolError for ZeroNotAllowed {
            type Parameters<'a> = UnderlyingSolTuple<'a>;
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "ZeroNotAllowed()";
            const SELECTOR: [u8; 4] = [207u8, 75u8, 78u8, 46u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                ()
            }
            #[inline]
            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
                <Self::Parameters<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Self::new)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Event with signature `Unwrapped(address,address,uint128)` and selector `0x913c7ddda7bb2ef1a6490bd8ca12ced1ae8d832e1f6ed559b4766af855a5ea26`.
```solidity
event Unwrapped(address indexed token, address indexed to, uint128 amount);
```*/
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    #[derive(Clone)]
    pub struct Unwrapped {
        #[allow(missing_docs)]
        pub token: alloy::sol_types::private::Address,
        #[allow(missing_docs)]
        pub to: alloy::sol_types::private::Address,
        #[allow(missing_docs)]
        pub amount: u128,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[automatically_derived]
        impl alloy_sol_types::SolEvent for Unwrapped {
            type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<128>,);
            type DataToken<'a> = <Self::DataTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type TopicList = (
                alloy_sol_types::sol_data::FixedBytes<32>,
                alloy::sol_types::sol_data::Address,
                alloy::sol_types::sol_data::Address,
            );
            const SIGNATURE: &'static str = "Unwrapped(address,address,uint128)";
            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
                145u8, 60u8, 125u8, 221u8, 167u8, 187u8, 46u8, 241u8, 166u8, 73u8, 11u8,
                216u8, 202u8, 18u8, 206u8, 209u8, 174u8, 141u8, 131u8, 46u8, 31u8, 110u8,
                213u8, 89u8, 180u8, 118u8, 106u8, 248u8, 85u8, 165u8, 234u8, 38u8,
            ]);
            const ANONYMOUS: bool = false;
            #[allow(unused_variables)]
            #[inline]
            fn new(
                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                Self {
                    token: topics.1,
                    to: topics.2,
                    amount: data.0,
                }
            }
            #[inline]
            fn check_signature(
                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
            ) -> alloy_sol_types::Result<()> {
                if topics.0 != Self::SIGNATURE_HASH {
                    return Err(
                        alloy_sol_types::Error::invalid_event_signature_hash(
                            Self::SIGNATURE,
                            topics.0,
                            Self::SIGNATURE_HASH,
                        ),
                    );
                }
                Ok(())
            }
            #[inline]
            fn tokenize_body(&self) -> Self::DataToken<'_> {
                (
                    <alloy::sol_types::sol_data::Uint<
                        128,
                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
                )
            }
            #[inline]
            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
                (Self::SIGNATURE_HASH.into(), self.token.clone(), self.to.clone())
            }
            #[inline]
            fn encode_topics_raw(
                &self,
                out: &mut [alloy_sol_types::abi::token::WordToken],
            ) -> alloy_sol_types::Result<()> {
                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
                    return Err(alloy_sol_types::Error::Overrun);
                }
                out[0usize] = alloy_sol_types::abi::token::WordToken(
                    Self::SIGNATURE_HASH,
                );
                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
                    &self.token,
                );
                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
                    &self.to,
                );
                Ok(())
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::private::IntoLogData for Unwrapped {
            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
                From::from(self)
            }
            fn into_log_data(self) -> alloy_sol_types::private::LogData {
                From::from(&self)
            }
        }
        #[automatically_derived]
        impl From<&Unwrapped> for alloy_sol_types::private::LogData {
            #[inline]
            fn from(this: &Unwrapped) -> alloy_sol_types::private::LogData {
                alloy_sol_types::SolEvent::encode_log_data(this)
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Event with signature `Wrapped(address,address,uint128)` and selector `0xa2012c479fe0240c5077c8e739841de4d4c0e6e809f651087ecf37cfc49f1265`.
```solidity
event Wrapped(address indexed token, address indexed from, uint128 amount);
```*/
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    #[derive(Clone)]
    pub struct Wrapped {
        #[allow(missing_docs)]
        pub token: alloy::sol_types::private::Address,
        #[allow(missing_docs)]
        pub from: alloy::sol_types::private::Address,
        #[allow(missing_docs)]
        pub amount: u128,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        #[automatically_derived]
        impl alloy_sol_types::SolEvent for Wrapped {
            type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<128>,);
            type DataToken<'a> = <Self::DataTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type TopicList = (
                alloy_sol_types::sol_data::FixedBytes<32>,
                alloy::sol_types::sol_data::Address,
                alloy::sol_types::sol_data::Address,
            );
            const SIGNATURE: &'static str = "Wrapped(address,address,uint128)";
            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
                162u8, 1u8, 44u8, 71u8, 159u8, 224u8, 36u8, 12u8, 80u8, 119u8, 200u8,
                231u8, 57u8, 132u8, 29u8, 228u8, 212u8, 192u8, 230u8, 232u8, 9u8, 246u8,
                81u8, 8u8, 126u8, 207u8, 55u8, 207u8, 196u8, 159u8, 18u8, 101u8,
            ]);
            const ANONYMOUS: bool = false;
            #[allow(unused_variables)]
            #[inline]
            fn new(
                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                Self {
                    token: topics.1,
                    from: topics.2,
                    amount: data.0,
                }
            }
            #[inline]
            fn check_signature(
                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
            ) -> alloy_sol_types::Result<()> {
                if topics.0 != Self::SIGNATURE_HASH {
                    return Err(
                        alloy_sol_types::Error::invalid_event_signature_hash(
                            Self::SIGNATURE,
                            topics.0,
                            Self::SIGNATURE_HASH,
                        ),
                    );
                }
                Ok(())
            }
            #[inline]
            fn tokenize_body(&self) -> Self::DataToken<'_> {
                (
                    <alloy::sol_types::sol_data::Uint<
                        128,
                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
                )
            }
            #[inline]
            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
                (Self::SIGNATURE_HASH.into(), self.token.clone(), self.from.clone())
            }
            #[inline]
            fn encode_topics_raw(
                &self,
                out: &mut [alloy_sol_types::abi::token::WordToken],
            ) -> alloy_sol_types::Result<()> {
                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
                    return Err(alloy_sol_types::Error::Overrun);
                }
                out[0usize] = alloy_sol_types::abi::token::WordToken(
                    Self::SIGNATURE_HASH,
                );
                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
                    &self.token,
                );
                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
                    &self.from,
                );
                Ok(())
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::private::IntoLogData for Wrapped {
            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
                From::from(self)
            }
            fn into_log_data(self) -> alloy_sol_types::private::LogData {
                From::from(&self)
            }
        }
        #[automatically_derived]
        impl From<&Wrapped> for alloy_sol_types::private::LogData {
            #[inline]
            fn from(this: &Wrapped) -> alloy_sol_types::private::LogData {
                alloy_sol_types::SolEvent::encode_log_data(this)
            }
        }
    };
    /**Constructor`.
```solidity
constructor(address protocolAdapterV3, bytes32 logicRefV3, address emergencyCommittee, address erc20ForwarderV1, address erc20ForwarderV2);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct constructorCall {
        #[allow(missing_docs)]
        pub protocolAdapterV3: alloy::sol_types::private::Address,
        #[allow(missing_docs)]
        pub logicRefV3: alloy::sol_types::private::FixedBytes<32>,
        #[allow(missing_docs)]
        pub emergencyCommittee: alloy::sol_types::private::Address,
        #[allow(missing_docs)]
        pub erc20ForwarderV1: alloy::sol_types::private::Address,
        #[allow(missing_docs)]
        pub erc20ForwarderV2: alloy::sol_types::private::Address,
    }
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (
                alloy::sol_types::sol_data::Address,
                alloy::sol_types::sol_data::FixedBytes<32>,
                alloy::sol_types::sol_data::Address,
                alloy::sol_types::sol_data::Address,
                alloy::sol_types::sol_data::Address,
            );
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (
                alloy::sol_types::private::Address,
                alloy::sol_types::private::FixedBytes<32>,
                alloy::sol_types::private::Address,
                alloy::sol_types::private::Address,
                alloy::sol_types::private::Address,
            );
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<constructorCall> for UnderlyingRustTuple<'_> {
                fn from(value: constructorCall) -> Self {
                    (
                        value.protocolAdapterV3,
                        value.logicRefV3,
                        value.emergencyCommittee,
                        value.erc20ForwarderV1,
                        value.erc20ForwarderV2,
                    )
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>> for constructorCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self {
                        protocolAdapterV3: tuple.0,
                        logicRefV3: tuple.1,
                        emergencyCommittee: tuple.2,
                        erc20ForwarderV1: tuple.3,
                        erc20ForwarderV2: tuple.4,
                    }
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolConstructor for constructorCall {
            type Parameters<'a> = (
                alloy::sol_types::sol_data::Address,
                alloy::sol_types::sol_data::FixedBytes<32>,
                alloy::sol_types::sol_data::Address,
                alloy::sol_types::sol_data::Address,
                alloy::sol_types::sol_data::Address,
            );
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.protocolAdapterV3,
                    ),
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.logicRefV3),
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.emergencyCommittee,
                    ),
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.erc20ForwarderV1,
                    ),
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.erc20ForwarderV2,
                    ),
                )
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Function with signature `forwardCall(bytes32,bytes)` and selector `0x33a89203`.
```solidity
function forwardCall(bytes32 logicRef, bytes memory input) external returns (bytes memory output);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct forwardCallCall {
        #[allow(missing_docs)]
        pub logicRef: alloy::sol_types::private::FixedBytes<32>,
        #[allow(missing_docs)]
        pub input: alloy::sol_types::private::Bytes,
    }
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    ///Container type for the return parameters of the [`forwardCall(bytes32,bytes)`](forwardCallCall) function.
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct forwardCallReturn {
        #[allow(missing_docs)]
        pub output: alloy::sol_types::private::Bytes,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (
                alloy::sol_types::sol_data::FixedBytes<32>,
                alloy::sol_types::sol_data::Bytes,
            );
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (
                alloy::sol_types::private::FixedBytes<32>,
                alloy::sol_types::private::Bytes,
            );
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<forwardCallCall> for UnderlyingRustTuple<'_> {
                fn from(value: forwardCallCall) -> Self {
                    (value.logicRef, value.input)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>> for forwardCallCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self {
                        logicRef: tuple.0,
                        input: tuple.1,
                    }
                }
            }
        }
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<forwardCallReturn> for UnderlyingRustTuple<'_> {
                fn from(value: forwardCallReturn) -> Self {
                    (value.output,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>> for forwardCallReturn {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { output: tuple.0 }
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolCall for forwardCallCall {
            type Parameters<'a> = (
                alloy::sol_types::sol_data::FixedBytes<32>,
                alloy::sol_types::sol_data::Bytes,
            );
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type Return = alloy::sol_types::private::Bytes;
            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bytes,);
            type ReturnToken<'a> = <Self::ReturnTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "forwardCall(bytes32,bytes)";
            const SELECTOR: [u8; 4] = [51u8, 168u8, 146u8, 3u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.logicRef),
                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
                        &self.input,
                    ),
                )
            }
            #[inline]
            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
                (
                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
                        ret,
                    ),
                )
            }
            #[inline]
            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
                    .map(|r| {
                        let r: forwardCallReturn = r.into();
                        r.output
                    })
            }
            #[inline]
            fn abi_decode_returns_validate(
                data: &[u8],
            ) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(|r| {
                        let r: forwardCallReturn = r.into();
                        r.output
                    })
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Function with signature `forwardEmergencyCall(bytes)` and selector `0xbfa8f829`.
```solidity
function forwardEmergencyCall(bytes memory input) external returns (bytes memory output);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct forwardEmergencyCallCall {
        #[allow(missing_docs)]
        pub input: alloy::sol_types::private::Bytes,
    }
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    ///Container type for the return parameters of the [`forwardEmergencyCall(bytes)`](forwardEmergencyCallCall) function.
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct forwardEmergencyCallReturn {
        #[allow(missing_docs)]
        pub output: alloy::sol_types::private::Bytes,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<forwardEmergencyCallCall>
            for UnderlyingRustTuple<'_> {
                fn from(value: forwardEmergencyCallCall) -> Self {
                    (value.input,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for forwardEmergencyCallCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { input: tuple.0 }
                }
            }
        }
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<forwardEmergencyCallReturn>
            for UnderlyingRustTuple<'_> {
                fn from(value: forwardEmergencyCallReturn) -> Self {
                    (value.output,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for forwardEmergencyCallReturn {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { output: tuple.0 }
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolCall for forwardEmergencyCallCall {
            type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,);
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type Return = alloy::sol_types::private::Bytes;
            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bytes,);
            type ReturnToken<'a> = <Self::ReturnTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "forwardEmergencyCall(bytes)";
            const SELECTOR: [u8; 4] = [191u8, 168u8, 248u8, 41u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
                        &self.input,
                    ),
                )
            }
            #[inline]
            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
                (
                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
                        ret,
                    ),
                )
            }
            #[inline]
            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
                    .map(|r| {
                        let r: forwardEmergencyCallReturn = r.into();
                        r.output
                    })
            }
            #[inline]
            fn abi_decode_returns_validate(
                data: &[u8],
            ) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(|r| {
                        let r: forwardEmergencyCallReturn = r.into();
                        r.output
                    })
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Function with signature `getEmergencyCaller()` and selector `0xa7f7ebd5`.
```solidity
function getEmergencyCaller() external view returns (address caller);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct getEmergencyCallerCall;
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    ///Container type for the return parameters of the [`getEmergencyCaller()`](getEmergencyCallerCall) function.
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct getEmergencyCallerReturn {
        #[allow(missing_docs)]
        pub caller: alloy::sol_types::private::Address,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = ();
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = ();
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<getEmergencyCallerCall>
            for UnderlyingRustTuple<'_> {
                fn from(value: getEmergencyCallerCall) -> Self {
                    ()
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for getEmergencyCallerCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self
                }
            }
        }
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<getEmergencyCallerReturn>
            for UnderlyingRustTuple<'_> {
                fn from(value: getEmergencyCallerReturn) -> Self {
                    (value.caller,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for getEmergencyCallerReturn {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { caller: tuple.0 }
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolCall for getEmergencyCallerCall {
            type Parameters<'a> = ();
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type Return = alloy::sol_types::private::Address;
            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
            type ReturnToken<'a> = <Self::ReturnTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "getEmergencyCaller()";
            const SELECTOR: [u8; 4] = [167u8, 247u8, 235u8, 213u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                ()
            }
            #[inline]
            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        ret,
                    ),
                )
            }
            #[inline]
            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
                    .map(|r| {
                        let r: getEmergencyCallerReturn = r.into();
                        r.caller
                    })
            }
            #[inline]
            fn abi_decode_returns_validate(
                data: &[u8],
            ) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(|r| {
                        let r: getEmergencyCallerReturn = r.into();
                        r.caller
                    })
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Function with signature `getLogicRef()` and selector `0xcbad00e5`.
```solidity
function getLogicRef() external view returns (bytes32 logicRef);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct getLogicRefCall;
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    ///Container type for the return parameters of the [`getLogicRef()`](getLogicRefCall) function.
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct getLogicRefReturn {
        #[allow(missing_docs)]
        pub logicRef: alloy::sol_types::private::FixedBytes<32>,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = ();
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = ();
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<getLogicRefCall> for UnderlyingRustTuple<'_> {
                fn from(value: getLogicRefCall) -> Self {
                    ()
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getLogicRefCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self
                }
            }
        }
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<getLogicRefReturn> for UnderlyingRustTuple<'_> {
                fn from(value: getLogicRefReturn) -> Self {
                    (value.logicRef,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getLogicRefReturn {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { logicRef: tuple.0 }
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolCall for getLogicRefCall {
            type Parameters<'a> = ();
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type Return = alloy::sol_types::private::FixedBytes<32>;
            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
            type ReturnToken<'a> = <Self::ReturnTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "getLogicRef()";
            const SELECTOR: [u8; 4] = [203u8, 173u8, 0u8, 229u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                ()
            }
            #[inline]
            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(ret),
                )
            }
            #[inline]
            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
                    .map(|r| {
                        let r: getLogicRefReturn = r.into();
                        r.logicRef
                    })
            }
            #[inline]
            fn abi_decode_returns_validate(
                data: &[u8],
            ) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(|r| {
                        let r: getLogicRefReturn = r.into();
                        r.logicRef
                    })
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Function with signature `getProtocolAdapter()` and selector `0x3db8418c`.
```solidity
function getProtocolAdapter() external view returns (address protocolAdapter);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct getProtocolAdapterCall;
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    ///Container type for the return parameters of the [`getProtocolAdapter()`](getProtocolAdapterCall) function.
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct getProtocolAdapterReturn {
        #[allow(missing_docs)]
        pub protocolAdapter: alloy::sol_types::private::Address,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = ();
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = ();
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<getProtocolAdapterCall>
            for UnderlyingRustTuple<'_> {
                fn from(value: getProtocolAdapterCall) -> Self {
                    ()
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for getProtocolAdapterCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self
                }
            }
        }
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<getProtocolAdapterReturn>
            for UnderlyingRustTuple<'_> {
                fn from(value: getProtocolAdapterReturn) -> Self {
                    (value.protocolAdapter,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for getProtocolAdapterReturn {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { protocolAdapter: tuple.0 }
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolCall for getProtocolAdapterCall {
            type Parameters<'a> = ();
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type Return = alloy::sol_types::private::Address;
            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
            type ReturnToken<'a> = <Self::ReturnTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "getProtocolAdapter()";
            const SELECTOR: [u8; 4] = [61u8, 184u8, 65u8, 140u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                ()
            }
            #[inline]
            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        ret,
                    ),
                )
            }
            #[inline]
            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
                    .map(|r| {
                        let r: getProtocolAdapterReturn = r.into();
                        r.protocolAdapter
                    })
            }
            #[inline]
            fn abi_decode_returns_validate(
                data: &[u8],
            ) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(|r| {
                        let r: getProtocolAdapterReturn = r.into();
                        r.protocolAdapter
                    })
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Function with signature `getVersion()` and selector `0x0d8e6e2c`.
```solidity
function getVersion() external pure returns (bytes32 version);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct getVersionCall;
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    ///Container type for the return parameters of the [`getVersion()`](getVersionCall) function.
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct getVersionReturn {
        #[allow(missing_docs)]
        pub version: alloy::sol_types::private::FixedBytes<32>,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = ();
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = ();
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<getVersionCall> for UnderlyingRustTuple<'_> {
                fn from(value: getVersionCall) -> Self {
                    ()
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getVersionCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self
                }
            }
        }
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<getVersionReturn> for UnderlyingRustTuple<'_> {
                fn from(value: getVersionReturn) -> Self {
                    (value.version,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getVersionReturn {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { version: tuple.0 }
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolCall for getVersionCall {
            type Parameters<'a> = ();
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type Return = alloy::sol_types::private::FixedBytes<32>;
            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
            type ReturnToken<'a> = <Self::ReturnTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "getVersion()";
            const SELECTOR: [u8; 4] = [13u8, 142u8, 110u8, 44u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                ()
            }
            #[inline]
            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(ret),
                )
            }
            #[inline]
            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
                    .map(|r| {
                        let r: getVersionReturn = r.into();
                        r.version
                    })
            }
            #[inline]
            fn abi_decode_returns_validate(
                data: &[u8],
            ) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(|r| {
                        let r: getVersionReturn = r.into();
                        r.version
                    })
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Function with signature `isNullifierContained(bytes32)` and selector `0xc1b0bed7`.
```solidity
function isNullifierContained(bytes32 nullifier) external view returns (bool isContained);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct isNullifierContainedCall {
        #[allow(missing_docs)]
        pub nullifier: alloy::sol_types::private::FixedBytes<32>,
    }
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    ///Container type for the return parameters of the [`isNullifierContained(bytes32)`](isNullifierContainedCall) function.
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct isNullifierContainedReturn {
        #[allow(missing_docs)]
        pub isContained: bool,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<isNullifierContainedCall>
            for UnderlyingRustTuple<'_> {
                fn from(value: isNullifierContainedCall) -> Self {
                    (value.nullifier,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for isNullifierContainedCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { nullifier: tuple.0 }
                }
            }
        }
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (bool,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<isNullifierContainedReturn>
            for UnderlyingRustTuple<'_> {
                fn from(value: isNullifierContainedReturn) -> Self {
                    (value.isContained,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for isNullifierContainedReturn {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { isContained: tuple.0 }
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolCall for isNullifierContainedCall {
            type Parameters<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type Return = bool;
            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
            type ReturnToken<'a> = <Self::ReturnTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "isNullifierContained(bytes32)";
            const SELECTOR: [u8; 4] = [193u8, 176u8, 190u8, 215u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(&self.nullifier),
                )
            }
            #[inline]
            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
                (
                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
                        ret,
                    ),
                )
            }
            #[inline]
            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
                    .map(|r| {
                        let r: isNullifierContainedReturn = r.into();
                        r.isContained
                    })
            }
            #[inline]
            fn abi_decode_returns_validate(
                data: &[u8],
            ) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(|r| {
                        let r: isNullifierContainedReturn = r.into();
                        r.isContained
                    })
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Function with signature `nullifierAtIndex(uint256)` and selector `0x9ad91d4c`.
```solidity
function nullifierAtIndex(uint256 index) external view returns (bytes32 nullifier);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct nullifierAtIndexCall {
        #[allow(missing_docs)]
        pub index: alloy::sol_types::private::primitives::aliases::U256,
    }
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    ///Container type for the return parameters of the [`nullifierAtIndex(uint256)`](nullifierAtIndexCall) function.
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct nullifierAtIndexReturn {
        #[allow(missing_docs)]
        pub nullifier: alloy::sol_types::private::FixedBytes<32>,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (
                alloy::sol_types::private::primitives::aliases::U256,
            );
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<nullifierAtIndexCall>
            for UnderlyingRustTuple<'_> {
                fn from(value: nullifierAtIndexCall) -> Self {
                    (value.index,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for nullifierAtIndexCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { index: tuple.0 }
                }
            }
        }
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<nullifierAtIndexReturn>
            for UnderlyingRustTuple<'_> {
                fn from(value: nullifierAtIndexReturn) -> Self {
                    (value.nullifier,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for nullifierAtIndexReturn {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { nullifier: tuple.0 }
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolCall for nullifierAtIndexCall {
            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type Return = alloy::sol_types::private::FixedBytes<32>;
            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
            type ReturnToken<'a> = <Self::ReturnTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "nullifierAtIndex(uint256)";
            const SELECTOR: [u8; 4] = [154u8, 217u8, 29u8, 76u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Uint<
                        256,
                    > as alloy_sol_types::SolType>::tokenize(&self.index),
                )
            }
            #[inline]
            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
                (
                    <alloy::sol_types::sol_data::FixedBytes<
                        32,
                    > as alloy_sol_types::SolType>::tokenize(ret),
                )
            }
            #[inline]
            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
                    .map(|r| {
                        let r: nullifierAtIndexReturn = r.into();
                        r.nullifier
                    })
            }
            #[inline]
            fn abi_decode_returns_validate(
                data: &[u8],
            ) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(|r| {
                        let r: nullifierAtIndexReturn = r.into();
                        r.nullifier
                    })
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Function with signature `nullifierCount()` and selector `0x40f34d42`.
```solidity
function nullifierCount() external view returns (uint256 count);
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct nullifierCountCall;
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    ///Container type for the return parameters of the [`nullifierCount()`](nullifierCountCall) function.
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct nullifierCountReturn {
        #[allow(missing_docs)]
        pub count: alloy::sol_types::private::primitives::aliases::U256,
    }
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = ();
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = ();
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<nullifierCountCall> for UnderlyingRustTuple<'_> {
                fn from(value: nullifierCountCall) -> Self {
                    ()
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>> for nullifierCountCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self
                }
            }
        }
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (
                alloy::sol_types::private::primitives::aliases::U256,
            );
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<nullifierCountReturn>
            for UnderlyingRustTuple<'_> {
                fn from(value: nullifierCountReturn) -> Self {
                    (value.count,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for nullifierCountReturn {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self { count: tuple.0 }
                }
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolCall for nullifierCountCall {
            type Parameters<'a> = ();
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type Return = alloy::sol_types::private::primitives::aliases::U256;
            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
            type ReturnToken<'a> = <Self::ReturnTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "nullifierCount()";
            const SELECTOR: [u8; 4] = [64u8, 243u8, 77u8, 66u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                ()
            }
            #[inline]
            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
                (
                    <alloy::sol_types::sol_data::Uint<
                        256,
                    > as alloy_sol_types::SolType>::tokenize(ret),
                )
            }
            #[inline]
            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
                    .map(|r| {
                        let r: nullifierCountReturn = r.into();
                        r.count
                    })
            }
            #[inline]
            fn abi_decode_returns_validate(
                data: &[u8],
            ) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(|r| {
                        let r: nullifierCountReturn = r.into();
                        r.count
                    })
            }
        }
    };
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Default, Debug, PartialEq, Eq, Hash)]
    /**Function with signature `setEmergencyCaller(address)` and selector `0xe17eec62`.
```solidity
function setEmergencyCaller(address newEmergencyCaller) external;
```*/
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct setEmergencyCallerCall {
        #[allow(missing_docs)]
        pub newEmergencyCaller: alloy::sol_types::private::Address,
    }
    ///Container type for the return parameters of the [`setEmergencyCaller(address)`](setEmergencyCallerCall) function.
    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
    #[derive(Clone)]
    pub struct setEmergencyCallerReturn {}
    #[allow(
        non_camel_case_types,
        non_snake_case,
        clippy::pub_underscore_fields,
        clippy::style
    )]
    const _: () = {
        use alloy::sol_types as alloy_sol_types;
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<setEmergencyCallerCall>
            for UnderlyingRustTuple<'_> {
                fn from(value: setEmergencyCallerCall) -> Self {
                    (value.newEmergencyCaller,)
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for setEmergencyCallerCall {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self {
                        newEmergencyCaller: tuple.0,
                    }
                }
            }
        }
        {
            #[doc(hidden)]
            #[allow(dead_code)]
            type UnderlyingSolTuple<'a> = ();
            #[doc(hidden)]
            type UnderlyingRustTuple<'a> = ();
            #[cfg(test)]
            #[allow(dead_code, unreachable_patterns)]
            fn _type_assertion(
                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
            ) {
                match _t {
                    alloy_sol_types::private::AssertTypeEq::<
                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
                    >(_) => {}
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<setEmergencyCallerReturn>
            for UnderlyingRustTuple<'_> {
                fn from(value: setEmergencyCallerReturn) -> Self {
                    ()
                }
            }
            #[automatically_derived]
            #[doc(hidden)]
            impl ::core::convert::From<UnderlyingRustTuple<'_>>
            for setEmergencyCallerReturn {
                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
                    Self {}
                }
            }
        }
        impl setEmergencyCallerReturn {
            fn _tokenize(
                &self,
            ) -> <setEmergencyCallerCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
                ()
            }
        }
        #[automatically_derived]
        impl alloy_sol_types::SolCall for setEmergencyCallerCall {
            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
            type Token<'a> = <Self::Parameters<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            type Return = setEmergencyCallerReturn;
            type ReturnTuple<'a> = ();
            type ReturnToken<'a> = <Self::ReturnTuple<
                'a,
            > as alloy_sol_types::SolType>::Token<'a>;
            const SIGNATURE: &'static str = "setEmergencyCaller(address)";
            const SELECTOR: [u8; 4] = [225u8, 126u8, 236u8, 98u8];
            #[inline]
            fn new<'a>(
                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
            ) -> Self {
                tuple.into()
            }
            #[inline]
            fn tokenize(&self) -> Self::Token<'_> {
                (
                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
                        &self.newEmergencyCaller,
                    ),
                )
            }
            #[inline]
            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
                setEmergencyCallerReturn::_tokenize(ret)
            }
            #[inline]
            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
                    .map(Into::into)
            }
            #[inline]
            fn abi_decode_returns_validate(
                data: &[u8],
            ) -> alloy_sol_types::Result<Self::Return> {
                <Self::ReturnTuple<
                    '_,
                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
                    .map(Into::into)
            }
        }
    };
    ///Container for all the [`ERC20ForwarderV3`](self) function calls.
    #[derive(Clone)]
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive()]
    pub enum ERC20ForwarderV3Calls {
        #[allow(missing_docs)]
        forwardCall(forwardCallCall),
        #[allow(missing_docs)]
        forwardEmergencyCall(forwardEmergencyCallCall),
        #[allow(missing_docs)]
        getEmergencyCaller(getEmergencyCallerCall),
        #[allow(missing_docs)]
        getLogicRef(getLogicRefCall),
        #[allow(missing_docs)]
        getProtocolAdapter(getProtocolAdapterCall),
        #[allow(missing_docs)]
        getVersion(getVersionCall),
        #[allow(missing_docs)]
        isNullifierContained(isNullifierContainedCall),
        #[allow(missing_docs)]
        nullifierAtIndex(nullifierAtIndexCall),
        #[allow(missing_docs)]
        nullifierCount(nullifierCountCall),
        #[allow(missing_docs)]
        setEmergencyCaller(setEmergencyCallerCall),
    }
    impl ERC20ForwarderV3Calls {
        /// All the selectors of this enum.
        ///
        /// Note that the selectors might not be in the same order as the variants.
        /// No guarantees are made about the order of the selectors.
        ///
        /// Prefer using `SolInterface` methods instead.
        pub const SELECTORS: &'static [[u8; 4usize]] = &[
            [13u8, 142u8, 110u8, 44u8],
            [51u8, 168u8, 146u8, 3u8],
            [61u8, 184u8, 65u8, 140u8],
            [64u8, 243u8, 77u8, 66u8],
            [154u8, 217u8, 29u8, 76u8],
            [167u8, 247u8, 235u8, 213u8],
            [191u8, 168u8, 248u8, 41u8],
            [193u8, 176u8, 190u8, 215u8],
            [203u8, 173u8, 0u8, 229u8],
            [225u8, 126u8, 236u8, 98u8],
        ];
        /// The names of the variants in the same order as `SELECTORS`.
        pub const VARIANT_NAMES: &'static [&'static str] = &[
            ::core::stringify!(getVersion),
            ::core::stringify!(forwardCall),
            ::core::stringify!(getProtocolAdapter),
            ::core::stringify!(nullifierCount),
            ::core::stringify!(nullifierAtIndex),
            ::core::stringify!(getEmergencyCaller),
            ::core::stringify!(forwardEmergencyCall),
            ::core::stringify!(isNullifierContained),
            ::core::stringify!(getLogicRef),
            ::core::stringify!(setEmergencyCaller),
        ];
        /// The signatures in the same order as `SELECTORS`.
        pub const SIGNATURES: &'static [&'static str] = &[
            <getVersionCall as alloy_sol_types::SolCall>::SIGNATURE,
            <forwardCallCall as alloy_sol_types::SolCall>::SIGNATURE,
            <getProtocolAdapterCall as alloy_sol_types::SolCall>::SIGNATURE,
            <nullifierCountCall as alloy_sol_types::SolCall>::SIGNATURE,
            <nullifierAtIndexCall as alloy_sol_types::SolCall>::SIGNATURE,
            <getEmergencyCallerCall as alloy_sol_types::SolCall>::SIGNATURE,
            <forwardEmergencyCallCall as alloy_sol_types::SolCall>::SIGNATURE,
            <isNullifierContainedCall as alloy_sol_types::SolCall>::SIGNATURE,
            <getLogicRefCall as alloy_sol_types::SolCall>::SIGNATURE,
            <setEmergencyCallerCall as alloy_sol_types::SolCall>::SIGNATURE,
        ];
        /// Returns the signature for the given selector, if known.
        #[inline]
        pub fn signature_by_selector(
            selector: [u8; 4usize],
        ) -> ::core::option::Option<&'static str> {
            match Self::SELECTORS.binary_search(&selector) {
                ::core::result::Result::Ok(idx) => {
                    ::core::option::Option::Some(Self::SIGNATURES[idx])
                }
                ::core::result::Result::Err(_) => ::core::option::Option::None,
            }
        }
        /// Returns the enum variant name for the given selector, if known.
        #[inline]
        pub fn name_by_selector(
            selector: [u8; 4usize],
        ) -> ::core::option::Option<&'static str> {
            let sig = Self::signature_by_selector(selector)?;
            sig.split_once('(').map(|(name, _)| name)
        }
    }
    #[automatically_derived]
    impl alloy_sol_types::SolInterface for ERC20ForwarderV3Calls {
        const NAME: &'static str = "ERC20ForwarderV3Calls";
        const MIN_DATA_LENGTH: usize = 0usize;
        const COUNT: usize = 10usize;
        #[inline]
        fn selector(&self) -> [u8; 4] {
            match self {
                Self::forwardCall(_) => {
                    <forwardCallCall as alloy_sol_types::SolCall>::SELECTOR
                }
                Self::forwardEmergencyCall(_) => {
                    <forwardEmergencyCallCall as alloy_sol_types::SolCall>::SELECTOR
                }
                Self::getEmergencyCaller(_) => {
                    <getEmergencyCallerCall as alloy_sol_types::SolCall>::SELECTOR
                }
                Self::getLogicRef(_) => {
                    <getLogicRefCall as alloy_sol_types::SolCall>::SELECTOR
                }
                Self::getProtocolAdapter(_) => {
                    <getProtocolAdapterCall as alloy_sol_types::SolCall>::SELECTOR
                }
                Self::getVersion(_) => {
                    <getVersionCall as alloy_sol_types::SolCall>::SELECTOR
                }
                Self::isNullifierContained(_) => {
                    <isNullifierContainedCall as alloy_sol_types::SolCall>::SELECTOR
                }
                Self::nullifierAtIndex(_) => {
                    <nullifierAtIndexCall as alloy_sol_types::SolCall>::SELECTOR
                }
                Self::nullifierCount(_) => {
                    <nullifierCountCall as alloy_sol_types::SolCall>::SELECTOR
                }
                Self::setEmergencyCaller(_) => {
                    <setEmergencyCallerCall as alloy_sol_types::SolCall>::SELECTOR
                }
            }
        }
        #[inline]
        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
            Self::SELECTORS.get(i).copied()
        }
        #[inline]
        fn valid_selector(selector: [u8; 4]) -> bool {
            Self::SELECTORS.binary_search(&selector).is_ok()
        }
        #[inline]
        #[allow(non_snake_case)]
        fn abi_decode_raw(
            selector: [u8; 4],
            data: &[u8],
        ) -> alloy_sol_types::Result<Self> {
            static DECODE_SHIMS: &[fn(
                &[u8],
            ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls>] = &[
                {
                    fn getVersion(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <getVersionCall as alloy_sol_types::SolCall>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::getVersion)
                    }
                    getVersion
                },
                {
                    fn forwardCall(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <forwardCallCall as alloy_sol_types::SolCall>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::forwardCall)
                    }
                    forwardCall
                },
                {
                    fn getProtocolAdapter(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <getProtocolAdapterCall as alloy_sol_types::SolCall>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::getProtocolAdapter)
                    }
                    getProtocolAdapter
                },
                {
                    fn nullifierCount(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <nullifierCountCall as alloy_sol_types::SolCall>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::nullifierCount)
                    }
                    nullifierCount
                },
                {
                    fn nullifierAtIndex(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <nullifierAtIndexCall as alloy_sol_types::SolCall>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::nullifierAtIndex)
                    }
                    nullifierAtIndex
                },
                {
                    fn getEmergencyCaller(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <getEmergencyCallerCall as alloy_sol_types::SolCall>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::getEmergencyCaller)
                    }
                    getEmergencyCaller
                },
                {
                    fn forwardEmergencyCall(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <forwardEmergencyCallCall as alloy_sol_types::SolCall>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::forwardEmergencyCall)
                    }
                    forwardEmergencyCall
                },
                {
                    fn isNullifierContained(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <isNullifierContainedCall as alloy_sol_types::SolCall>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::isNullifierContained)
                    }
                    isNullifierContained
                },
                {
                    fn getLogicRef(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <getLogicRefCall as alloy_sol_types::SolCall>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::getLogicRef)
                    }
                    getLogicRef
                },
                {
                    fn setEmergencyCaller(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <setEmergencyCallerCall as alloy_sol_types::SolCall>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::setEmergencyCaller)
                    }
                    setEmergencyCaller
                },
            ];
            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
                return Err(
                    alloy_sol_types::Error::unknown_selector(
                        <Self as alloy_sol_types::SolInterface>::NAME,
                        selector,
                    ),
                );
            };
            DECODE_SHIMS[idx](data)
        }
        #[inline]
        #[allow(non_snake_case)]
        fn abi_decode_raw_validate(
            selector: [u8; 4],
            data: &[u8],
        ) -> alloy_sol_types::Result<Self> {
            static DECODE_VALIDATE_SHIMS: &[fn(
                &[u8],
            ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls>] = &[
                {
                    fn getVersion(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <getVersionCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::getVersion)
                    }
                    getVersion
                },
                {
                    fn forwardCall(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <forwardCallCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::forwardCall)
                    }
                    forwardCall
                },
                {
                    fn getProtocolAdapter(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <getProtocolAdapterCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::getProtocolAdapter)
                    }
                    getProtocolAdapter
                },
                {
                    fn nullifierCount(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <nullifierCountCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::nullifierCount)
                    }
                    nullifierCount
                },
                {
                    fn nullifierAtIndex(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <nullifierAtIndexCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::nullifierAtIndex)
                    }
                    nullifierAtIndex
                },
                {
                    fn getEmergencyCaller(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <getEmergencyCallerCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::getEmergencyCaller)
                    }
                    getEmergencyCaller
                },
                {
                    fn forwardEmergencyCall(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <forwardEmergencyCallCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::forwardEmergencyCall)
                    }
                    forwardEmergencyCall
                },
                {
                    fn isNullifierContained(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <isNullifierContainedCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::isNullifierContained)
                    }
                    isNullifierContained
                },
                {
                    fn getLogicRef(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <getLogicRefCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::getLogicRef)
                    }
                    getLogicRef
                },
                {
                    fn setEmergencyCaller(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Calls> {
                        <setEmergencyCallerCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Calls::setEmergencyCaller)
                    }
                    setEmergencyCaller
                },
            ];
            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
                return Err(
                    alloy_sol_types::Error::unknown_selector(
                        <Self as alloy_sol_types::SolInterface>::NAME,
                        selector,
                    ),
                );
            };
            DECODE_VALIDATE_SHIMS[idx](data)
        }
        #[inline]
        fn abi_encoded_size(&self) -> usize {
            match self {
                Self::forwardCall(inner) => {
                    <forwardCallCall as alloy_sol_types::SolCall>::abi_encoded_size(
                        inner,
                    )
                }
                Self::forwardEmergencyCall(inner) => {
                    <forwardEmergencyCallCall as alloy_sol_types::SolCall>::abi_encoded_size(
                        inner,
                    )
                }
                Self::getEmergencyCaller(inner) => {
                    <getEmergencyCallerCall as alloy_sol_types::SolCall>::abi_encoded_size(
                        inner,
                    )
                }
                Self::getLogicRef(inner) => {
                    <getLogicRefCall as alloy_sol_types::SolCall>::abi_encoded_size(
                        inner,
                    )
                }
                Self::getProtocolAdapter(inner) => {
                    <getProtocolAdapterCall as alloy_sol_types::SolCall>::abi_encoded_size(
                        inner,
                    )
                }
                Self::getVersion(inner) => {
                    <getVersionCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
                }
                Self::isNullifierContained(inner) => {
                    <isNullifierContainedCall as alloy_sol_types::SolCall>::abi_encoded_size(
                        inner,
                    )
                }
                Self::nullifierAtIndex(inner) => {
                    <nullifierAtIndexCall as alloy_sol_types::SolCall>::abi_encoded_size(
                        inner,
                    )
                }
                Self::nullifierCount(inner) => {
                    <nullifierCountCall as alloy_sol_types::SolCall>::abi_encoded_size(
                        inner,
                    )
                }
                Self::setEmergencyCaller(inner) => {
                    <setEmergencyCallerCall as alloy_sol_types::SolCall>::abi_encoded_size(
                        inner,
                    )
                }
            }
        }
        #[inline]
        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
            match self {
                Self::forwardCall(inner) => {
                    <forwardCallCall as alloy_sol_types::SolCall>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::forwardEmergencyCall(inner) => {
                    <forwardEmergencyCallCall as alloy_sol_types::SolCall>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::getEmergencyCaller(inner) => {
                    <getEmergencyCallerCall as alloy_sol_types::SolCall>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::getLogicRef(inner) => {
                    <getLogicRefCall as alloy_sol_types::SolCall>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::getProtocolAdapter(inner) => {
                    <getProtocolAdapterCall as alloy_sol_types::SolCall>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::getVersion(inner) => {
                    <getVersionCall as alloy_sol_types::SolCall>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::isNullifierContained(inner) => {
                    <isNullifierContainedCall as alloy_sol_types::SolCall>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::nullifierAtIndex(inner) => {
                    <nullifierAtIndexCall as alloy_sol_types::SolCall>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::nullifierCount(inner) => {
                    <nullifierCountCall as alloy_sol_types::SolCall>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::setEmergencyCaller(inner) => {
                    <setEmergencyCallerCall as alloy_sol_types::SolCall>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
            }
        }
    }
    ///Container for all the [`ERC20ForwarderV3`](self) custom errors.
    #[derive(Clone)]
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub enum ERC20ForwarderV3Errors {
        #[allow(missing_docs)]
        BalanceMismatch(BalanceMismatch),
        #[allow(missing_docs)]
        EmergencyCallerAlreadySet(EmergencyCallerAlreadySet),
        #[allow(missing_docs)]
        EmergencyCallerNotSet(EmergencyCallerNotSet),
        #[allow(missing_docs)]
        InvalidForwarderV1(InvalidForwarderV1),
        #[allow(missing_docs)]
        InvalidForwarderV2(InvalidForwarderV2),
        #[allow(missing_docs)]
        InvalidInputLength(InvalidInputLength),
        #[allow(missing_docs)]
        InvalidMigrationCommitmentTreeRootV1(InvalidMigrationCommitmentTreeRootV1),
        #[allow(missing_docs)]
        InvalidMigrationCommitmentTreeRootV2(InvalidMigrationCommitmentTreeRootV2),
        #[allow(missing_docs)]
        InvalidMigrationLogicRefV1(InvalidMigrationLogicRefV1),
        #[allow(missing_docs)]
        InvalidMigrationLogicRefV2(InvalidMigrationLogicRefV2),
        #[allow(missing_docs)]
        PreExistingNullifier(PreExistingNullifier),
        #[allow(missing_docs)]
        ProtocolAdapterNotStopped(ProtocolAdapterNotStopped),
        #[allow(missing_docs)]
        ReentrancyGuardReentrantCall(ReentrancyGuardReentrantCall),
        #[allow(missing_docs)]
        ResourceAlreadyConsumed(ResourceAlreadyConsumed),
        #[allow(missing_docs)]
        SafeERC20FailedOperation(SafeERC20FailedOperation),
        #[allow(missing_docs)]
        UnauthorizedCaller(UnauthorizedCaller),
        #[allow(missing_docs)]
        UnauthorizedLogicRef(UnauthorizedLogicRef),
        #[allow(missing_docs)]
        UnstoppedProtocolAdapterV1(UnstoppedProtocolAdapterV1),
        #[allow(missing_docs)]
        UnstoppedProtocolAdapterV2(UnstoppedProtocolAdapterV2),
        #[allow(missing_docs)]
        ZeroNotAllowed(ZeroNotAllowed),
    }
    impl ERC20ForwarderV3Errors {
        /// All the selectors of this enum.
        ///
        /// Note that the selectors might not be in the same order as the variants.
        /// No guarantees are made about the order of the selectors.
        ///
        /// Prefer using `SolInterface` methods instead.
        pub const SELECTORS: &'static [[u8; 4usize]] = &[
            [7u8, 240u8, 226u8, 221u8],
            [17u8, 190u8, 168u8, 116u8],
            [48u8, 42u8, 202u8, 94u8],
            [57u8, 169u8, 64u8, 197u8],
            [62u8, 229u8, 174u8, 181u8],
            [65u8, 127u8, 212u8, 170u8],
            [82u8, 116u8, 175u8, 231u8],
            [83u8, 109u8, 217u8, 239u8],
            [87u8, 65u8, 67u8, 95u8],
            [96u8, 164u8, 161u8, 46u8],
            [110u8, 101u8, 237u8, 132u8],
            [129u8, 96u8, 228u8, 187u8],
            [169u8, 112u8, 133u8, 171u8],
            [172u8, 94u8, 2u8, 33u8],
            [205u8, 106u8, 136u8, 48u8],
            [207u8, 75u8, 78u8, 46u8],
            [227u8, 191u8, 15u8, 207u8],
            [233u8, 42u8, 252u8, 19u8],
            [246u8, 122u8, 191u8, 174u8],
            [254u8, 64u8, 176u8, 117u8],
        ];
        /// The names of the variants in the same order as `SELECTORS`.
        pub const VARIANT_NAMES: &'static [&'static str] = &[
            ::core::stringify!(InvalidMigrationLogicRefV1),
            ::core::stringify!(InvalidForwarderV1),
            ::core::stringify!(InvalidMigrationCommitmentTreeRootV1),
            ::core::stringify!(PreExistingNullifier),
            ::core::stringify!(ReentrancyGuardReentrantCall),
            ::core::stringify!(InvalidMigrationLogicRefV2),
            ::core::stringify!(SafeERC20FailedOperation),
            ::core::stringify!(UnauthorizedCaller),
            ::core::stringify!(EmergencyCallerAlreadySet),
            ::core::stringify!(ResourceAlreadyConsumed),
            ::core::stringify!(BalanceMismatch),
            ::core::stringify!(EmergencyCallerNotSet),
            ::core::stringify!(UnauthorizedLogicRef),
            ::core::stringify!(UnstoppedProtocolAdapterV2),
            ::core::stringify!(InvalidForwarderV2),
            ::core::stringify!(ZeroNotAllowed),
            ::core::stringify!(UnstoppedProtocolAdapterV1),
            ::core::stringify!(InvalidInputLength),
            ::core::stringify!(InvalidMigrationCommitmentTreeRootV2),
            ::core::stringify!(ProtocolAdapterNotStopped),
        ];
        /// The signatures in the same order as `SELECTORS`.
        pub const SIGNATURES: &'static [&'static str] = &[
            <InvalidMigrationLogicRefV1 as alloy_sol_types::SolError>::SIGNATURE,
            <InvalidForwarderV1 as alloy_sol_types::SolError>::SIGNATURE,
            <InvalidMigrationCommitmentTreeRootV1 as alloy_sol_types::SolError>::SIGNATURE,
            <PreExistingNullifier as alloy_sol_types::SolError>::SIGNATURE,
            <ReentrancyGuardReentrantCall as alloy_sol_types::SolError>::SIGNATURE,
            <InvalidMigrationLogicRefV2 as alloy_sol_types::SolError>::SIGNATURE,
            <SafeERC20FailedOperation as alloy_sol_types::SolError>::SIGNATURE,
            <UnauthorizedCaller as alloy_sol_types::SolError>::SIGNATURE,
            <EmergencyCallerAlreadySet as alloy_sol_types::SolError>::SIGNATURE,
            <ResourceAlreadyConsumed as alloy_sol_types::SolError>::SIGNATURE,
            <BalanceMismatch as alloy_sol_types::SolError>::SIGNATURE,
            <EmergencyCallerNotSet as alloy_sol_types::SolError>::SIGNATURE,
            <UnauthorizedLogicRef as alloy_sol_types::SolError>::SIGNATURE,
            <UnstoppedProtocolAdapterV2 as alloy_sol_types::SolError>::SIGNATURE,
            <InvalidForwarderV2 as alloy_sol_types::SolError>::SIGNATURE,
            <ZeroNotAllowed as alloy_sol_types::SolError>::SIGNATURE,
            <UnstoppedProtocolAdapterV1 as alloy_sol_types::SolError>::SIGNATURE,
            <InvalidInputLength as alloy_sol_types::SolError>::SIGNATURE,
            <InvalidMigrationCommitmentTreeRootV2 as alloy_sol_types::SolError>::SIGNATURE,
            <ProtocolAdapterNotStopped as alloy_sol_types::SolError>::SIGNATURE,
        ];
        /// Returns the signature for the given selector, if known.
        #[inline]
        pub fn signature_by_selector(
            selector: [u8; 4usize],
        ) -> ::core::option::Option<&'static str> {
            match Self::SELECTORS.binary_search(&selector) {
                ::core::result::Result::Ok(idx) => {
                    ::core::option::Option::Some(Self::SIGNATURES[idx])
                }
                ::core::result::Result::Err(_) => ::core::option::Option::None,
            }
        }
        /// Returns the enum variant name for the given selector, if known.
        #[inline]
        pub fn name_by_selector(
            selector: [u8; 4usize],
        ) -> ::core::option::Option<&'static str> {
            let sig = Self::signature_by_selector(selector)?;
            sig.split_once('(').map(|(name, _)| name)
        }
    }
    #[automatically_derived]
    impl alloy_sol_types::SolInterface for ERC20ForwarderV3Errors {
        const NAME: &'static str = "ERC20ForwarderV3Errors";
        const MIN_DATA_LENGTH: usize = 0usize;
        const COUNT: usize = 20usize;
        #[inline]
        fn selector(&self) -> [u8; 4] {
            match self {
                Self::BalanceMismatch(_) => {
                    <BalanceMismatch as alloy_sol_types::SolError>::SELECTOR
                }
                Self::EmergencyCallerAlreadySet(_) => {
                    <EmergencyCallerAlreadySet as alloy_sol_types::SolError>::SELECTOR
                }
                Self::EmergencyCallerNotSet(_) => {
                    <EmergencyCallerNotSet as alloy_sol_types::SolError>::SELECTOR
                }
                Self::InvalidForwarderV1(_) => {
                    <InvalidForwarderV1 as alloy_sol_types::SolError>::SELECTOR
                }
                Self::InvalidForwarderV2(_) => {
                    <InvalidForwarderV2 as alloy_sol_types::SolError>::SELECTOR
                }
                Self::InvalidInputLength(_) => {
                    <InvalidInputLength as alloy_sol_types::SolError>::SELECTOR
                }
                Self::InvalidMigrationCommitmentTreeRootV1(_) => {
                    <InvalidMigrationCommitmentTreeRootV1 as alloy_sol_types::SolError>::SELECTOR
                }
                Self::InvalidMigrationCommitmentTreeRootV2(_) => {
                    <InvalidMigrationCommitmentTreeRootV2 as alloy_sol_types::SolError>::SELECTOR
                }
                Self::InvalidMigrationLogicRefV1(_) => {
                    <InvalidMigrationLogicRefV1 as alloy_sol_types::SolError>::SELECTOR
                }
                Self::InvalidMigrationLogicRefV2(_) => {
                    <InvalidMigrationLogicRefV2 as alloy_sol_types::SolError>::SELECTOR
                }
                Self::PreExistingNullifier(_) => {
                    <PreExistingNullifier as alloy_sol_types::SolError>::SELECTOR
                }
                Self::ProtocolAdapterNotStopped(_) => {
                    <ProtocolAdapterNotStopped as alloy_sol_types::SolError>::SELECTOR
                }
                Self::ReentrancyGuardReentrantCall(_) => {
                    <ReentrancyGuardReentrantCall as alloy_sol_types::SolError>::SELECTOR
                }
                Self::ResourceAlreadyConsumed(_) => {
                    <ResourceAlreadyConsumed as alloy_sol_types::SolError>::SELECTOR
                }
                Self::SafeERC20FailedOperation(_) => {
                    <SafeERC20FailedOperation as alloy_sol_types::SolError>::SELECTOR
                }
                Self::UnauthorizedCaller(_) => {
                    <UnauthorizedCaller as alloy_sol_types::SolError>::SELECTOR
                }
                Self::UnauthorizedLogicRef(_) => {
                    <UnauthorizedLogicRef as alloy_sol_types::SolError>::SELECTOR
                }
                Self::UnstoppedProtocolAdapterV1(_) => {
                    <UnstoppedProtocolAdapterV1 as alloy_sol_types::SolError>::SELECTOR
                }
                Self::UnstoppedProtocolAdapterV2(_) => {
                    <UnstoppedProtocolAdapterV2 as alloy_sol_types::SolError>::SELECTOR
                }
                Self::ZeroNotAllowed(_) => {
                    <ZeroNotAllowed as alloy_sol_types::SolError>::SELECTOR
                }
            }
        }
        #[inline]
        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
            Self::SELECTORS.get(i).copied()
        }
        #[inline]
        fn valid_selector(selector: [u8; 4]) -> bool {
            Self::SELECTORS.binary_search(&selector).is_ok()
        }
        #[inline]
        #[allow(non_snake_case)]
        fn abi_decode_raw(
            selector: [u8; 4],
            data: &[u8],
        ) -> alloy_sol_types::Result<Self> {
            static DECODE_SHIMS: &[fn(
                &[u8],
            ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors>] = &[
                {
                    fn InvalidMigrationLogicRefV1(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidMigrationLogicRefV1 as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::InvalidMigrationLogicRefV1)
                    }
                    InvalidMigrationLogicRefV1
                },
                {
                    fn InvalidForwarderV1(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidForwarderV1 as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::InvalidForwarderV1)
                    }
                    InvalidForwarderV1
                },
                {
                    fn InvalidMigrationCommitmentTreeRootV1(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidMigrationCommitmentTreeRootV1 as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(
                                ERC20ForwarderV3Errors::InvalidMigrationCommitmentTreeRootV1,
                            )
                    }
                    InvalidMigrationCommitmentTreeRootV1
                },
                {
                    fn PreExistingNullifier(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <PreExistingNullifier as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::PreExistingNullifier)
                    }
                    PreExistingNullifier
                },
                {
                    fn ReentrancyGuardReentrantCall(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <ReentrancyGuardReentrantCall as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::ReentrancyGuardReentrantCall)
                    }
                    ReentrancyGuardReentrantCall
                },
                {
                    fn InvalidMigrationLogicRefV2(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidMigrationLogicRefV2 as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::InvalidMigrationLogicRefV2)
                    }
                    InvalidMigrationLogicRefV2
                },
                {
                    fn SafeERC20FailedOperation(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <SafeERC20FailedOperation as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::SafeERC20FailedOperation)
                    }
                    SafeERC20FailedOperation
                },
                {
                    fn UnauthorizedCaller(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <UnauthorizedCaller as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::UnauthorizedCaller)
                    }
                    UnauthorizedCaller
                },
                {
                    fn EmergencyCallerAlreadySet(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <EmergencyCallerAlreadySet as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::EmergencyCallerAlreadySet)
                    }
                    EmergencyCallerAlreadySet
                },
                {
                    fn ResourceAlreadyConsumed(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <ResourceAlreadyConsumed as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::ResourceAlreadyConsumed)
                    }
                    ResourceAlreadyConsumed
                },
                {
                    fn BalanceMismatch(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <BalanceMismatch as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::BalanceMismatch)
                    }
                    BalanceMismatch
                },
                {
                    fn EmergencyCallerNotSet(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <EmergencyCallerNotSet as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::EmergencyCallerNotSet)
                    }
                    EmergencyCallerNotSet
                },
                {
                    fn UnauthorizedLogicRef(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <UnauthorizedLogicRef as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::UnauthorizedLogicRef)
                    }
                    UnauthorizedLogicRef
                },
                {
                    fn UnstoppedProtocolAdapterV2(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <UnstoppedProtocolAdapterV2 as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::UnstoppedProtocolAdapterV2)
                    }
                    UnstoppedProtocolAdapterV2
                },
                {
                    fn InvalidForwarderV2(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidForwarderV2 as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::InvalidForwarderV2)
                    }
                    InvalidForwarderV2
                },
                {
                    fn ZeroNotAllowed(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <ZeroNotAllowed as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::ZeroNotAllowed)
                    }
                    ZeroNotAllowed
                },
                {
                    fn UnstoppedProtocolAdapterV1(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <UnstoppedProtocolAdapterV1 as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::UnstoppedProtocolAdapterV1)
                    }
                    UnstoppedProtocolAdapterV1
                },
                {
                    fn InvalidInputLength(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidInputLength as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::InvalidInputLength)
                    }
                    InvalidInputLength
                },
                {
                    fn InvalidMigrationCommitmentTreeRootV2(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidMigrationCommitmentTreeRootV2 as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(
                                ERC20ForwarderV3Errors::InvalidMigrationCommitmentTreeRootV2,
                            )
                    }
                    InvalidMigrationCommitmentTreeRootV2
                },
                {
                    fn ProtocolAdapterNotStopped(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <ProtocolAdapterNotStopped as alloy_sol_types::SolError>::abi_decode_raw(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::ProtocolAdapterNotStopped)
                    }
                    ProtocolAdapterNotStopped
                },
            ];
            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
                return Err(
                    alloy_sol_types::Error::unknown_selector(
                        <Self as alloy_sol_types::SolInterface>::NAME,
                        selector,
                    ),
                );
            };
            DECODE_SHIMS[idx](data)
        }
        #[inline]
        #[allow(non_snake_case)]
        fn abi_decode_raw_validate(
            selector: [u8; 4],
            data: &[u8],
        ) -> alloy_sol_types::Result<Self> {
            static DECODE_VALIDATE_SHIMS: &[fn(
                &[u8],
            ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors>] = &[
                {
                    fn InvalidMigrationLogicRefV1(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidMigrationLogicRefV1 as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::InvalidMigrationLogicRefV1)
                    }
                    InvalidMigrationLogicRefV1
                },
                {
                    fn InvalidForwarderV1(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidForwarderV1 as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::InvalidForwarderV1)
                    }
                    InvalidForwarderV1
                },
                {
                    fn InvalidMigrationCommitmentTreeRootV1(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidMigrationCommitmentTreeRootV1 as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(
                                ERC20ForwarderV3Errors::InvalidMigrationCommitmentTreeRootV1,
                            )
                    }
                    InvalidMigrationCommitmentTreeRootV1
                },
                {
                    fn PreExistingNullifier(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <PreExistingNullifier as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::PreExistingNullifier)
                    }
                    PreExistingNullifier
                },
                {
                    fn ReentrancyGuardReentrantCall(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <ReentrancyGuardReentrantCall as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::ReentrancyGuardReentrantCall)
                    }
                    ReentrancyGuardReentrantCall
                },
                {
                    fn InvalidMigrationLogicRefV2(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidMigrationLogicRefV2 as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::InvalidMigrationLogicRefV2)
                    }
                    InvalidMigrationLogicRefV2
                },
                {
                    fn SafeERC20FailedOperation(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <SafeERC20FailedOperation as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::SafeERC20FailedOperation)
                    }
                    SafeERC20FailedOperation
                },
                {
                    fn UnauthorizedCaller(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <UnauthorizedCaller as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::UnauthorizedCaller)
                    }
                    UnauthorizedCaller
                },
                {
                    fn EmergencyCallerAlreadySet(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <EmergencyCallerAlreadySet as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::EmergencyCallerAlreadySet)
                    }
                    EmergencyCallerAlreadySet
                },
                {
                    fn ResourceAlreadyConsumed(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <ResourceAlreadyConsumed as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::ResourceAlreadyConsumed)
                    }
                    ResourceAlreadyConsumed
                },
                {
                    fn BalanceMismatch(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <BalanceMismatch as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::BalanceMismatch)
                    }
                    BalanceMismatch
                },
                {
                    fn EmergencyCallerNotSet(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <EmergencyCallerNotSet as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::EmergencyCallerNotSet)
                    }
                    EmergencyCallerNotSet
                },
                {
                    fn UnauthorizedLogicRef(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <UnauthorizedLogicRef as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::UnauthorizedLogicRef)
                    }
                    UnauthorizedLogicRef
                },
                {
                    fn UnstoppedProtocolAdapterV2(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <UnstoppedProtocolAdapterV2 as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::UnstoppedProtocolAdapterV2)
                    }
                    UnstoppedProtocolAdapterV2
                },
                {
                    fn InvalidForwarderV2(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidForwarderV2 as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::InvalidForwarderV2)
                    }
                    InvalidForwarderV2
                },
                {
                    fn ZeroNotAllowed(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <ZeroNotAllowed as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::ZeroNotAllowed)
                    }
                    ZeroNotAllowed
                },
                {
                    fn UnstoppedProtocolAdapterV1(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <UnstoppedProtocolAdapterV1 as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::UnstoppedProtocolAdapterV1)
                    }
                    UnstoppedProtocolAdapterV1
                },
                {
                    fn InvalidInputLength(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidInputLength as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::InvalidInputLength)
                    }
                    InvalidInputLength
                },
                {
                    fn InvalidMigrationCommitmentTreeRootV2(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <InvalidMigrationCommitmentTreeRootV2 as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(
                                ERC20ForwarderV3Errors::InvalidMigrationCommitmentTreeRootV2,
                            )
                    }
                    InvalidMigrationCommitmentTreeRootV2
                },
                {
                    fn ProtocolAdapterNotStopped(
                        data: &[u8],
                    ) -> alloy_sol_types::Result<ERC20ForwarderV3Errors> {
                        <ProtocolAdapterNotStopped as alloy_sol_types::SolError>::abi_decode_raw_validate(
                                data,
                            )
                            .map(ERC20ForwarderV3Errors::ProtocolAdapterNotStopped)
                    }
                    ProtocolAdapterNotStopped
                },
            ];
            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
                return Err(
                    alloy_sol_types::Error::unknown_selector(
                        <Self as alloy_sol_types::SolInterface>::NAME,
                        selector,
                    ),
                );
            };
            DECODE_VALIDATE_SHIMS[idx](data)
        }
        #[inline]
        fn abi_encoded_size(&self) -> usize {
            match self {
                Self::BalanceMismatch(inner) => {
                    <BalanceMismatch as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::EmergencyCallerAlreadySet(inner) => {
                    <EmergencyCallerAlreadySet as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::EmergencyCallerNotSet(inner) => {
                    <EmergencyCallerNotSet as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::InvalidForwarderV1(inner) => {
                    <InvalidForwarderV1 as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::InvalidForwarderV2(inner) => {
                    <InvalidForwarderV2 as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::InvalidInputLength(inner) => {
                    <InvalidInputLength as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::InvalidMigrationCommitmentTreeRootV1(inner) => {
                    <InvalidMigrationCommitmentTreeRootV1 as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::InvalidMigrationCommitmentTreeRootV2(inner) => {
                    <InvalidMigrationCommitmentTreeRootV2 as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::InvalidMigrationLogicRefV1(inner) => {
                    <InvalidMigrationLogicRefV1 as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::InvalidMigrationLogicRefV2(inner) => {
                    <InvalidMigrationLogicRefV2 as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::PreExistingNullifier(inner) => {
                    <PreExistingNullifier as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::ProtocolAdapterNotStopped(inner) => {
                    <ProtocolAdapterNotStopped as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::ReentrancyGuardReentrantCall(inner) => {
                    <ReentrancyGuardReentrantCall as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::ResourceAlreadyConsumed(inner) => {
                    <ResourceAlreadyConsumed as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::SafeERC20FailedOperation(inner) => {
                    <SafeERC20FailedOperation as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::UnauthorizedCaller(inner) => {
                    <UnauthorizedCaller as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::UnauthorizedLogicRef(inner) => {
                    <UnauthorizedLogicRef as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::UnstoppedProtocolAdapterV1(inner) => {
                    <UnstoppedProtocolAdapterV1 as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::UnstoppedProtocolAdapterV2(inner) => {
                    <UnstoppedProtocolAdapterV2 as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
                Self::ZeroNotAllowed(inner) => {
                    <ZeroNotAllowed as alloy_sol_types::SolError>::abi_encoded_size(
                        inner,
                    )
                }
            }
        }
        #[inline]
        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
            match self {
                Self::BalanceMismatch(inner) => {
                    <BalanceMismatch as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::EmergencyCallerAlreadySet(inner) => {
                    <EmergencyCallerAlreadySet as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::EmergencyCallerNotSet(inner) => {
                    <EmergencyCallerNotSet as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::InvalidForwarderV1(inner) => {
                    <InvalidForwarderV1 as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::InvalidForwarderV2(inner) => {
                    <InvalidForwarderV2 as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::InvalidInputLength(inner) => {
                    <InvalidInputLength as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::InvalidMigrationCommitmentTreeRootV1(inner) => {
                    <InvalidMigrationCommitmentTreeRootV1 as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::InvalidMigrationCommitmentTreeRootV2(inner) => {
                    <InvalidMigrationCommitmentTreeRootV2 as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::InvalidMigrationLogicRefV1(inner) => {
                    <InvalidMigrationLogicRefV1 as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::InvalidMigrationLogicRefV2(inner) => {
                    <InvalidMigrationLogicRefV2 as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::PreExistingNullifier(inner) => {
                    <PreExistingNullifier as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::ProtocolAdapterNotStopped(inner) => {
                    <ProtocolAdapterNotStopped as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::ReentrancyGuardReentrantCall(inner) => {
                    <ReentrancyGuardReentrantCall as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::ResourceAlreadyConsumed(inner) => {
                    <ResourceAlreadyConsumed as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::SafeERC20FailedOperation(inner) => {
                    <SafeERC20FailedOperation as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::UnauthorizedCaller(inner) => {
                    <UnauthorizedCaller as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::UnauthorizedLogicRef(inner) => {
                    <UnauthorizedLogicRef as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::UnstoppedProtocolAdapterV1(inner) => {
                    <UnstoppedProtocolAdapterV1 as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::UnstoppedProtocolAdapterV2(inner) => {
                    <UnstoppedProtocolAdapterV2 as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
                Self::ZeroNotAllowed(inner) => {
                    <ZeroNotAllowed as alloy_sol_types::SolError>::abi_encode_raw(
                        inner,
                        out,
                    )
                }
            }
        }
    }
    ///Container for all the [`ERC20ForwarderV3`](self) events.
    #[derive(Clone)]
    #[derive(serde::Serialize, serde::Deserialize)]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub enum ERC20ForwarderV3Events {
        #[allow(missing_docs)]
        Unwrapped(Unwrapped),
        #[allow(missing_docs)]
        Wrapped(Wrapped),
    }
    impl ERC20ForwarderV3Events {
        /// All the selectors of this enum.
        ///
        /// Note that the selectors might not be in the same order as the variants.
        /// No guarantees are made about the order of the selectors.
        ///
        /// Prefer using `SolInterface` methods instead.
        pub const SELECTORS: &'static [[u8; 32usize]] = &[
            [
                145u8, 60u8, 125u8, 221u8, 167u8, 187u8, 46u8, 241u8, 166u8, 73u8, 11u8,
                216u8, 202u8, 18u8, 206u8, 209u8, 174u8, 141u8, 131u8, 46u8, 31u8, 110u8,
                213u8, 89u8, 180u8, 118u8, 106u8, 248u8, 85u8, 165u8, 234u8, 38u8,
            ],
            [
                162u8, 1u8, 44u8, 71u8, 159u8, 224u8, 36u8, 12u8, 80u8, 119u8, 200u8,
                231u8, 57u8, 132u8, 29u8, 228u8, 212u8, 192u8, 230u8, 232u8, 9u8, 246u8,
                81u8, 8u8, 126u8, 207u8, 55u8, 207u8, 196u8, 159u8, 18u8, 101u8,
            ],
        ];
        /// The names of the variants in the same order as `SELECTORS`.
        pub const VARIANT_NAMES: &'static [&'static str] = &[
            ::core::stringify!(Unwrapped),
            ::core::stringify!(Wrapped),
        ];
        /// The signatures in the same order as `SELECTORS`.
        pub const SIGNATURES: &'static [&'static str] = &[
            <Unwrapped as alloy_sol_types::SolEvent>::SIGNATURE,
            <Wrapped as alloy_sol_types::SolEvent>::SIGNATURE,
        ];
        /// Returns the signature for the given selector, if known.
        #[inline]
        pub fn signature_by_selector(
            selector: [u8; 32usize],
        ) -> ::core::option::Option<&'static str> {
            match Self::SELECTORS.binary_search(&selector) {
                ::core::result::Result::Ok(idx) => {
                    ::core::option::Option::Some(Self::SIGNATURES[idx])
                }
                ::core::result::Result::Err(_) => ::core::option::Option::None,
            }
        }
        /// Returns the enum variant name for the given selector, if known.
        #[inline]
        pub fn name_by_selector(
            selector: [u8; 32usize],
        ) -> ::core::option::Option<&'static str> {
            let sig = Self::signature_by_selector(selector)?;
            sig.split_once('(').map(|(name, _)| name)
        }
    }
    #[automatically_derived]
    impl alloy_sol_types::SolEventInterface for ERC20ForwarderV3Events {
        const NAME: &'static str = "ERC20ForwarderV3Events";
        const COUNT: usize = 2usize;
        fn decode_raw_log(
            topics: &[alloy_sol_types::Word],
            data: &[u8],
        ) -> alloy_sol_types::Result<Self> {
            match topics.first().copied() {
                Some(<Unwrapped as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
                    <Unwrapped as alloy_sol_types::SolEvent>::decode_raw_log(
                            topics,
                            data,
                        )
                        .map(Self::Unwrapped)
                }
                Some(<Wrapped as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
                    <Wrapped as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
                        .map(Self::Wrapped)
                }
                _ => {
                    alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog {
                        name: <Self as alloy_sol_types::SolEventInterface>::NAME,
                        log: alloy_sol_types::private::Box::new(
                            alloy_sol_types::private::LogData::new_unchecked(
                                topics.to_vec(),
                                data.to_vec().into(),
                            ),
                        ),
                    })
                }
            }
        }
    }
    #[automatically_derived]
    impl alloy_sol_types::private::IntoLogData for ERC20ForwarderV3Events {
        fn to_log_data(&self) -> alloy_sol_types::private::LogData {
            match self {
                Self::Unwrapped(inner) => {
                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
                }
                Self::Wrapped(inner) => {
                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
                }
            }
        }
        fn into_log_data(self) -> alloy_sol_types::private::LogData {
            match self {
                Self::Unwrapped(inner) => {
                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
                }
                Self::Wrapped(inner) => {
                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
                }
            }
        }
    }
    use alloy::contract as alloy_contract;
    /**Creates a new wrapper around an on-chain [`ERC20ForwarderV3`](self) contract instance.

See the [wrapper's documentation](`ERC20ForwarderV3Instance`) for more details.*/
    #[inline]
    pub const fn new<
        P: alloy_contract::private::Provider<N>,
        N: alloy_contract::private::Network,
    >(
        address: alloy_sol_types::private::Address,
        __provider: P,
    ) -> ERC20ForwarderV3Instance<P, N> {
        ERC20ForwarderV3Instance::<P, N>::new(address, __provider)
    }
    /**Deploys this contract using the given `provider` and constructor arguments, if any.

Returns a new instance of the contract, if the deployment was successful.

For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
    #[inline]
    pub fn deploy<
        P: alloy_contract::private::Provider<N>,
        N: alloy_contract::private::Network,
    >(
        __provider: P,
        protocolAdapterV3: alloy::sol_types::private::Address,
        logicRefV3: alloy::sol_types::private::FixedBytes<32>,
        emergencyCommittee: alloy::sol_types::private::Address,
        erc20ForwarderV1: alloy::sol_types::private::Address,
        erc20ForwarderV2: alloy::sol_types::private::Address,
    ) -> impl ::core::future::Future<
        Output = alloy_contract::Result<ERC20ForwarderV3Instance<P, N>>,
    > {
        ERC20ForwarderV3Instance::<
            P,
            N,
        >::deploy(
            __provider,
            protocolAdapterV3,
            logicRefV3,
            emergencyCommittee,
            erc20ForwarderV1,
            erc20ForwarderV2,
        )
    }
    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
and constructor arguments, if any.

This is a simple wrapper around creating a `RawCallBuilder` with the data set to
the bytecode concatenated with the constructor's ABI-encoded arguments.*/
    #[inline]
    pub fn deploy_builder<
        P: alloy_contract::private::Provider<N>,
        N: alloy_contract::private::Network,
    >(
        __provider: P,
        protocolAdapterV3: alloy::sol_types::private::Address,
        logicRefV3: alloy::sol_types::private::FixedBytes<32>,
        emergencyCommittee: alloy::sol_types::private::Address,
        erc20ForwarderV1: alloy::sol_types::private::Address,
        erc20ForwarderV2: alloy::sol_types::private::Address,
    ) -> alloy_contract::RawCallBuilder<P, N> {
        ERC20ForwarderV3Instance::<
            P,
            N,
        >::deploy_builder(
            __provider,
            protocolAdapterV3,
            logicRefV3,
            emergencyCommittee,
            erc20ForwarderV1,
            erc20ForwarderV2,
        )
    }
    /**A [`ERC20ForwarderV3`](self) instance.

Contains type-safe methods for interacting with an on-chain instance of the
[`ERC20ForwarderV3`](self) contract located at a given `address`, using a given
provider `P`.

If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
documentation on how to provide it), the `deploy` and `deploy_builder` methods can
be used to deploy a new instance of the contract.

See the [module-level documentation](self) for all the available methods.*/
    #[derive(Clone)]
    pub struct ERC20ForwarderV3Instance<P, N = alloy_contract::private::Ethereum> {
        address: alloy_sol_types::private::Address,
        provider: P,
        _network: ::core::marker::PhantomData<N>,
    }
    #[automatically_derived]
    impl<P, N> ::core::fmt::Debug for ERC20ForwarderV3Instance<P, N> {
        #[inline]
        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
            f.debug_tuple("ERC20ForwarderV3Instance").field(&self.address).finish()
        }
    }
    /// Instantiation and getters/setters.
    impl<
        P: alloy_contract::private::Provider<N>,
        N: alloy_contract::private::Network,
    > ERC20ForwarderV3Instance<P, N> {
        /**Creates a new wrapper around an on-chain [`ERC20ForwarderV3`](self) contract instance.

See the [wrapper's documentation](`ERC20ForwarderV3Instance`) for more details.*/
        #[inline]
        pub const fn new(
            address: alloy_sol_types::private::Address,
            __provider: P,
        ) -> Self {
            Self {
                address,
                provider: __provider,
                _network: ::core::marker::PhantomData,
            }
        }
        /**Deploys this contract using the given `provider` and constructor arguments, if any.

Returns a new instance of the contract, if the deployment was successful.

For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
        #[inline]
        pub async fn deploy(
            __provider: P,
            protocolAdapterV3: alloy::sol_types::private::Address,
            logicRefV3: alloy::sol_types::private::FixedBytes<32>,
            emergencyCommittee: alloy::sol_types::private::Address,
            erc20ForwarderV1: alloy::sol_types::private::Address,
            erc20ForwarderV2: alloy::sol_types::private::Address,
        ) -> alloy_contract::Result<ERC20ForwarderV3Instance<P, N>> {
            let call_builder = Self::deploy_builder(
                __provider,
                protocolAdapterV3,
                logicRefV3,
                emergencyCommittee,
                erc20ForwarderV1,
                erc20ForwarderV2,
            );
            let contract_address = call_builder.deploy().await?;
            Ok(Self::new(contract_address, call_builder.provider))
        }
        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
and constructor arguments, if any.

This is a simple wrapper around creating a `RawCallBuilder` with the data set to
the bytecode concatenated with the constructor's ABI-encoded arguments.*/
        #[inline]
        pub fn deploy_builder(
            __provider: P,
            protocolAdapterV3: alloy::sol_types::private::Address,
            logicRefV3: alloy::sol_types::private::FixedBytes<32>,
            emergencyCommittee: alloy::sol_types::private::Address,
            erc20ForwarderV1: alloy::sol_types::private::Address,
            erc20ForwarderV2: alloy::sol_types::private::Address,
        ) -> alloy_contract::RawCallBuilder<P, N> {
            alloy_contract::RawCallBuilder::new_raw_deploy(
                __provider,
                [
                    &BYTECODE[..],
                    &alloy_sol_types::SolConstructor::abi_encode(
                        &constructorCall {
                            protocolAdapterV3,
                            logicRefV3,
                            emergencyCommittee,
                            erc20ForwarderV1,
                            erc20ForwarderV2,
                        },
                    )[..],
                ]
                    .concat()
                    .into(),
            )
        }
        /// Returns a reference to the address.
        #[inline]
        pub const fn address(&self) -> &alloy_sol_types::private::Address {
            &self.address
        }
        /// Sets the address.
        #[inline]
        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
            self.address = address;
        }
        /// Sets the address and returns `self`.
        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
            self.set_address(address);
            self
        }
        /// Returns a reference to the provider.
        #[inline]
        pub const fn provider(&self) -> &P {
            &self.provider
        }
    }
    impl<P: ::core::clone::Clone, N> ERC20ForwarderV3Instance<&P, N> {
        /// Clones the provider and returns a new instance with the cloned provider.
        #[inline]
        pub fn with_cloned_provider(self) -> ERC20ForwarderV3Instance<P, N> {
            ERC20ForwarderV3Instance {
                address: self.address,
                provider: ::core::clone::Clone::clone(&self.provider),
                _network: ::core::marker::PhantomData,
            }
        }
    }
    /// Function calls.
    impl<
        P: alloy_contract::private::Provider<N>,
        N: alloy_contract::private::Network,
    > ERC20ForwarderV3Instance<P, N> {
        /// Creates a new call builder using this contract instance's provider and address.
        ///
        /// Note that the call can be any function call, not just those defined in this
        /// contract. Prefer using the other methods for building type-safe contract calls.
        pub fn call_builder<C: alloy_sol_types::SolCall>(
            &self,
            call: &C,
        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
        }
        ///Creates a new call builder for the [`forwardCall`] function.
        pub fn forwardCall(
            &self,
            logicRef: alloy::sol_types::private::FixedBytes<32>,
            input: alloy::sol_types::private::Bytes,
        ) -> alloy_contract::SolCallBuilder<&P, forwardCallCall, N> {
            self.call_builder(&forwardCallCall { logicRef, input })
        }
        ///Creates a new call builder for the [`forwardEmergencyCall`] function.
        pub fn forwardEmergencyCall(
            &self,
            input: alloy::sol_types::private::Bytes,
        ) -> alloy_contract::SolCallBuilder<&P, forwardEmergencyCallCall, N> {
            self.call_builder(&forwardEmergencyCallCall { input })
        }
        ///Creates a new call builder for the [`getEmergencyCaller`] function.
        pub fn getEmergencyCaller(
            &self,
        ) -> alloy_contract::SolCallBuilder<&P, getEmergencyCallerCall, N> {
            self.call_builder(&getEmergencyCallerCall)
        }
        ///Creates a new call builder for the [`getLogicRef`] function.
        pub fn getLogicRef(
            &self,
        ) -> alloy_contract::SolCallBuilder<&P, getLogicRefCall, N> {
            self.call_builder(&getLogicRefCall)
        }
        ///Creates a new call builder for the [`getProtocolAdapter`] function.
        pub fn getProtocolAdapter(
            &self,
        ) -> alloy_contract::SolCallBuilder<&P, getProtocolAdapterCall, N> {
            self.call_builder(&getProtocolAdapterCall)
        }
        ///Creates a new call builder for the [`getVersion`] function.
        pub fn getVersion(
            &self,
        ) -> alloy_contract::SolCallBuilder<&P, getVersionCall, N> {
            self.call_builder(&getVersionCall)
        }
        ///Creates a new call builder for the [`isNullifierContained`] function.
        pub fn isNullifierContained(
            &self,
            nullifier: alloy::sol_types::private::FixedBytes<32>,
        ) -> alloy_contract::SolCallBuilder<&P, isNullifierContainedCall, N> {
            self.call_builder(
                &isNullifierContainedCall {
                    nullifier,
                },
            )
        }
        ///Creates a new call builder for the [`nullifierAtIndex`] function.
        pub fn nullifierAtIndex(
            &self,
            index: alloy::sol_types::private::primitives::aliases::U256,
        ) -> alloy_contract::SolCallBuilder<&P, nullifierAtIndexCall, N> {
            self.call_builder(&nullifierAtIndexCall { index })
        }
        ///Creates a new call builder for the [`nullifierCount`] function.
        pub fn nullifierCount(
            &self,
        ) -> alloy_contract::SolCallBuilder<&P, nullifierCountCall, N> {
            self.call_builder(&nullifierCountCall)
        }
        ///Creates a new call builder for the [`setEmergencyCaller`] function.
        pub fn setEmergencyCaller(
            &self,
            newEmergencyCaller: alloy::sol_types::private::Address,
        ) -> alloy_contract::SolCallBuilder<&P, setEmergencyCallerCall, N> {
            self.call_builder(
                &setEmergencyCallerCall {
                    newEmergencyCaller,
                },
            )
        }
    }
    /// Event filters.
    impl<
        P: alloy_contract::private::Provider<N>,
        N: alloy_contract::private::Network,
    > ERC20ForwarderV3Instance<P, N> {
        /// Creates a new event filter using this contract instance's provider and address.
        ///
        /// Note that the type can be any event, not just those defined in this contract.
        /// Prefer using the other methods for building type-safe event filters.
        pub fn event_filter<E: alloy_sol_types::SolEvent>(
            &self,
        ) -> alloy_contract::Event<&P, E, N> {
            alloy_contract::Event::new_sol(&self.provider, &self.address)
        }
        ///Creates a new event filter for the [`Unwrapped`] event.
        pub fn Unwrapped_filter(&self) -> alloy_contract::Event<&P, Unwrapped, N> {
            self.event_filter::<Unwrapped>()
        }
        ///Creates a new event filter for the [`Wrapped`] event.
        pub fn Wrapped_filter(&self) -> alloy_contract::Event<&P, Wrapped, N> {
            self.event_filter::<Wrapped>()
        }
    }
}
