[ { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint256", "name": "initialSupplyToSet", "type": "uint256" }, { "internalType": "uint8", "name": "decimalsToSet", "type": "uint8" }, { "internalType": "address", "name": "tokenOwner", "type": "address" }, { "components": [ { "internalType": "bool", "name": "_isMintable", "type": "bool" }, { "internalType": "bool", "name": "_isBurnable", "type": "bool" }, { "internalType": "bool", "name": "_isPausable", "type": "bool" }, { "internalType": "bool", "name": "_isBlacklistEnabled", "type": "bool" }, { "internalType": "bool", "name": "_isDocumentAllowed", "type": "bool" }, { "internalType": "bool", "name": "_isWhitelistEnabled", "type": "bool" }, { "internalType": "bool", "name": "_isMaxAmountOfTokensSet", "type": "bool" }, { "internalType": "bool", "name": "_isForceTransferAllowed", "type": "bool" }, { "internalType": "bool", "name": "_isTaxable", "type": "bool" }, { "internalType": "bool", "name": "_isDeflationary", "type": "bool" } ], "internalType": "struct FullFeatureToken.ERC20ConfigProps", "name": "customConfigProps", "type": "tuple" }, { "internalType": "uint256", "name": "maxTokenAmount", "type": "uint256" }, { "internalType": "string", "name": "newDocumentUri", "type": "string" }, { "internalType": "address", "name": "_taxAddress", "type": "address" }, { "internalType": "uint256", "name": "_taxBPS", "type": "uint256" }, { "internalType": "uint256", "name": "_deflationBPS", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "AddrAlreadyBlacklisted", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "AddrAlreadyUnblacklisted", "type": "error" }, { "inputs": [], "name": "BlacklistNotEnabled", "type": "error" }, { "inputs": [], "name": "BurningNotEnabled", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "CannotBlacklistWhitelistedAddr", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "CannotWhitelistBlacklistedAddr", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "DestBalanceExceedsMaxAllowed", "type": "error" }, { "inputs": [], "name": "DocumentUriNotAllowed", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "decimals", "type": "uint8" } ], "name": "InvalidDecimals", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "bps", "type": "uint256" } ], "name": "InvalidDeflationBPS", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxTokenAmount", "type": "uint256" } ], "name": "InvalidMaxTokenAmount", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "bps", "type": "uint256" } ], "name": "InvalidTaxBPS", "type": "error" }, { "inputs": [], "name": "MaxTokenAmountNotAllowed", "type": "error" }, { "inputs": [], "name": "MaxTokenAmountPerAddrLtPrevious", "type": "error" }, { "inputs": [], "name": "MintingNotEnabled", "type": "error" }, { "inputs": [], "name": "PausingNotEnabled", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "RecipientBlacklisted", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "RecipientNotWhitelisted", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "SenderBlacklisted", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "SenderNotWhitelisted", "type": "error" }, { "inputs": [], "name": "TokenIsNotDeflationary", "type": "error" }, { "inputs": [], "name": "TokenIsNotTaxable", "type": "error" }, { "inputs": [], "name": "WhitelistNotEnabled", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "_deflationBPS", "type": "uint256" } ], "name": "DeflationConfigSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "newDocUri", "type": "string" } ], "name": "DocumentUriSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newMaxTokenAmount", "type": "uint256" } ], "name": "MaxTokenAmountPerSet", "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": "_taxAddress", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "_taxBPS", "type": "uint256" } ], "name": "TaxConfigSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" } ], "name": "UserBlacklisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" } ], "name": "UserUnBlacklisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address[]", "name": "updatedAddresses", "type": "address[]" } ], "name": "UsersWhitelisted", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "blackList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deflationBPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "documentUri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getWhitelistedAddresses", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialDocumentUri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialMaxTokenAmountPerAddress", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialTokenOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isBlacklistEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isBurnable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isDeflationary", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isDocumentUriAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isForceTransferAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isMaxAmountOfTokensSet", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isMintable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isPausable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isTaxable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isWhitelistEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokenAmountPerAddress", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "removeFromBlacklist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_deflationBPS", "type": "uint256" } ], "name": "setDeflationConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newDocumentUri", "type": "string" } ], "name": "setDocumentUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMaxTokenAmount", "type": "uint256" } ], "name": "setMaxTokenAmountPerAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_taxAddress", "type": "address" }, { "internalType": "uint256", "name": "_taxBPS", "type": "uint256" } ], "name": "setTaxConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "taxAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "taxBPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "updatedAddresses", "type": "address[]" } ], "name": "updateWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whitelist", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "whitelistedAddresses", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
6101006040523480156200001257600080fd5b5060405162003810380380620038108339810160408190526200003591620008d6565b8a8a600362000045838262000a7a565b50600462000054828262000a7a565b50506005805460ff19169055506200006c3362000380565b8560c0015115620000a15784600003620000a1576040516364824b8d60e01b8152600481018690526024015b60405180910390fd5b60128860ff161115620000cd5760405163ca95039160e01b815260ff8916600482015260240162000098565b85610100015115620001385761138882111562000101576040516365a0074b60e11b81526004810183905260240162000098565b6200011783620003da60201b6200196c1760201c565b600d80546001600160a01b0319166001600160a01b038516179055600e8290555b8561012001511562000172576113888111156200016c576040516305dba32960e51b81526004810182905260240162000098565b600f8190555b6200018887620003da60201b6200196c1760201c565b608089905260a08590526009620001a0858262000a7a565b50866001600160a01b031660c0816001600160a01b0316815250508760ff1660e08160ff168152505085600c60008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff02191690831515021790555060808201518160000160046101000a81548160ff02191690831515021790555060a08201518160000160056101000a81548160ff02191690831515021790555060c08201518160000160066101000a81548160ff02191690831515021790555060e08201518160000160076101000a81548160ff0219169083151502179055506101008201518160000160086101000a81548160ff0219169083151502179055506101208201518160000160096101000a81548160ff02191690831515021790555090505083600a908162000322919062000a7a565b50600b859055881562000353576200035387620003418a600a62000c5b565b6200034d908c62000c73565b620003f4565b6001600160a01b03871633146200036f576200036f87620004c5565b505050505050505050505062000ca3565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060601b620003f15763d92e233d6000526004601cfd5b50565b6001600160a01b0382166200044c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000098565b6200045a60008383620004ef565b80600260008282546200046e919062000c8d565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b620004cf6200050c565b620004d962000570565b620003f181620005b860201b620019821760201c565b620005078383836200063460201b62001a0f1760201c565b505050565b6005546001600160a01b036101009091041633146200056e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000098565b565b60055460ff16156200056e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640162000098565b620005c26200050c565b6001600160a01b038116620006295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000098565b620003f18162000380565b6200064c8383836200050760201b62001a881760201c565b60055460ff1615620005075760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e736665722077686044820152691a5b19481c185d5cd95960b21b606482015260840162000098565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715620006f057620006f0620006b4565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620007215762000721620006b4565b604052919050565b600082601f8301126200073b57600080fd5b81516001600160401b03811115620007575762000757620006b4565b60206200076d601f8301601f19168201620006f6565b82815285828487010111156200078257600080fd5b60005b83811015620007a257858101830151828201840152820162000785565b506000928101909101919091529392505050565b805160ff81168114620007c857600080fd5b919050565b80516001600160a01b0381168114620007c857600080fd5b80518015158114620007c857600080fd5b600061014082840312156200080a57600080fd5b62000814620006ca565b90506200082182620007e5565b81526200083160208301620007e5565b60208201526200084460408301620007e5565b60408201526200085760608301620007e5565b60608201526200086a60808301620007e5565b60808201526200087d60a08301620007e5565b60a08201526200089060c08301620007e5565b60c0820152620008a360e08301620007e5565b60e0820152610100620008b8818401620007e5565b90820152610120620008cc838201620007e5565b9082015292915050565b60008060008060008060008060008060006102808c8e031215620008f957600080fd5b8b516001600160401b038111156200091057600080fd5b6200091e8e828f0162000729565b60208e0151909c5090506001600160401b038111156200093d57600080fd5b6200094b8e828f0162000729565b9a505060408c015198506200096360608d01620007b6565b97506200097360808d01620007cd565b9650620009848d60a08e01620007f6565b6101e08d01516102008e015191975095506001600160401b03811115620009aa57600080fd5b620009b88e828f0162000729565b945050620009ca6102208d01620007cd565b92506102408c015191506102608c015190509295989b509295989b9093969950565b600181811c9082168062000a0157607f821691505b60208210810362000a2257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200050757600081815260208120601f850160051c8101602086101562000a515750805b601f850160051c820191505b8181101562000a725782815560010162000a5d565b505050505050565b81516001600160401b0381111562000a965762000a96620006b4565b62000aae8162000aa78454620009ec565b8462000a28565b602080601f83116001811462000ae6576000841562000acd5750858301515b600019600386901b1c1916600185901b17855562000a72565b600085815260208120601f198616915b8281101562000b175788860151825594840194600190910190840162000af6565b508582101562000b365787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000b9d57816000190482111562000b815762000b8162000b46565b8085161562000b8f57918102915b93841c939080029062000b61565b509250929050565b60008262000bb65750600162000c55565b8162000bc55750600062000c55565b816001811462000bde576002811462000be95762000c09565b600191505062000c55565b60ff84111562000bfd5762000bfd62000b46565b50506001821b62000c55565b5060208310610133831016604e8410600b841016171562000c2e575081810a62000c55565b62000c3a838362000b5c565b806000190482111562000c515762000c5162000b46565b0290505b92915050565b600062000c6c60ff84168362000ba5565b9392505050565b808202811582820484141762000c555762000c5562000b46565b8082018082111562000c555762000c5562000b46565b60805160a05160c05160e051612b3362000cdd60003960006103d7015260006105b501526000610630015260006104190152612b336000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c806370a08231116101b2578063a32f6976116100f9578063ba4e5c49116100a2578063dd62ed3e1161007c578063dd62ed3e146106d5578063f19c4e3b1461070e578063f2fde38b14610721578063f820f5671461073457600080fd5b8063ba4e5c49146106a6578063d48e4127146106b9578063d8f67851146106c257600080fd5b8063a9059cbb116100d3578063a9059cbb14610678578063a9d866851461068b578063b7bda68f1461069357600080fd5b8063a32f69761461062b578063a457c2d714610652578063a476df611461066557600080fd5b80638da5cb5b1161015b57806395d89b411161013557806395d89b41146105ef5780639b19251a146105f7578063a09a16011461061a57600080fd5b80638da5cb5b146105865780638dac7191146105b05780638e8c10a2146105d757600080fd5b80638456cb591161018c5780638456cb591461055c578063878dd33214610564578063883356d91461057657600080fd5b806370a0823114610518578063715018a61461054157806379cc67901461054957600080fd5b80633f4ba83a11610276578063537df3b61161021f5780635c975abb116101f95780635c975abb146104e25780636c5adaae146104ed5780636d0280271461050357600080fd5b8063537df3b6146104b1578063542e9667146104c45780635a3990ce146104cd57600080fd5b806346b45af71161025057806346b45af71461047c5780634838d165146104875780634ac0bc321461049a57600080fd5b80633f4ba83a1461044e57806340c10f191461045657806342966c681461046957600080fd5b806323b872dd116102d857806335377214116102b25780633537721414610401578063378dc3dc14610414578063395093511461043b57600080fd5b806323b872dd146103b45780632fa782eb146103c7578063313ce567146103d057600080fd5b8063095ea7b311610309578063095ea7b31461036b57806318160ddd1461038e578063184d69ab146103a057600080fd5b806302252c4d14610330578063044ab74e1461034557806306fdde0314610363575b600080fd5b61034361033e366004612623565b610747565b005b61034d610814565b60405161035a919061263c565b60405180910390f35b61034d6108a2565b61037e6103793660046126a1565b610934565b604051901515815260200161035a565b6002545b60405190815260200161035a565b600c5465010000000000900460ff1661037e565b61037e6103c23660046126cb565b61094e565b610392600e5481565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161035a565b61034361040f366004612707565b610cbd565b6103927f000000000000000000000000000000000000000000000000000000000000000081565b61037e6104493660046126a1565b610d6e565b610343610dad565b6103436104643660046126a1565b610de8565b610343610477366004612623565b610f5d565b600c5460ff1661037e565b61034361049536600461277c565b610fa1565b600c5468010000000000000000900460ff1661037e565b6103436104bf36600461277c565b611103565b610392600f5481565b600c546601000000000000900460ff1661037e565b60055460ff1661037e565b600c54670100000000000000900460ff1661037e565b61050b6111ec565b60405161035a9190612797565b61039261052636600461277c565b6001600160a01b031660009081526020819052604090205490565b61034361124d565b6103436105573660046126a1565b611265565b6103436112a7565b600c546301000000900460ff1661037e565b600c54610100900460ff1661037e565b60055461010090046001600160a01b03165b6040516001600160a01b03909116815260200161035a565b6105987f000000000000000000000000000000000000000000000000000000000000000081565b600c546901000000000000000000900460ff1661037e565b61034d6112e0565b61037e61060536600461277c565b60076020526000908152604090205460ff1681565b600c5462010000900460ff1661037e565b6103927f000000000000000000000000000000000000000000000000000000000000000081565b61037e6106603660046126a1565b6112ef565b6103436106733660046127fa565b6113a4565b61037e6106863660046126a1565b611434565b61034d611751565b600d54610598906001600160a01b031681565b6105986106b4366004612623565b61175e565b610392600b5481565b6103436106d0366004612623565b611788565b6103926106e33660046128ab565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61034361071c3660046126a1565b611853565b61034361072f36600461277c565b611953565b600c54640100000000900460ff1661037e565b61074f611a8d565b610757611aed565b600c546601000000000000900460ff1661079d576040517f6273340f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b5481116107d8576040517fa43d2d7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b8190556040518181527f2905481c6fd1a037492016c4760435a52203d82a6f34dc3de40f464c1bf42d59906020015b60405180910390a150565b600a8054610821906128de565b80601f016020809104026020016040519081016040528092919081815260200182805461084d906128de565b801561089a5780601f1061086f5761010080835404028352916020019161089a565b820191906000526020600020905b81548152906001019060200180831161087d57829003601f168201915b505050505081565b6060600380546108b1906128de565b80601f01602080910402602001604051908101604052809291908181526020018280546108dd906128de565b801561092a5780601f106108ff5761010080835404028352916020019161092a565b820191906000526020600020905b81548152906001019060200180831161090d57829003601f168201915b5050505050905090565b600033610942818585611b40565b60019150505b92915050565b6000610958611aed565b8383610970600c5460ff650100000000009091041690565b15610a79576001600160a01b03821660009081526007602052604090205460ff166109be5760405163bf3f938960e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16610a0257604051632ac2e20360e21b81526001600160a01b03821660048201526024016109b5565b6001600160a01b0382163314801590610a3d575060055461010090046001600160a01b03166001600160a01b0316336001600160a01b031614155b8015610a5957503360009081526007602052604090205460ff16155b15610a795760405163bf3f938960e01b81523360048201526024016109b5565b600c546301000000900460ff1615610b8b576001600160a01b03821660009081526006602052604090205460ff1615610ad05760405163578f3e1360e01b81526001600160a01b03831660048201526024016109b5565b6001600160a01b03811660009081526006602052604090205460ff1615610b15576040516332e38af360e21b81526001600160a01b03821660048201526024016109b5565b6001600160a01b0382163314801590610b50575060055461010090046001600160a01b03166001600160a01b0316336001600160a01b031614155b8015610b6b57503360009081526006602052604090205460ff165b15610b8b5760405163578f3e1360e01b81523360048201526024016109b5565b6000610b978786611c98565b90506000610ba486611ce2565b9050600081610bb3848961292e565b610bbd919061292e565b600c549091506601000000000000900460ff1615610c2c57600b5481610bf88a6001600160a01b031660009081526020819052604090205490565b610c029190612941565b1115610c2c5760405163f6202a8f60e01b81526001600160a01b03891660048201526024016109b5565b8215610c4a57600d54610c4a908a906001600160a01b031685611d11565b8115610c5a57610c5a8983611f0b565b600c54670100000000000000900460ff168015610c8757506005546001600160a01b036101009091041633145b15610ca357610c97898983611d11565b60019550505050610cb4565b610cae898983612080565b95505050505b50509392505050565b610cc5611a8d565b610ccd611aed565b600c5465010000000000900460ff16610d12576040517f0b1b4e5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a612099565b610d24828261214d565b610d306008838361259e565b507f6141feff42f24e29d1af3d91bffa3d40521e53485e9c92e358c4d946c0adbd388282604051610d62929190612954565b60405180910390a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906109429082908690610da8908790612941565b611b40565b610db5611a8d565b600c5462010000900460ff16610dde5760405163f00085b960e01b815260040160405180910390fd5b610de66122ab565b565b610df0611a8d565b610df8611aed565b600c5460ff16610e34576040517f3990ac6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c546601000000000000900460ff1615610ea057600b5481610e6c846001600160a01b031660009081526020819052604090205490565b610e769190612941565b1115610ea05760405163f6202a8f60e01b81526001600160a01b03831660048201526024016109b5565b600c546301000000900460ff1615610ef7576001600160a01b03821660009081526006602052604090205460ff1615610ef7576040516332e38af360e21b81526001600160a01b03831660048201526024016109b5565b600c5465010000000000900460ff1615610f4f576001600160a01b03821660009081526007602052604090205460ff16610f4f57604051632ac2e20360e21b81526001600160a01b03831660048201526024016109b5565b610f5982826122fd565b5050565b610f65611a8d565b610f6d611aed565b600c54610100900460ff16610f9557604051636cb5913960e01b815260040160405180910390fd5b610f9e816123c8565b50565b610fa9611a8d565b610fb1611aed565b610fba8161196c565b600c546301000000900460ff16610fe457604051633abeadc360e21b815260040160405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff1615611042576040517f70b8fc840000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016109b5565b600c5465010000000000900460ff16801561107557506001600160a01b03811660009081526007602052604090205460ff165b156110b7576040517febdacb5f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016109b5565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f7f8b7dc89dae85811a7a85800b892b5816ad5d381c856f1b56490f8fc470c9cb9190a250565b61110b611a8d565b611113611aed565b61111c8161196c565b600c546301000000900460ff1661114657604051633abeadc360e21b815260040160405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff166111a3576040517f3d7c1f4a0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016109b5565b6001600160a01b038116600081815260066020526040808220805460ff19169055517f4ca5b343d678ca6f1f96e8c8a2115c41c2d40641fd872b928ba6f95d3648b9d19190a250565b6060600880548060200260200160405190810160405280929190818152602001828054801561092a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611226575050505050905090565b611255611a8d565b61125d611aed565b610de66123d2565b61126d611a8d565b611275611aed565b600c54610100900460ff1661129d57604051636cb5913960e01b815260040160405180910390fd5b610f5982826123e4565b6112af611a8d565b600c5462010000900460ff166112d85760405163f00085b960e01b815260040160405180910390fd5b610de66123f9565b6060600480546108b1906128de565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561138c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016109b5565b6113998286868403611b40565b506001949350505050565b6113ac611a8d565b6113b4611aed565b600c54640100000000900460ff166113f8576040517f70a43fce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a61140482826129ee565b507f4456a0b562609d67398ddb488f136db285cd3c92343e0a7ba684925669237ade81604051610809919061263c565b600061143e611aed565b3383611456600c5460ff650100000000009091041690565b1561155a576001600160a01b03821660009081526007602052604090205460ff1661149f5760405163bf3f938960e01b81526001600160a01b03831660048201526024016109b5565b6001600160a01b03811660009081526007602052604090205460ff166114e357604051632ac2e20360e21b81526001600160a01b03821660048201526024016109b5565b6001600160a01b038216331480159061151e575060055461010090046001600160a01b03166001600160a01b0316336001600160a01b031614155b801561153a57503360009081526007602052604090205460ff16155b1561155a5760405163bf3f938960e01b81523360048201526024016109b5565b600c546301000000900460ff161561166c576001600160a01b03821660009081526006602052604090205460ff16156115b15760405163578f3e1360e01b81526001600160a01b03831660048201526024016109b5565b6001600160a01b03811660009081526006602052604090205460ff16156115f6576040516332e38af360e21b81526001600160a01b03821660048201526024016109b5565b6001600160a01b0382163314801590611631575060055461010090046001600160a01b03166001600160a01b0316336001600160a01b031614155b801561164c57503360009081526006602052604090205460ff165b1561166c5760405163578f3e1360e01b81523360048201526024016109b5565b60006116783386611c98565b9050600061168586611ce2565b9050600081611694848961292e565b61169e919061292e565b600c549091506601000000000000900460ff161561170d57600b54816116d98a6001600160a01b031660009081526020819052604090205490565b6116e39190612941565b111561170d5760405163f6202a8f60e01b81526001600160a01b03891660048201526024016109b5565b821561172b57600d5461172b9033906001600160a01b031685611d11565b811561173b5761173b3383611f0b565b6117458882612436565b98975050505050505050565b60098054610821906128de565b6008818154811061176e57600080fd5b6000918252602090912001546001600160a01b0316905081565b611790611a8d565b611798611aed565b600c546901000000000000000000900460ff166117e1576040517fcd9e529800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388811115611820576040517fbb746520000000000000000000000000000000000000000000000000000000008152600481018290526024016109b5565b600f81905560405181907fc1ff65ee907dc079b64ed9913d53f4bd593bd6ebd9b2a2708db2916d49e17ec390600090a250565b61185b611a8d565b611863611aed565b600c5468010000000000000000900460ff166118ab576040517fc8a478a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113888111156118ea576040517fcb400e96000000000000000000000000000000000000000000000000000000008152600481018290526024016109b5565b6118f38261196c565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155600e8290556040518291907facc44e32fd5ca4240f6dbe6e8cf4eb49349c17c5ce5f80f1919a9c97b50d398a90600090a35050565b61195b611a8d565b611963611aed565b610f9e81611982565b8060601b610f9e5763d92e233d6000526004601cfd5b61198a611a8d565b6001600160a01b038116611a065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109b5565b610f9e81612444565b60055460ff1615611a885760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e7366657220776860448201527f696c65207061757365640000000000000000000000000000000000000000000060648201526084016109b5565b505050565b6005546001600160a01b03610100909104163314610de65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b5565b60055460ff1615610de65760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b5565b6001600160a01b038316611bbb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016109b5565b6001600160a01b038216611c375760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016109b5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000600e54600014158015611cbb5750600d546001600160a01b03848116911614155b1561094857612710600e5483611cd19190612aae565b611cdb9190612ac5565b9392505050565b6000600f54600014611d0c57612710600f5483611cff9190612aae565b611d099190612ac5565b90505b919050565b6001600160a01b038316611d8d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016109b5565b6001600160a01b038216611e095760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016109b5565b611e148383836124b5565b6001600160a01b03831660009081526020819052604090205481811015611ea35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016109b5565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b6001600160a01b038216611f875760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016109b5565b611f93826000836124b5565b6001600160a01b038216600090815260208190526040902054818110156120225760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016109b5565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60003361208e8582856124c0565b611399858585611d11565b600060088054806020026020016040519081016040528092919081815260200182805480156120f157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116120d3575b5050505050905060005b8151811015610f59576007600083838151811061211a5761211a612ae7565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191690556001016120fb565b60005b81811015611a885761218783838381811061216d5761216d612ae7565b9050602002016020810190612182919061277c565b61196c565b600c546301000000900460ff1680156121e45750600660008484848181106121b1576121b1612ae7565b90506020020160208101906121c6919061277c565b6001600160a01b0316815260208101919091526040016000205460ff165b1561224e578282828181106121fb576121fb612ae7565b9050602002016020810190612210919061277c565b6040517f2cf5f7dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024016109b5565b60016007600085858581811061226657612266612ae7565b905060200201602081019061227b919061277c565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101612150565b6122b361254c565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166123535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016109b5565b61235f600083836124b5565b80600260008282546123719190612941565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b610f9e3382611f0b565b6123da611a8d565b610de66000612444565b6123ef8233836124c0565b610f598282611f0b565b612401611aed565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122e03390565b600033610942818585611d11565b600580546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611a88838383611a0f565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611f05578181101561253f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109b5565b611f058484848403611b40565b60055460ff16610de65760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b5565b8280548282559060005260206000209081019282156125fe579160200282015b828111156125fe57815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038435161782556020909201916001909101906125be565b5061260a92915061260e565b5090565b5b8082111561260a576000815560010161260f565b60006020828403121561263557600080fd5b5035919050565b600060208083528351808285015260005b818110156126695785810183015185820160400152820161264d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611d0c57600080fd5b600080604083850312156126b457600080fd5b6126bd8361268a565b946020939093013593505050565b6000806000606084860312156126e057600080fd5b6126e98461268a565b92506126f76020850161268a565b9150604084013590509250925092565b6000806020838503121561271a57600080fd5b823567ffffffffffffffff8082111561273257600080fd5b818501915085601f83011261274657600080fd5b81358181111561275557600080fd5b8660208260051b850101111561276a57600080fd5b60209290920196919550909350505050565b60006020828403121561278e57600080fd5b611cdb8261268a565b6020808252825182820181905260009190848201906040850190845b818110156127d85783516001600160a01b0316835292840192918401916001016127b3565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561280c57600080fd5b813567ffffffffffffffff8082111561282457600080fd5b818401915084601f83011261283857600080fd5b81358181111561284a5761284a6127e4565b604051601f8201601f19908116603f01168101908382118183101715612872576128726127e4565b8160405282815287602084870101111561288b57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156128be57600080fd5b6128c78361268a565b91506128d56020840161268a565b90509250929050565b600181811c908216806128f257607f821691505b60208210810361291257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094857610948612918565b8082018082111561094857610948612918565b60208082528181018390526000908460408401835b86811015612995576001600160a01b036129828461268a565b1682529183019190830190600101612969565b509695505050505050565b601f821115611a8857600081815260208120601f850160051c810160208610156129c75750805b601f850160051c820191505b818110156129e6578281556001016129d3565b505050505050565b815167ffffffffffffffff811115612a0857612a086127e4565b612a1c81612a1684546128de565b846129a0565b602080601f831160018114612a515760008415612a395750858301515b600019600386901b1c1916600185901b1785556129e6565b600085815260208120601f198616915b82811015612a8057888601518255948401946001909101908401612a61565b5085821015612a9e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808202811582820484141761094857610948612918565b600082612ae257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fdfea264697066735822122030d0fa8f27a883250c7a7bacf402c50c65a40c6ec96ccb650d9fc1a5f93ae6a064736f6c63430008110033000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000090000000000000000000000009b3cd6dd78dc2b9c3e21c6931fd057d2c0662d820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000009b3cd6dd78dc2b9c3e21c6931fd057d2c0662d820000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094c4f4e454c59434154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c434154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000