[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AssetAdminChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "prevRoot", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "newRoot", "type": "bytes32" } ], "name": "AssetsMerkleRootChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "dcaId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "DCACanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "dcaId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "DCACompleted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "dcaId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "address", "name": "inputAsset", "type": "address" }, { "indexed": false, "internalType": "address", "name": "outputAsset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint32", "name": "period", "type": "uint32" } ], "name": "DCACreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "dcaId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "DCAPaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "dcaId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "buyQty", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "fee", "type": "uint256" } ], "name": "DCAProcessed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "dcaId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "DCAResumed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "dcaId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "enum ICaskDCA.SkipReason", "name": "skipReason", "type": "uint8" } ], "name": "DCASkipped", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "assetsAdmin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "assetsMerkleRoot", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_dcaId", "type": "bytes32" } ], "name": "cancelDCA", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_assetSpec", "type": "address[]" }, { "internalType": "bytes32[]", "name": "_merkleProof", "type": "bytes32[]" }, { "internalType": "enum ICaskDCA.SwapProtocol", "name": "_swapProtocol", "type": "uint8" }, { "internalType": "bytes", "name": "_swapData", "type": "bytes" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256[]", "name": "_priceSpec", "type": "uint256[]" } ], "name": "createDCA", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "dcaManager", "outputs": [ { "internalType": "contract ICaskDCAManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_dcaId", "type": "bytes32" } ], "name": "getDCA", "outputs": [ { "components": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "router", "type": "address" }, { "internalType": "address", "name": "priceFeed", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "internalType": "uint256", "name": "currentAmount", "type": "uint256" }, { "internalType": "uint256", "name": "currentQty", "type": "uint256" }, { "internalType": "uint256", "name": "numBuys", "type": "uint256" }, { "internalType": "uint256", "name": "numSkips", "type": "uint256" }, { "internalType": "uint256", "name": "maxSlippageBps", "type": "uint256" }, { "internalType": "uint256", "name": "maxPrice", "type": "uint256" }, { "internalType": "uint256", "name": "minPrice", "type": "uint256" }, { "internalType": "uint32", "name": "period", "type": "uint32" }, { "internalType": "uint32", "name": "createdAt", "type": "uint32" }, { "internalType": "uint32", "name": "processAt", "type": "uint32" }, { "internalType": "enum ICaskDCA.DCAStatus", "name": "status", "type": "uint8" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "uint256", "name": "currentFees", "type": "uint256" } ], "internalType": "struct ICaskDCA.DCA", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_dcaId", "type": "bytes32" } ], "name": "getSwapInfo", "outputs": [ { "components": [ { "internalType": "enum ICaskDCA.SwapProtocol", "name": "swapProtocol", "type": "uint8" }, { "internalType": "bytes", "name": "swapData", "type": "bytes" } ], "internalType": "struct ICaskDCA.SwapInfo", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "_idx", "type": "uint256" } ], "name": "getUserDCA", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getUserDCACount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_assetsMerkleRoot", "type": "bytes32" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_dcaId", "type": "bytes32" }, { "internalType": "enum ICaskDCA.ManagerCommand", "name": "_command", "type": "uint8" } ], "name": "managerCommand", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_dcaId", "type": "bytes32" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_buyQty", "type": "uint256" }, { "internalType": "uint256", "name": "_fee", "type": "uint256" } ], "name": "managerProcessed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_dcaId", "type": "bytes32" }, { "internalType": "enum ICaskDCA.SkipReason", "name": "_skipReason", "type": "uint8" } ], "name": "managerSkipped", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minPeriod", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minSlippage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nftRenderer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_dcaId", "type": "bytes32" } ], "name": "pauseDCA", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "prevAssetsMerkleRoot", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_dcaId", "type": "bytes32" } ], "name": "resumeDCA", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_assetsAdmin", "type": "address" } ], "name": "setAssetsAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_assetsMerkleRoot", "type": "bytes32" } ], "name": "setAssetsMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_dcaManager", "type": "address" } ], "name": "setManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minAmount", "type": "uint256" } ], "name": "setMinAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_minPeriod", "type": "uint32" } ], "name": "setMinPeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minSlippage", "type": "uint256" } ], "name": "setMinSlippage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_nftRenderer", "type": "address" } ], "name": "setNFTRenderer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_forwarder", "type": "address" } ], "name": "setTrustedForwarder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_dcaId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "trustedForwarder", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "versionRecipient", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" } ]
60806040523480156200001157600080fd5b50600054610100900460ff166200002f5760005460ff161562000039565b62000039620000de565b620000a15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600054610100900460ff16158015620000c4576000805461ffff19166101011790555b8015620000d7576000805461ff00191690555b5062000102565b6000620000f630620000fc60201b620023741760201c565b15905090565b3b151590565b61351f80620001126000396000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c8063897b063711610182578063bc78e916116100e9578063d26c167f116100a2578063e985e9c51161007c578063e985e9c514610682578063f2fde38b14610690578063f7b7159f146106a3578063ffd49c84146106b657600080fd5b8063d26c167f14610653578063da7422281461065c578063e3e01f9f1461066f57600080fd5b8063bc78e916146105eb578063bd78b2b3146105fe578063c0677c4714610611578063c453824f1461061a578063c87b56dd1461062d578063d0ebdbe71461064057600080fd5b8063a22cb4651161013b578063a22cb46514610583578063a88432c514610591578063abcfd154146105a4578063b4cbc9e4146105b7578063b4e38a8d146105ca578063b88d4fde146105dd57600080fd5b8063897b0637146105005780638da5cb5b1461051357806392c65f4b146105245780639498bd711461054457806395d89b41146105575780639b2cb5d81461057a57600080fd5b806342842e0e116102415780636352211e116101fa578063715018a6116101d4578063715018a6146104cc5780637da0a877146104d45780638456cb59146104e557806387eb01bf146104ed57600080fd5b80636352211e146104935780636a82763c146104a657806370a08231146104b957600080fd5b806342842e0e146103ba578063486ff0cd146104295780634b51dd221461044a578063572b6c05146104535780635ba581cd146104755780635c975abb1461048857600080fd5b806323b872dd1161029357806323b872dd146103ba5780632a74cbb5146103c85780632ce17578146103db5780632d0fc6b4146103ee5780632d3d04051461040e5780633f4ba83a1461042157600080fd5b806301ffc9a7146102db57806306fdde0314610303578063081812fc14610330578063095ea7b31461035b5780630a5301c31461037057806316ef2c4114610383575b600080fd5b6102ee6102e93660046129ad565b6106db565b60405190151581526020015b60405180910390f35b6040805180820190915260088152674361736b2044434160c01b60208201525b6040516102fa9190612a3a565b61034361033e366004612a4d565b610712565b6040516001600160a01b0390911681526020016102fa565b61036e610369366004612a82565b610757565b005b61036e61037e366004612aac565b610794565b6103ac610391366004612aac565b6001600160a01b03166000908152609a602052604090205490565b6040519081526020016102fa565b61036e610369366004612ac7565b61036e6103d6366004612b03565b6107ff565b61036e6103e9366004612a4d565b6108ef565b6104016103fc366004612a4d565b610972565b6040516102fa9190612b61565b6103ac61041c366004612c3b565b610a65565b61036e611242565b6040805180820190915260058152640322e322e360dc1b6020820152610323565b6103ac609b5481565b6102ee610461366004612aac565b6097546001600160a01b0391821691161490565b61036e610483366004612d29565b611295565b60655460ff166102ee565b6103436104a1366004612a4d565b61142a565b609854610343906001600160a01b031681565b6103ac6104c7366004612aac565b6114fd565b61036e611584565b6097546001600160a01b0316610343565b61036e6115d7565b61036e6104fb366004612a4d565b611628565b61036e61050e366004612a4d565b611749565b6033546001600160a01b0316610343565b610537610532366004612a4d565b611797565b6040516102fa9190612da2565b61036e610552366004612a4d565b61192c565b6040805180820190915260078152664341534b44434160c81b6020820152610323565b6103ac609c5481565b61036e610369366004612f04565b60a254610343906001600160a01b031681565b61036e6105b2366004612a4d565b611a44565b61036e6105c5366004612f35565b611c05565b6103ac6105d8366004612a82565b611e2b565b61036e610369366004612fd6565b61036e6105f9366004612aac565b611e68565b61036e61060c366004612a4d565b611efb565b6103ac609e5481565b61036e610628366004613081565b612024565b61032361063b366004612a4d565b612089565b61036e61064e366004612aac565b61219a565b6103ac60a05481565b61036e61066a366004612aac565b612205565b61036e61067d366004612a4d565b61226f565b6102ee61033e3660046130a7565b61036e61069e366004612aac565b6122bd565b60a154610343906001600160a01b031681565b609d546106c69063ffffffff1681565b60405163ffffffff90911681526020016102fa565b60006001600160e01b031982166380ac58cd60e01b148061070c57506001600160e01b03198216635b5e139f60e01b145b92915050565b60405162461bcd60e51b8152602060048201526012602482015271214e4f4e5f5452414e534645525241424c4560701b60448201526000906064015b60405180910390fd5b60405162461bcd60e51b8152602060048201526012602482015271214e4f4e5f5452414e534645525241424c4560701b604482015260640161074e565b61079c61237a565b6001600160a01b03166107b76033546001600160a01b031690565b6001600160a01b0316146107dd5760405162461bcd60e51b815260040161074e906130da565b60a280546001600160a01b0319166001600160a01b0392909216919091179055565b6098546001600160a01b031661081361237a565b6001600160a01b0316146108395760405162461bcd60e51b815260040161074e9061310f565b6000828152609960205260409020600d8101546108669063ffffffff80821691600160401b900416613144565b81600d0160086101000a81548163ffffffff021916908363ffffffff160217905550600181600901600082825461089d919061316c565b909155505080546040516001600160a01b039091169084907f39e94fc57f494ff14c5e6240aaa121bb05346a3baf4434132df8f9075d587491906108e2908690613184565b60405180910390a3505050565b60a1546001600160a01b031661090361237a565b6001600160a01b0316146109295760405162461bcd60e51b815260040161074e9061310f565b609b805460a08190559082905560408051918252602082018390527f5215e49387517b606aec376216c289f200ca6ce6ff98bbbfd0976914cc2b3cfb910160405180910390a150565b6040805180820190915260008152606060208201526000828152609f60205260409081902081518083019092528054829060ff1660038111156109b7576109b7612b37565b60038111156109c8576109c8612b37565b81526020016001820180546109dc9061319e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a089061319e565b8015610a555780601f10610a2a57610100808354040283529160200191610a55565b820191906000526020600020905b815481529060010190602001808311610a3857829003601f168201915b5050505050815250509050919050565b6000600260a4541415610aba5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161074e565b600260a45560655460ff1615610ae25760405162461bcd60e51b815260040161074e906131d9565b60048a1015610b295760405162461bcd60e51b815260206004820152601360248201527221494e56414c4944286173736574537065632960681b604482015260640161074e565b60068214610b6f5760405162461bcd60e51b815260206004820152601360248201527221494e56414c4944287072696365537065632960681b604482015260640161074e565b609d5463ffffffff168383600081610b8957610b89613203565b905060200201351015610bd15760405162461bcd60e51b815260206004820152601060248201526f21494e56414c494428706572696f642960801b604482015260640161074e565b609c5483836001818110610be757610be7613203565b905060200201351015610c2f5760405162461bcd60e51b815260206004820152601060248201526f21494e56414c494428616d6f756e742960801b604482015260640161074e565b609e5483836003818110610c4557610c45613203565b905060200201351015610c9a5760405162461bcd60e51b815260206004820152601860248201527f21494e56414c4944286d6178536c697070616765427073290000000000000000604482015260640161074e565b610ca98787878e8e8e8e612389565b610ceb5760405162461bcd60e51b815260206004820152601360248201527221494e56414c4944286173736574537065632960681b604482015260640161074e565b6000610cf561237a565b8888888f8f89894342604051602001610d179a99989796959493929190613246565b60408051601f198184030181529181528151602092830120600081815260999093529120909150610d4661237a565b81546001600160a01b03199081166001600160a01b039283161783556001830180549091169188169190911790558c8c600081610d8557610d85613203565b9050602002016020810190610d9a9190612aac565b6002820180546001600160a01b0319166001600160a01b03929092169190911790558c8c6001818110610dcf57610dcf613203565b9050602002016020810190610de49190612aac565b8160030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508c8c6002908092610e1f939291906132e0565b610e2d91600e8401916127e8565b5084846001818110610e4157610e41613203565b602002919091013560048301555084846002818110610e6257610e62613203565b60200291909101356005830155508484600081610e8157610e81613203565b9050602002013581600d0160006101000a81548163ffffffff021916908363ffffffff16021790555084846004818110610ebd57610ebd613203565b6020029190910135600c8301555084846005818110610ede57610ede613203565b6020029190910135600b8301555084846003818110610eff57610eff613203565b6020029190910135600a83015550600d810180546bffffffffffffffff0000000019166401000000004263ffffffff1690810263ffffffff60401b191691909117600160401b91909102178082556001919060ff60601b1916600160601b8302179055506000828152609f6020526040902080548a90829060ff19166001836003811115610f8f57610f8f612b37565b0217905550610fa2600182018a8a61284b565b50609a6000610faf61237a565b6001600160a01b0390811682526020808301939093526040918201600090812080546001810182559082529390209092018590556098549051637d0c250f60e11b81526004810186905291169063fa184a1e90602401600060405180830381600087803b15801561101f57600080fd5b505af1158015611033573d6000803e3d6000fd5b5060019250611040915050565b600d830154600160601b900460ff16600481111561106057611060612b37565b1461109e5760405162461bcd60e51b815260206004820152600e60248201526d21554e50524f4345535341424c4560901b604482015260640161074e565b81600801546001146110e35760405162461bcd60e51b815260206004820152600e60248201526d21554e50524f4345535341424c4560901b604482015260640161074e565b60018201548254600e840180546001600160a01b03938416939092169186917f9d1e5b985dd0611bc11e93d5075cdea08f64d1d51dd07489e6f288c20cd666909160009061113357611133613203565b600091825260209091200154600e870180546001600160a01b039092169161115d9060019061330e565b8154811061116d5761116d613203565b60009182526020918290200154600489015460058a0154600d8b0154604080516001600160a01b039788168152969094169486019490945291840152606083015263ffffffff16608082015260a00160405180910390a481546001600160a01b0316600090815260a3602052604081208054600192906111ee90849061316c565b9091555050815460405184916001600160a01b0316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050600160a4559b9a5050505050505050505050565b61124a61237a565b6001600160a01b03166112656033546001600160a01b031690565b6001600160a01b03161461128b5760405162461bcd60e51b815260040161074e906130da565b6112936124af565b565b6098546001600160a01b03166112a961237a565b6001600160a01b0316146112cf5760405162461bcd60e51b815260040161074e9061310f565b600082815260996020526040902060038260038111156112f1576112f1612b37565b141561134a57600d8101805460ff60601b1916600160611b17905580546040516001600160a01b039091169084907f3d63c73b75a797c741bcfc0ae2644bc392388e97ea718a8731d44f47da2b23a490600090a3505050565b600182600381111561135e5761135e612b37565b141561142557600d810180546003919060ff60601b1916600160601b835b021790555080546040516001600160a01b039091169084907f5d3baeac0d91b82fe19cca4c28f0768ed59c65d7f64d48d53f166f9ec0f099c090600090a380546001600160a01b0316600090815260a3602052604081208054600192906113e490849061330e565b9091555050805460405184916000916001600160a01b03909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45b505050565b6000818152609960205260408120546001600160a01b031661145e5760405162461bcd60e51b815260040161074e90613325565b60016000838152609960205260409020600d0154600160601b900460ff16600481111561148d5761148d612b37565b14806114c5575060026000838152609960205260409020600d0154600160601b900460ff1660048111156114c3576114c3612b37565b145b6114e15760405162461bcd60e51b815260040161074e90613325565b506000908152609960205260409020546001600160a01b031690565b60006001600160a01b0382166115685760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161074e565b506001600160a01b0316600090815260a3602052604090205490565b61158c61237a565b6001600160a01b03166115a76033546001600160a01b031690565b6001600160a01b0316146115cd5760405162461bcd60e51b815260040161074e906130da565b6112936000612548565b6115df61237a565b6001600160a01b03166115fa6033546001600160a01b031690565b6001600160a01b0316146116205760405162461bcd60e51b815260040161074e906130da565b61129361259a565b60008181526099602052604090205481906001600160a01b031661164a61237a565b6001600160a01b0316146116705760405162461bcd60e51b815260040161074e9061310f565b60655460ff16156116935760405162461bcd60e51b815260040161074e906131d9565b60008281526099602052604090206001600d820154600160601b900460ff1660048111156116c3576116c3612b37565b14806116ee57506002600d820154600160601b900460ff1660048111156116ec576116ec612b37565b145b61172d5760405162461bcd60e51b815260206004820152601060248201526f21494e56414c4944287374617475732960801b604482015260640161074e565b600d810180546003919060ff60601b1916600160601b8361137c565b61175161237a565b6001600160a01b031661176c6033546001600160a01b031690565b6001600160a01b0316146117925760405162461bcd60e51b815260040161074e906130da565b609c55565b61179f6128bf565b60008281526099602090815260409182902082516102608101845281546001600160a01b03908116825260018301548116938201939093526002820154831693810193909352600381015490911660608301526004808201546080840152600582015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d82015463ffffffff8082166101a0860152640100000000820481166101c0860152600160401b8204166101e0850152610200840191600160601b90910460ff16908111156118a4576118a4612b37565b60048111156118b5576118b5612b37565b8152602001600e820180548060200260200160405190810160405280929190818152602001828054801561191257602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116118f4575b50505050508152602001600f820154815250509050919050565b600054610100900460ff166119475760005460ff161561194b565b303b155b6119ae5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161074e565b600054610100900460ff161580156119d0576000805461ffff19166101011790555b6119d86125f3565b6119e061262a565b609b82905560a08290556001609c55609d805463ffffffff191662015180179055600a609e55611a0e61237a565b60a180546001600160a01b0319166001600160a01b03929092169190911790558015611a40576000805461ff00191690555b5050565b60008181526099602052604090205481906001600160a01b0316611a6661237a565b6001600160a01b031614611a8c5760405162461bcd60e51b815260040161074e9061310f565b60655460ff1615611aaf5760405162461bcd60e51b815260040161074e906131d9565b60008281526099602052604090206002600d820154600160601b900460ff166004811115611adf57611adf612b37565b14611b1a5760405162461bcd60e51b815260206004820152600b60248201526a085393d517d4105554d15160aa1b604482015260640161074e565b600d8101805460ff60601b1916600160601b179081905563ffffffff428116600160401b909204161015611b6957600d8101805463ffffffff60401b1916600160401b4263ffffffff16021790555b609854604051637d0c250f60e11b8152600481018590526001600160a01b039091169063fa184a1e90602401600060405180830381600087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b505082546040516001600160a01b0390911692508591507f0d04c91a4cb25e87e66b2337207d34bd31384c15371c944d543b0d90c866e32c90600090a3505050565b6098546001600160a01b0316611c1961237a565b6001600160a01b031614611c3f5760405162461bcd60e51b815260040161074e9061310f565b6000848152609960205260409020600d810154611c6c9063ffffffff80821691600160401b900416613144565b81600d0160086101000a81548163ffffffff021916908363ffffffff16021790555083816006016000828254611ca2919061316c565b9250508190555082816007016000828254611cbd919061316c565b925050819055506001816008016000828254611cd9919061316c565b925050819055508181600f016000828254611cf4919061316c565b9091555050805460408051868152602081018690529081018490526001600160a01b039091169086907f2cd977fbc4930a01c7a1d2d4f59916c67f5e443ee1b3efc3cf295b30b95499289060600160405180910390a360008160050154118015611d6657508060050154816006015410155b15611e2457600d8101805460ff60601b1916600160621b17905580546040516001600160a01b039091169086907fe91db046d37f56c01a0949ac11e488007e1e26ea683caaee32d54c4cea5d851b90600090a380546001600160a01b0316600090815260a360205260408120805460019290611de390849061330e565b9091555050805460405186916000916001600160a01b03909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45b5050505050565b6001600160a01b0382166000908152609a60205260408120805483908110611e5557611e55613203565b9060005260206000200154905092915050565b611e7061237a565b6001600160a01b0316611e8b6033546001600160a01b031690565b6001600160a01b031614611eb15760405162461bcd60e51b815260040161074e906130da565b60a180546001600160a01b0319166001600160a01b0383169081179091556040517f3a99482b294ac192dccc0f45604a8e3a48889930e9e8c089bb0f434bbfd1e55990600090a250565b60008181526099602052604090205481906001600160a01b0316611f1d61237a565b6001600160a01b031614611f435760405162461bcd60e51b815260040161074e9061310f565b60655460ff1615611f665760405162461bcd60e51b815260040161074e906131d9565b60008281526099602052604090206001600d820154600160601b900460ff166004811115611f9657611f96612b37565b14611fd15760405162461bcd60e51b815260206004820152600b60248201526a214e4f545f41435449564560a81b604482015260640161074e565b600d8101805460ff60601b1916600160611b17905580546040516001600160a01b039091169084907f3d63c73b75a797c741bcfc0ae2644bc392388e97ea718a8731d44f47da2b23a490600090a3505050565b61202c61237a565b6001600160a01b03166120476033546001600160a01b031690565b6001600160a01b03161461206d5760405162461bcd60e51b815260040161074e906130da565b609d805463ffffffff191663ffffffff92909216919091179055565b6000818152609960205260409020546060906001600160a01b03166120f05760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00604482015260640161074e565b60a2546001600160a01b031661211457505060408051602081019091526000815290565b60a25460405163e9dc637560e01b8152306004820152602481018490526001600160a01b039091169063e9dc63759060440160006040518083038186803b15801561215e57600080fd5b505afa158015612172573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070c919081019061336e565b6121a261237a565b6001600160a01b03166121bd6033546001600160a01b031690565b6001600160a01b0316146121e35760405162461bcd60e51b815260040161074e906130da565b609880546001600160a01b0319166001600160a01b0392909216919091179055565b61220d61237a565b6001600160a01b03166122286033546001600160a01b031690565b6001600160a01b03161461224e5760405162461bcd60e51b815260040161074e906130da565b609780546001600160a01b0319166001600160a01b03831617905550565b50565b61227761237a565b6001600160a01b03166122926033546001600160a01b031690565b6001600160a01b0316146122b85760405162461bcd60e51b815260040161074e906130da565b609e55565b6122c561237a565b6001600160a01b03166122e06033546001600160a01b031690565b6001600160a01b0316146123065760405162461bcd60e51b815260040161074e906130da565b6001600160a01b03811661236b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161074e565b61226c81612548565b3b151590565b6000612384612661565b905090565b600080888888888860008181106123a2576123a2613203565b90506020020160208101906123b79190612aac565b898960018181106123ca576123ca613203565b90506020020160208101906123df9190612aac565b6123ec8a6002818e6132e0565b60405160200161240297969594939291906133e5565b60405160208183030381529060405280519060200120905061245b84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050609b549150849050612695565b806124a257506124a28484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060a0549150849050612695565b9998505050505050505050565b60655460ff166124f85760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161074e565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61252b61237a565b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60655460ff16156125bd5760405162461bcd60e51b815260040161074e906131d9565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861252b61237a565b600054610100900460ff1661261a5760405162461bcd60e51b815260040161074e90613483565b6126226126ab565b6112936126d2565b600054610100900460ff166126515760405162461bcd60e51b815260040161074e90613483565b6126596126ab565b611293612709565b60006014361080159061267e57506097546001600160a01b031633145b15612690575060131936013560601c90565b503390565b6000826126a2858461273c565b14949350505050565b600054610100900460ff166112935760405162461bcd60e51b815260040161074e90613483565b600054610100900460ff166126f95760405162461bcd60e51b815260040161074e90613483565b61129361270461237a565b612548565b600054610100900460ff166127305760405162461bcd60e51b815260040161074e90613483565b6065805460ff19169055565b600081815b84518110156127e057600085828151811061275e5761275e613203565b602002602001015190508083116127a05760408051602081018590529081018290526060016040516020818303038152906040528051906020012092506127cd565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b50806127d8816134ce565b915050612741565b509392505050565b82805482825590600052602060002090810192821561283b579160200282015b8281111561283b5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612808565b50612847929150612998565b5090565b8280546128579061319e565b90600052602060002090601f016020900481019282612879576000855561283b565b82601f106128925782800160ff1982351617855561283b565b8280016001018555821561283b579182015b8281111561283b5782358255916020019190600101906128a4565b60405180610260016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff1681526020016000600481111561298457612984612b37565b815260200160608152602001600081525090565b5b808211156128475760008155600101612999565b6000602082840312156129bf57600080fd5b81356001600160e01b0319811681146129d757600080fd5b9392505050565b60005b838110156129f95781810151838201526020016129e1565b83811115612a08576000848401525b50505050565b60008151808452612a268160208601602086016129de565b601f01601f19169290920160200192915050565b6020815260006129d76020830184612a0e565b600060208284031215612a5f57600080fd5b5035919050565b80356001600160a01b0381168114612a7d57600080fd5b919050565b60008060408385031215612a9557600080fd5b612a9e83612a66565b946020939093013593505050565b600060208284031215612abe57600080fd5b6129d782612a66565b600080600060608486031215612adc57600080fd5b612ae584612a66565b9250612af360208501612a66565b9150604084013590509250925092565b60008060408385031215612b1657600080fd5b82359150602083013560068110612b2c57600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60048110612b5d57612b5d612b37565b9052565b60208152612b73602082018351612b4d565b60006020830151604080840152612b8d6060840182612a0e565b949350505050565b60008083601f840112612ba757600080fd5b50813567ffffffffffffffff811115612bbf57600080fd5b6020830191508360208260051b8501011115612bda57600080fd5b9250929050565b6004811061226c57600080fd5b8035612a7d81612be1565b60008083601f840112612c0b57600080fd5b50813567ffffffffffffffff811115612c2357600080fd5b602083019150836020828501011115612bda57600080fd5b60008060008060008060008060008060c08b8d031215612c5a57600080fd5b8a3567ffffffffffffffff80821115612c7257600080fd5b612c7e8e838f01612b95565b909c509a5060208d0135915080821115612c9757600080fd5b612ca38e838f01612b95565b909a509850889150612cb760408e01612bee565b975060608d0135915080821115612ccd57600080fd5b612cd98e838f01612bf9565b9097509550859150612ced60808e01612a66565b945060a08d0135915080821115612d0357600080fd5b50612d108d828e01612b95565b915080935050809150509295989b9194979a5092959850565b60008060408385031215612d3c57600080fd5b823591506020830135612b2c81612be1565b60058110612b5d57612b5d612b37565b600081518084526020808501945080840160005b83811015612d975781516001600160a01b031687529582019590820190600101612d72565b509495945050505050565b60208152612dbc6020820183516001600160a01b03169052565b60006020830151612dd860408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b038116608084015250608083015160a08381019190915283015160c08084019190915283015160e08084019190915283015161010080840191909152830151610120808401919091528301516101408084019190915283015161016080840191909152830151610180808401919091528301516101a0808401919091528301516101c0612e8e8185018363ffffffff169052565b84015190506101e0612ea78482018363ffffffff169052565b8401519050610200612ec08482018363ffffffff169052565b8401519050610220612ed484820183612d4e565b808501519150506102606102408181860152612ef4610280860184612d5e565b9501519301929092525090919050565b60008060408385031215612f1757600080fd5b612f2083612a66565b915060208301358015158114612b2c57600080fd5b60008060008060808587031215612f4b57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612fa657612fa6612f67565b604052919050565b600067ffffffffffffffff821115612fc857612fc8612f67565b50601f01601f191660200190565b60008060008060808587031215612fec57600080fd5b612ff585612a66565b935061300360208601612a66565b925060408501359150606085013567ffffffffffffffff81111561302657600080fd5b8501601f8101871361303757600080fd5b803561304a61304582612fae565b612f7d565b81815288602083850101111561305f57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60006020828403121561309357600080fd5b813563ffffffff811681146129d757600080fd5b600080604083850312156130ba57600080fd5b6130c383612a66565b91506130d160208401612a66565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526005908201526404282aaa8960db1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8083168185168083038211156131635761316361312e565b01949350505050565b6000821982111561317f5761317f61312e565b500190565b602081016006831061319857613198612b37565b91905290565b600181811c908216806131b257607f821691505b602082108114156131d357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001600160fb1b0383111561322f57600080fd5b8260051b8083863760009401938452509192915050565b6bffffffffffffffffffffffff198b60601b168152600060048b1061326d5761326d612b37565b8a60f81b6014830152888a60158401376000828a0160150181815289915b898110156132b9576001600160a01b036132a484612a66565b1682526020928301929091019060010161328b565b506132c581888a613219565b95865250505050602082015260400198975050505050505050565b600080858511156132f057600080fd5b838611156132fd57600080fd5b5050600583901b0193919092039150565b6000828210156133205761332061312e565b500390565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b60006020828403121561338057600080fd5b815167ffffffffffffffff81111561339757600080fd5b8201601f810184136133a857600080fd5b80516133b661304582612fae565b8181528560208385010111156133cb57600080fd5b6133dc8260208301602086016129de565b95945050505050565b6133ef8189612b4d565b6000602060a0818401528760a0840152878960c0850137600060c089850181018290526001600160a01b0389811660408701528881166060870152601f8b01601f191686018681038301608088015291820187905287929160e0015b87831015613472578161345d85612a66565b1681529284019260019290920191840161344b565b9d9c50505050505050505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60006000198214156134e2576134e261312e565b506001019056fea2646970667358221220cf3cccac74fab50888e0739f3f8fec5cb185fc0b5278cf0de3b72bc33e6fa25f64736f6c63430008090033