@materia-dex/materia-contracts-proxy
Version:
Proxy contract for the Materia protocol
1,260 lines • 161 kB
JSON
{
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "initialFactory",
"type": "address"
},
{
"internalType": "address",
"name": "initialBridgeToken",
"type": "address"
},
{
"internalType": "address",
"name": "initialErc20Wrapper",
"type": "address"
},
{
"internalType": "address",
"name": "initialDoubleProxy",
"type": "address"
},
{
"internalType": "address",
"name": "initialLiquidityAdder",
"type": "address"
},
{
"internalType": "address",
"name": "initialLiquidityRemover",
"type": "address"
},
{
"internalType": "address",
"name": "initialSwapper",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "ETHEREUM_OBJECT_ID",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenAmountDesired",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "bridgeAmountDesired",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenAmountMin",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "bridgeAmountMin",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "addLiquidity",
"outputs": [
{
"internalType": "uint256",
"name": "amountA",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountB",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "liquidity",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "bridgeAmountDesired",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "EthAmountMin",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "bridgeAmountMin",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "addLiquidityETH",
"outputs": [
{
"internalType": "uint256",
"name": "amountToken",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountETH",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "liquidity",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "bridgeToken",
"outputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "doubleProxy",
"outputs": [
{
"internalType": "contract IDoubleProxy",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "erc20Wrapper",
"outputs": [
{
"internalType": "contract IERC20WrapperV1",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "factory",
"outputs": [
{
"internalType": "contract IMateriaFactory",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserveIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserveOut",
"type": "uint256"
}
],
"name": "getAmountIn",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserveIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserveOut",
"type": "uint256"
}
],
"name": "getAmountOut",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "path",
"type": "address[]"
}
],
"name": "getAmountsIn",
"outputs": [
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "path",
"type": "address[]"
}
],
"name": "getAmountsOut",
"outputs": [
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "getCrumbs",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "isEthItem",
"outputs": [
{
"internalType": "address",
"name": "collection",
"type": "address"
},
{
"internalType": "bool",
"name": "ethItem",
"type": "bool"
},
{
"internalType": "uint256",
"name": "itemId",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "isNativeItem",
"outputs": [
{
"internalType": "address",
"name": "collection",
"type": "address"
},
{
"internalType": "bool",
"name": "native",
"type": "bool"
},
{
"internalType": "uint256",
"name": "itemId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "decimals",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "liquidityAdder",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "liquidityRemover",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155BatchReceived",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "payload",
"type": "bytes"
}
],
"name": "onERC1155Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountA",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserveA",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserveB",
"type": "uint256"
}
],
"name": "quote",
"outputs": [
{
"internalType": "uint256",
"name": "amountB",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenAmountMin",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "bridgeAmountMin",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "removeLiquidity",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenAmountMin",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "bridgeAmountMin",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "removeLiquidityAndUnwrap",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "liquidity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "bridgeAmountMin",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "EthAmountMin",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "removeLiquidityETH",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "liquidity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenAmountMin",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "bridgeAmountMin",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "bool",
"name": "approveMax",
"type": "bool"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "removeLiquidityETHWithPermit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenAmountMin",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "bridgeAmountMin",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "bool",
"name": "approveMax",
"type": "bool"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "removeLiquidityWithPermit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenAmountMin",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "bridgeAmountMin",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "bool",
"name": "approveMax",
"type": "bool"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "removeLiquidityWithPermitAndUnwrap",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOrchestrator",
"type": "address"
}
],
"name": "retire",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newBridgeToken",
"type": "address"
}
],
"name": "setBridgeToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "materiaFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "setDefaultFees",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newDoubleProxy",
"type": "address"
}
],
"name": "setDoubleProxy",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newErc20Wrapper",
"type": "address"
}
],
"name": "setErc20Wrapper",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "newEthereumObjectId",
"type": "uint256"
}
],
"name": "setEthereumObjectId",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newFactory",
"type": "address"
}
],
"name": "setFactory",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "feeTo",
"type": "address"
}
],
"name": "setFeeTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "materiaFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "swapFee",
"type": "uint256"
}
],
"name": "setFees",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_adder",
"type": "address"
}
],
"name": "setLiquidityAdder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_remover",
"type": "address"
}
],
"name": "setLiquidityRemover",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_swapper",
"type": "address"
}
],
"name": "setSwapper",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "path",
"type": "address[]"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "swapETHForExactTokens",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountOutMin",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "path",
"type": "address[]"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "swapExactETHForTokens",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountOutMin",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "path",
"type": "address[]"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "swapExactTokensForETH",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountOutMin",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "path",
"type": "address[]"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "swapExactTokensForTokens",
"outputs": [
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountInMax",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "path",
"type": "address[]"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "swapTokensForExactETH",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountInMax",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "path",
"type": "address[]"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "swapTokensForExactTokens",
"outputs": [
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "swapper",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "wrapper",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "bytes",
"name": "payload",
"type": "bytes"
}
],
"name": "wrap",
"outputs": [
{
"internalType": "address",
"name": "interoperable",
"type": "address"
},
{
"internalType": "uint256",
"name": "itemAmount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"evm": {
"bytecode": {
"object": "60806040523480156200001157600080fd5b50604051620030b0380380620030b083398101604081905262000034916200012c565b600480546001600160a01b03199081166001600160a01b03998a1617909155600680548216978916979097179096556005805487169588169590951790945560408051808201909152601681527f54484520455448455245554d204f424a454354204954000000000000000000006020909101527f186184b38c30620314f957b261f907a96e7bd12c377a91dcf1ef57fdea9aad3760075560008054861693871693909317909255600280548516918616919091179055600380548416918516919091179055600180549092169216919091179055620001c0565b80516001600160a01b03811681146200012757600080fd5b919050565b600080600080600080600060e0888a03121562000147578283fd5b62000152886200010f565b965062000162602089016200010f565b955062000172604089016200010f565b945062000182606089016200010f565b935062000192608089016200010f565b9250620001a260a089016200010f565b9150620001b260c089016200010f565b905092959891949750929550565b612ee080620001d06000396000f3fe6080604052600436106102f65760003560e01c806385f8c2591161018f578063bc197c81116100e1578063d7565a0c1161008a578063f46901ed11610064578063f46901ed14610807578063f4734b0c14610827578063fb3bdb41146105c657610330565b8063d7565a0c146107a7578063ee1fae3c146107c7578063f23a6e61146107e757610330565b8063cafd47df116100bb578063cafd47df14610752578063cbd99d0314610767578063d06ca61f1461078757610330565b8063bc197c81146106fb578063be745fff14610728578063c45a01551461073d57610330565b80639e6371ba11610143578063b6ec79fe1161011d578063b6ec79fe146106a8578063b9bdb4ef146106c8578063bb8a88bb146106e857610330565b80639e6371ba146106485780639f18401114610668578063ad615dec1461068857610330565b80639187aaca116101745780639187aaca146105f957806396c92f5e146104bd5780639c82f2a41461062857610330565b806385f8c259146105d95780638803dbee1461049d57610330565b80633d0c2a34116102485780635909889d116101fc5780637796473a116101d65780637796473a14610576578063781cef2a146105a65780637ff36ab5146105c657610330565b80635909889d1461038b5780635bb4780814610536578063678700e01461055657610330565b80634a25d94a1161022d5780634a25d94a146103cb5780634eb9b5921461050c57806355809f9f1461052157610330565b80633d0c2a34146104bd57806347883c37146104dd57610330565b80631b5f58c8116102aa57806323ae84011161028457806323ae8401146104685780632b3297f91461048857806338ed17391461049d57610330565b80631b5f58c8146103eb5780631df199531461040d5780631f00ca741461043b57610330565b8063104870fd116102db578063104870fd1461038b57806311f38472146103ab57806318cbafe5146103cb57610330565b806302af0fb514610335578063054d50d41461035557610330565b36610330576005546001600160a01b0316331461032e5760405162461bcd60e51b815260040161032590612b0d565b60405180910390fd5b005b600080fd5b34801561034157600080fd5b5061032e6103503660046122ed565b61083c565b34801561036157600080fd5b50610375610370366004612513565b610841565b6040516103829190612c5b565b60405180910390f35b34801561039757600080fd5b5061032e6103a6366004612191565b610858565b3480156103b757600080fd5b5061032e6103c6366004612100565b610879565b3480156103d757600080fd5b5061032e6103e63660046124aa565b6108f5565b3480156103f757600080fd5b50610400610911565b60405161038291906126ea565b34801561041957600080fd5b5061042d61042836600461206a565b610920565b6040516103829291906127db565b34801561044757600080fd5b5061045b61045636600461234c565b610c16565b6040516103829190612815565b34801561047457600080fd5b5061032e610483366004611ebc565b610c39565b34801561049457600080fd5b50610400610c73565b3480156104a957600080fd5b5061045b6104b83660046124aa565b610c82565b3480156104c957600080fd5b5061032e6104d8366004612134565b610ca3565b3480156104e957600080fd5b506104fd6104f8366004611ebc565b610cc0565b60405161038293929190612794565b34801561051857600080fd5b50610400610dde565b34801561052d57600080fd5b50610400610ded565b34801561054257600080fd5b5061032e610551366004611ebc565b610dfc565b34801561056257600080fd5b5061032e610571366004612575565b610e36565b34801561058257600080fd5b50610596610591366004611ebc565b610e56565b60405161038294939291906127b5565b3480156105b257600080fd5b5061032e6105c1366004611ebc565b610f8f565b61032e6105d4366004612391565b610fc9565b3480156105e557600080fd5b506103756105f4366004612513565b610fe4565b34801561060557600080fd5b50610619610614366004612226565b610ff1565b60405161038293929190612c64565b34801561063457600080fd5b5061032e610643366004611ebc565b61101a565b34801561065457600080fd5b5061032e610663366004611ebc565b611054565b34801561067457600080fd5b5061032e610683366004611ebc565b6110ca565b34801561069457600080fd5b506103756106a3366004612513565b611104565b3480156106b457600080fd5b5061032e6106c3366004612029565b611111565b3480156106d457600080fd5b5061032e6106e3366004612489565b611121565b6106196106f636600461253e565b611211565b34801561070757600080fd5b5061071b610716366004611ef4565b611238565b6040516103829190612859565b34801561073457600080fd5b5061037561123f565b34801561074957600080fd5b50610400611245565b34801561075e57600080fd5b50610400611254565b34801561077357600080fd5b5061032e610782366004611ebc565b611263565b34801561079357600080fd5b5061045b6107a236600461234c565b61129d565b3480156107b357600080fd5b5061032e6107c2366004611ebc565b6112b7565b3480156107d357600080fd5b5061032e6107e236600461253e565b6112f1565b3480156107f357600080fd5b5061071b610802366004611faf565b611306565b34801561081357600080fd5b5061032e610822366004611ebc565b6113a7565b34801561083357600080fd5b506104006113ef565b600755565b600061084e8484846113fe565b90505b9392505050565b60035461086d906001600160a01b0316611498565b50505050505050505050565b6004546006546001600160a01b03918216916311f384729161089e91849116876114bc565b84846040518463ffffffff1660e01b81526004016108be939291906127f4565b600060405180830381600087803b1580156108d857600080fd5b505af11580156108ec573d6000803e3d6000fd5b50505050505050565b60015461090a906001600160a01b0316611498565b5050505050565b6005546001600160a01b031681565b60008061092f8987308b61152c565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815288906001600160a01b038b169063dd62ed3e906109789030908c906004016126fe565b60206040518083038186803b15801561099057600080fd5b505afa1580156109a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c89190612305565b1015610a6b576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038a169063095ea7b390610a17908a90600019906004016127db565b602060405180830381600087803b158015610a3157600080fd5b505af1158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a69919061228e565b505b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526000906001600160a01b038916906340c10f1990610ab5908d908d906004016127db565b6040805180830381600087803b158015610ace57600080fd5b505af1158015610ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b06919061231d565b8094508192505050876001600160a01b031663f242432a3088848e6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5957600080fd5b505afa158015610b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b919190612305565b610b9c906012612e0f565b610ba790600a612d22565b610bb1908f612df0565b9650868a8a6040518763ffffffff1660e01b8152600401610bd79695949392919061273c565b600060405180830381600087803b158015610bf157600080fd5b505af1158015610c05573d6000803e3d6000fd5b505050505097509795505050505050565b600454606090610c30906001600160a01b03168484611629565b90505b92915050565b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b600154606090610c9a906001600160a01b0316611498565b95945050505050565b600354610cb8906001600160a01b0316611498565b505050505050565b600080806001600160a01b038416610ce057506000915081905080610dd7565b836001600160a01b0316631836b97d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1957600080fd5b505afa925050508015610d49575060408051601f3d908101601f19168201909252610d4691810190611ed8565b60015b610d5b57506000915081905080610dd7565b806001866001600160a01b031663d4d5a06d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d9757600080fd5b505afa158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf9190612305565b935093509350505b9193909250565b6000546001600160a01b031681565b6002546001600160a01b031681565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600354610e4b906001600160a01b0316611498565b505050505050505050565b6000806000806000610e6786610cc0565b919650909350905080610e8857600080600080945094509450945050610f88565b846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610ec157600080fd5b505afa925050508015610ef1575060408051601f3d908101601f19168201909252610eee91810190612305565b60015b610f0957600080600080945094509450945050610f88565b856001886001600160a01b031663d4d5a06d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190612305565b919750955093509150505b9193509193565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600154610fde906001600160a01b0316611498565b50505050565b600061084e8484846117e3565b6002546000908190819061100d906001600160a01b0316611498565b9750975097945050505050565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600480546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163f2fde38b9161109c918591016126ea565b600060405180830381600087803b1580156110b657600080fd5b505af115801561090a573d6000803e3d6000fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600061084e848484611877565b61111c8382846118d9565b505050565b600480546040517f794366e60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163794366e69161116991869101612c5b565b600060405180830381600087803b15801561118357600080fd5b505af1158015611197573d6000803e3d6000fd5b5050600480546040517f334dc4f30000000000000000000000000000000000000000000000000000000081526001600160a01b03909116935063334dc4f392506111e391859101612c5b565b600060405180830381600087803b1580156111fd57600080fd5b505af1158015610cb8573d6000803e3d6000fd5b6002546000908190819061122d906001600160a01b0316611498565b955095509592505050565b6000806000fd5b60075481565b6004546001600160a01b031681565b6003546001600160a01b031681565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600454606090610c30906001600160a01b031684846119d4565b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60035461090a906001600160a01b0316611498565b600080611315838501856123f0565b509050806001141561133b57600254611336906001600160a01b0316611498565b61137a565b806002148061134a5750806003145b806113555750806004145b806113605750806005145b1561033057600154611336906001600160a01b0316611498565b507ff23a6e6100000000000000000000000000000000000000000000000000000000979650505050505050565b600480546040517ff46901ed0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163f46901ed9161109c918591016126ea565b6006546001600160a01b031681565b600080841161141f5760405162461bcd60e51b815260040161032590612a53565b60008311801561142f5750600082115b61144b5760405162461bcd60e51b815260040161032590612b6a565b6000611459856103e5611b6e565b905060006114678285611b6e565b905060006114818361147b886103e8611b6e565b90611bae565b905061148d8183612cbc565b979650505050505050565b3660008037600080366000845af43d6000803e8080156114b7573d6000f35b3d6000fd5b60008060006114cb8585611bdc565b915091508582826040516020016114e39291906125f6565b6040516020818303038152906040528051906020012060405160200161150a929190612669565b60408051601f1981840301815291905280516020909101209695505050505050565b600080856001600160a01b03166323b872dd86868660405160240161155393929190612718565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516115a19190612630565b6000604051808303816000865af19150503d80600081146115de576040519150601f19603f3d011682016040523d82523d6000602084013e6115e3565b606091505b509150915081801561160d57508051158061160d57508080602001905181019061160d919061228e565b610cb85760405162461bcd60e51b815260040161032590612bc7565b606060028251101561164d5760405162461bcd60e51b815260040161032590612a1c565b815167ffffffffffffffff81111561167557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561169e578160200160208202803683370190505b5090508281600183516116b19190612e0f565b815181106116cf57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250506000600183516116eb9190612e0f565b90505b80156117db5760008061175a8786611707600187612e0f565b8151811061172557634e487b7160e01b600052603260045260246000fd5b602002602001015187868151811061174d57634e487b7160e01b600052603260045260246000fd5b6020026020010151611c66565b9150915061179084848151811061178157634e487b7160e01b600052603260045260246000fd5b602002602001015183836117e3565b8461179c600186612e0f565b815181106117ba57634e487b7160e01b600052603260045260246000fd5b602002602001018181525050505080806117d390612e26565b9150506116ee565b509392505050565b60008084116118045760405162461bcd60e51b8152600401610325906129bf565b6000831180156118145750600082115b6118305760405162461bcd60e51b815260040161032590612b6a565b60006118486103e86118428688611b6e565b90611b6e565b9050600061185c6103e56118428689611d4d565b905061186d600161147b8385612cbc565b9695505050505050565b60008084116118985760405162461bcd60e51b815260040161032590612962565b6000831180156118a85750600082115b6118c45760405162461bcd60e51b815260040161032590612b6a565b826118cf8584611b6e565b61084e9190612cbc565b600080846001600160a01b031663a9059cbb85856040516024016118fe9291906127db565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161194c9190612630565b6000604051808303816000865af19150503d8060008114611989576040519150601f19603f3d011682016040523d82523d6000602084013e61198e565b606091505b50915091508180156119b85750805115806119b85750808060200190518101906119b8919061228e565b61090a5760405162461bcd60e51b8152600401610325906128bd565b60606002825110156119f85760405162461bcd60e51b815260040161032590612a1c565b815167ffffffffffffffff811115611a2057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611a49578160200160208202803683370190505b5090508281600081518110611a6e57634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060005b60018351611a8b9190612e0f565b8110156117db57600080611aed87868581518110611ab957634e487b7160e01b600052603260045260246000fd5b602002602001015187866001611acf9190612ca4565b8151811061174d57634e487b7160e01b600052603260045260246000fd5b91509150611b23848481518110611b1457634e487b7160e01b600052603260045260246000fd5b602002602001015183836113fe565b84611b2f856001612ca4565b81518110611b4d57634e487b7160e01b600052603260045260246000fd5b60200260200101818152505050508080611b6690612e3d565b915050611a7d565b6000811580611b9257508282611b848183612df0565b9250611b909083612cbc565b145b610c335760405162461bcd60e51b8152600401610325906128f4565b600082611bbb8382612ca4565b9150811015610c335760405162461bcd60e51b81526004016103259061292b565b600080826001600160a01b0316846001600160a01b03161415611c115760405162461bcd60e51b815260040161032590612ab0565b826001600160a01b0316846001600160a01b031610611c31578284611c34565b83835b90925090506001600160a01b038216611c5f5760405162461bcd60e51b815260040161032590612c24565b9250929050565b6000806000611c758585611bdc565b509050600080611c868888886114bc565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611cbe57600080fd5b505afa158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf691906122aa565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316876001600160a01b031614611d3b578082611d3e565b81815b90999098509650505050505050565b600082611d5a8382612e0f565b9150811115610c335760405162461bcd60e51b815260040161032590612886565b600082601f830112611d8b578081fd5b8135602067ffffffffffffffff821115611da757611da7612e6e565b808202611db5828201612c7a565b838152828101908684018388018501891015611dcf578687fd5b8693505b85841015611dfa578035611de681612e84565b835260019390930192918401918401611dd3565b50979650505050505050565b60008083601f840112611e17578182fd5b50813567ffffffffffffffff811115611e2e578182fd5b6020830191508360208083028501011115611c5f57600080fd5b60008083601f840112611e59578182fd5b50813567ffffffffffffffff811115611e70578182fd5b602083019150836020828501011115611c5f57600080fd5b80516dffffffffffffffffffffffffffff81168114611ea657600080fd5b919050565b803560ff81168114611ea657600080fd5b600060208284031215611ecd578081fd5b813561085181612e84565b600060208284031215611ee9578081fd5b815161085181612e84565b60008060008060008060008060a0898b031215611f0f578384fd5b8835611f1a81612e84565b97506020890135611f2a81612e84565b9650604089013567ffffffffffffffff80821115611f46578586fd5b611f528c838d01611e06565b909850965060608b0135915080821115611f6a578586fd5b611f768c838d01611e06565b909650945060808b0135915080821115611f8e578384fd5b50611f9b8b828c01611e48565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fc7578182fd5b8635611fd281612e84565b95506020870135611fe281612e84565b94506040870135935060608701359250608087013567ffffffffffffffff81111561200b578283fd5b61201789828a01611e48565b979a9699509497509295939492505050565b60008060006060848603121561203d578283fd5b833561204881612e84565b925060208401359150604084013561205f81612e84565b809150509250925092565b600080600080600080600060c0888a031215612084578283fd5b873561208f81612e84565b96506020880135955060408801356120a681612e84565b945060608801356120b681612e84565b935060808801356120c681612e84565b925060a088013567ffffffffffffffff8111156120e1578283fd5b6120ed8a828b01611e48565b989b979a50959850939692959293505050565b600080600060608486031215612114578081fd5b833561211f81612e84565b95602085013595506040909401359392505050565b60008060008060008060c0878903121561214c578384fd5b863561215781612e84565b9550602087013594506040870135935060608701359250608087013561217c81612e84565b8092505060a087013590509295509295509295565b6000806000806000806000806000806101408b8d0312156121b0578384fd5b8a356121bb81612e84565b995060208b0135985060408b0135975060608b0135965060808b01356121e081612e84565b955060a08b0135945060c08b01356121f781612e9c565b935061220560e08c01611eab565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600080600060e0888a031215612240578081fd5b873561224b81612e84565b96506020880135955060408801359450606088013593506080880135925060a088013561227781612e84565b8092505060c0880135905092959891949750929550565b60006020828403121561229f578081fd5b815161085181612e9c565b6000806000606084860312156122be578081fd5b6122c784611e88565b92506122d560208501611e88565b9150604084015163ffffffff8116811461205f578182fd5b6000602082840312156122fe578081fd5b5035919050565b600060208284031215612316578081fd5b5051919050565b6000806040838503121561232f578182fd5b82519150602083015161234181612e84565b809150509250929050565b6000806040838503121561235e578182fd5b82359150602083013567ffffffffffffffff81111561237b578182fd5b61238785828601611d7b565b9150509250929050565b600080600080608085870312156123a6578182fd5b84359350602085013567ffffffffffffffff8111156123c3578283fd5b6123cf87828801611d7b565b93505060408501356123e081612e84565b9396929550929360600135925050565b60008060408385031215612402578182fd5b8235915060208084013567ffffffffffffffff80821115612421578384fd5b818601915086601f830112612434578384fd5b81358181111561244657612446612e6e565b61245884601f19601f84011601612c7a565b9150808252878482850101111561246d578485fd5b8084840185840137810190920192909252919491935090915050565b6000806040838503121561249b578182fd5b50508035926020909101359150565b600080600080600060a086880312156124c1578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156124e5578384fd5b6124f188828901611d7b565b935050606086013561250281612e84565b949793965091946080013592915050565b600080600060608486031215612527578081fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215612555578283fd5b853594506020860135935060408601359250606086013561250281612e84565b60008060008060008060008060006101208a8c031215612593578283fd5b8935985060208a0135975060408a0135965060608a01356125b381612e84565b955060808a0135945060a08a01356125ca81612e9c565b93506125d860c08b01611eab565b925060e08a013591506101008a013590509295985092959850929598565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811682529190921b16601482015260280190565b60008251815b818110156126505760208186018101518583015201612636565b8181111561265e5782828501525b509190910192915050565b7fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f1974917c1e01e6369c1b45f631eae6a71d24cb5108c460cc7f0b1c608b3a7c94603582015260550190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c084013781830160c090810191909152601f909201601f1916010195945050505050565b6001600160a01b039390931683529015156020830152604082015260600190565b6001600160a01b0394909416845291151560208401526040830152606082015260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6020808252825182820181905260009190848201906040850190845b8181101561284d57835183529284019291840191600101612831565b50909695505050505050565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b60208082526015908201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604082015260600190565b6020808252601f908201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604082015260600190565b60208082526014908201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604082015260600190565b60208082526014908201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604082015260600190565b60208082526023908201527f4d6174657269614c6962726172793a20494e53554646494349454e545f414d4f60408201527f554e540000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f4d6174657269614c6962726172793a20494e53554646494349454e545f4f555460408201527f5055545f414d4f554e5400000000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f4d6174657269614c6962726172793a20494e56414c49445f