{
    "contractName": "ExchangeHelper",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "contract ExchangeCore",
                    "name": "core",
                    "type": "address"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "inputs": [],
            "name": "exchangeCore",
            "outputs": [
                {
                    "internalType": "contract ExchangeCore",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [],
            "name": "version",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "array",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "desired",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "mask",
                    "type": "bytes"
                }
            ],
            "name": "guardedArrayReplace",
            "outputs": [
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "stateMutability": "pure",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [
                {
                    "internalType": "enum SaleKindInterface.Side",
                    "name": "side",
                    "type": "uint8"
                },
                {
                    "internalType": "enum SaleKindInterface.SaleKind",
                    "name": "saleKind",
                    "type": "uint8"
                },
                {
                    "internalType": "uint256",
                    "name": "basePrice",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "extra",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "listingTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "expirationTime",
                    "type": "uint256"
                }
            ],
            "name": "calculateFinalPrice",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "hashOrder",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "pure",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "hashToSign",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "pure",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "validateOrderParameters",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "order",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct DataType.Sig",
                    "name": "sig",
                    "type": "tuple"
                }
            ],
            "name": "validateOrder",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "order",
                    "type": "tuple"
                },
                {
                    "internalType": "bool",
                    "name": "orderbookInclusionDesired",
                    "type": "bool"
                }
            ],
            "name": "approveOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "order",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct DataType.Sig",
                    "name": "sig",
                    "type": "tuple"
                }
            ],
            "name": "cancelOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "calculateCurrentPrice",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "buy",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "sell",
                    "type": "tuple"
                }
            ],
            "name": "ordersCanMatch",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "buyCalldata",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "buyReplacementPattern",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "sellCalldata",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "sellReplacementPattern",
                    "type": "bytes"
                }
            ],
            "name": "orderCalldataCanMatch",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "pure",
            "type": "function",
            "constant": true
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "buy",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "exchange",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerRelayerFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "makerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "takerProtocolFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.FeeMethod",
                            "name": "feeMethod",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.Side",
                            "name": "side",
                            "type": "uint8"
                        },
                        {
                            "internalType": "enum SaleKindInterface.SaleKind",
                            "name": "saleKind",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        },
                        {
                            "internalType": "enum DataType.HowToCall",
                            "name": "howToCall",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes",
                            "name": "dataToCall",
                            "type": "bytes"
                        },
                        {
                            "internalType": "bytes",
                            "name": "replacementPattern",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "staticTarget",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "staticExtradata",
                            "type": "bytes"
                        },
                        {
                            "internalType": "address",
                            "name": "paymentToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "basePrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "listingTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expirationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "salt",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct DataType.Order",
                    "name": "sell",
                    "type": "tuple"
                }
            ],
            "name": "calculateMatchPrice",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function",
            "constant": true
        }
    ]
}
