[
    {
        "inputs": [
            {
                "internalType": "contract IWETH",
                "name": "_weth",
                "type": "address"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "inputs": [],
        "name": "AdvanceEpochFailed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "ArbitraryStaticCallFailed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BadSignature",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BitInvalidatedOrder",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "ETHTransferFailed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "EpochManagerAndBitInvalidatorsAreIncompatible",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "EthDepositRejected",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidMsgValue",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidPermit2Transfer",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidShortString",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidatedOrder",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "MakingAmountTooLow",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "MismatchArraysLengths",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "OrderExpired",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "OrderIsNotSuitableForMassInvalidation",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PartialFillNotAllowed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "Permit2TransferAmountTooHigh",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PredicateIsNotTrue",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PrivateOrder",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "ReentrancyDetected",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "RemainingInvalidatedOrder",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "SafeTransferFailed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "SafeTransferFromFailed",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "bool",
                "name": "success",
                "type": "bool"
            },
            {
                "internalType": "bytes",
                "name": "res",
                "type": "bytes"
            }
        ],
        "name": "SimulationResults",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "string",
                "name": "str",
                "type": "string"
            }
        ],
        "name": "StringTooLong",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "SwapWithZeroAmount",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "TakingAmountExceeded",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "TakingAmountTooHigh",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "TransferFromMakerToTakerFailed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "TransferFromTakerToMakerFailed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "WrongSeriesNonce",
        "type": "error"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "maker",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "slotIndex",
                "type": "uint256"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "slotValue",
                "type": "uint256"
            }
        ],
        "name": "BitInvalidatorUpdated",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [],
        "name": "EIP712DomainChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "maker",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "series",
                "type": "uint256"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "newEpoch",
                "type": "uint256"
            }
        ],
        "name": "EpochIncreased",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "bytes32",
                "name": "orderHash",
                "type": "bytes32"
            }
        ],
        "name": "OrderCancelled",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "bytes32",
                "name": "orderHash",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "remainingAmount",
                "type": "uint256"
            }
        ],
        "name": "OrderFilled",
        "type": "event"
    },
    {
        "inputs": [],
        "name": "DOMAIN_SEPARATOR",
        "outputs": [
            {
                "internalType": "bytes32",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint96",
                "name": "series",
                "type": "uint96"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "advanceEpoch",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "offsets",
                "type": "uint256"
            },
            {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "and",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "target",
                "type": "address"
            },
            {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "arbitraryStaticCall",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "maker",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "slot",
                "type": "uint256"
            }
        ],
        "name": "bitInvalidatorForOrder",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "MakerTraits",
                "name": "makerTraits",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "additionalMask",
                "type": "uint256"
            }
        ],
        "name": "bitsInvalidateForOrder",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "MakerTraits",
                "name": "makerTraits",
                "type": "uint256"
            },
            {
                "internalType": "bytes32",
                "name": "orderHash",
                "type": "bytes32"
            }
        ],
        "name": "cancelOrder",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "MakerTraits[]",
                "name": "makerTraits",
                "type": "uint256[]"
            },
            {
                "internalType": "bytes32[]",
                "name": "orderHashes",
                "type": "bytes32[]"
            }
        ],
        "name": "cancelOrders",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bytes",
                "name": "predicate",
                "type": "bytes"
            }
        ],
        "name": "checkPredicate",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "eip712Domain",
        "outputs": [
            {
                "internalType": "bytes1",
                "name": "fields",
                "type": "bytes1"
            },
            {
                "internalType": "string",
                "name": "name",
                "type": "string"
            },
            {
                "internalType": "string",
                "name": "version",
                "type": "string"
            },
            {
                "internalType": "uint256",
                "name": "chainId",
                "type": "uint256"
            },
            {
                "internalType": "address",
                "name": "verifyingContract",
                "type": "address"
            },
            {
                "internalType": "bytes32",
                "name": "salt",
                "type": "bytes32"
            },
            {
                "internalType": "uint256[]",
                "name": "extensions",
                "type": "uint256[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "maker",
                "type": "address"
            },
            {
                "internalType": "uint96",
                "name": "series",
                "type": "uint96"
            }
        ],
        "name": "epoch",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "maker",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "series",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "makerEpoch",
                "type": "uint256"
            }
        ],
        "name": "epochEquals",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "value",
                "type": "uint256"
            },
            {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "eq",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "salt",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "maker",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "receiver",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "makerAsset",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "takerAsset",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makingAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "takingAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "MakerTraits",
                        "name": "makerTraits",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IOrderMixin.Order",
                "name": "order",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "signature",
                "type": "bytes"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            },
            {
                "internalType": "TakerTraits",
                "name": "takerTraits",
                "type": "uint256"
            }
        ],
        "name": "fillContractOrder",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            },
            {
                "internalType": "bytes32",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "salt",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "maker",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "receiver",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "makerAsset",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "takerAsset",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makingAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "takingAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "MakerTraits",
                        "name": "makerTraits",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IOrderMixin.Order",
                "name": "order",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "signature",
                "type": "bytes"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            },
            {
                "internalType": "TakerTraits",
                "name": "takerTraits",
                "type": "uint256"
            },
            {
                "internalType": "bytes",
                "name": "args",
                "type": "bytes"
            }
        ],
        "name": "fillContractOrderArgs",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            },
            {
                "internalType": "bytes32",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "salt",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "maker",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "receiver",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "makerAsset",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "takerAsset",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makingAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "takingAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "MakerTraits",
                        "name": "makerTraits",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IOrderMixin.Order",
                "name": "order",
                "type": "tuple"
            },
            {
                "internalType": "bytes32",
                "name": "r",
                "type": "bytes32"
            },
            {
                "internalType": "bytes32",
                "name": "vs",
                "type": "bytes32"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            },
            {
                "internalType": "TakerTraits",
                "name": "takerTraits",
                "type": "uint256"
            }
        ],
        "name": "fillOrder",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            },
            {
                "internalType": "bytes32",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "salt",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "maker",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "receiver",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "makerAsset",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "takerAsset",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makingAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "takingAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "MakerTraits",
                        "name": "makerTraits",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IOrderMixin.Order",
                "name": "order",
                "type": "tuple"
            },
            {
                "internalType": "bytes32",
                "name": "r",
                "type": "bytes32"
            },
            {
                "internalType": "bytes32",
                "name": "vs",
                "type": "bytes32"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            },
            {
                "internalType": "TakerTraits",
                "name": "takerTraits",
                "type": "uint256"
            },
            {
                "internalType": "bytes",
                "name": "args",
                "type": "bytes"
            }
        ],
        "name": "fillOrderArgs",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            },
            {
                "internalType": "bytes32",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "value",
                "type": "uint256"
            },
            {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "gt",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "salt",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "maker",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "receiver",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "makerAsset",
                        "type": "uint256"
                    },
                    {
                        "internalType": "Address",
                        "name": "takerAsset",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makingAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "takingAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "MakerTraits",
                        "name": "makerTraits",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IOrderMixin.Order",
                "name": "order",
                "type": "tuple"
            }
        ],
        "name": "hashOrder",
        "outputs": [
            {
                "internalType": "bytes32",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint96",
                "name": "series",
                "type": "uint96"
            }
        ],
        "name": "increaseEpoch",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "value",
                "type": "uint256"
            },
            {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "lt",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "not",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "offsets",
                "type": "uint256"
            },
            {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "or",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bytes",
                "name": "permit",
                "type": "bytes"
            },
            {
                "internalType": "bytes",
                "name": "action",
                "type": "bytes"
            }
        ],
        "name": "permitAndCall",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "maker",
                "type": "address"
            },
            {
                "internalType": "bytes32",
                "name": "orderHash",
                "type": "bytes32"
            }
        ],
        "name": "rawRemainingInvalidatorForOrder",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "maker",
                "type": "address"
            },
            {
                "internalType": "bytes32",
                "name": "orderHash",
                "type": "bytes32"
            }
        ],
        "name": "remainingInvalidatorForOrder",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "target",
                "type": "address"
            },
            {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "simulate",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "stateMutability": "payable",
        "type": "receive"
    }
]
