[ { "inputs": [ { "internalType": "uint64", "name": "_destinationChainSelector", "type": "uint64" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "uint256", "name": "_tokenPrice", "type": "uint256" }, { "internalType": "uint256", "name": "_minPurchaseAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_maxPurchaseAmount", "type": "uint256" }, { "internalType": "address", "name": "_priceFeed", "type": "address" }, { "internalType": "address payable", "name": "_bankAccount", "type": "address" }, { "internalType": "address", "name": "_router", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "router", "type": "address" } ], "name": "InvalidRouter", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "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": "bytes32", "name": "messageId", "type": "bytes32" }, { "indexed": true, "internalType": "uint64", "name": "sourceChainSelector", "type": "uint64" }, { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "minPurchaseAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "maxPurchaseAmount", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "isPresaleActive", "type": "bool" } ], "name": "MessageReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "messageId", "type": "bytes32" }, { "indexed": true, "internalType": "uint64", "name": "destinationChainSelector", "type": "uint64" }, { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "ghonAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "coinAmountInUSD", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "referrer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "feeToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "fees", "type": "uint256" } ], "name": "MessageSent", "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": 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" }, { "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": "uint64", "name": "_sourceChainSelector", "type": "uint64" }, { "internalType": "address", "name": "_sender", "type": "address" }, { "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "allowlistSenderSourceChain", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "allowlistedSenders", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "allowlistedSourceChains", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "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": "uint256", "name": "amount", "type": "uint256" } ], "name": "calculateFees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32", "name": "messageId", "type": "bytes32" }, { "internalType": "uint64", "name": "sourceChainSelector", "type": "uint64" }, { "internalType": "bytes", "name": "sender", "type": "bytes" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "internalType": "struct Client.EVMTokenAmount[]", "name": "destTokenAmounts", "type": "tuple[]" } ], "internalType": "struct Client.Any2EVMMessage", "name": "message", "type": "tuple" } ], "name": "ccipReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "claimableTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRouter", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "priceaddress", "type": "address" } ], "name": "getUSDPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "address", "name": "_priceFeed", "type": "address" } ], "name": "ghonPurchased", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isPresaleActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxPurchaseAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minPurchaseAmount", "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": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "referrer", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "purchaseTokens", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "valutaAmount", "type": "uint256" }, { "internalType": "address", "name": "priceaddress", "type": "address" }, { "internalType": "address", "name": "referrer", "type": "address" }, { "internalType": "address", "name": "valutaAddress", "type": "address" } ], "name": "purchaseTokensWithUSDT", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenPrice", "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": "value", "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": "value", "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" } ]
60a06040523480156200001157600080fd5b506040516200276438038062002764833981016040819052620000349162000247565b8033604051806040016040528060088152602001672932b1b2b4bb32b960c11b815250604051806040016040528060058152602001641223a427a760d91b815250816003908162000086919062000397565b50600462000095828262000397565b5050506001600160a01b038116620000c857604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000d381620001dc565b506001600160a01b03811662000100576040516335fdcccd60e21b815260006004820152602401620000bf565b6001600160a01b03908116608052600580546001600160401b03909a16600160a01b8102600160a01b600160e01b0319909b169a909a179055600a80549882166001600160a01b0319998a16811790915560069790975560079590955560089390935560098054928516610100026001600160a81b0319909316929092176001908117909255600b8054918516918716919091179055600f805492909316919094161790556000928352600d60209081526040808520805460ff199081168617909155928552600e909152909220805490921617905562000463565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146200024457600080fd5b50565b600080600080600080600080610100898b0312156200026557600080fd5b88516001600160401b03811681146200027d57600080fd5b60208a015190985062000290816200022e565b8097505060408901519550606089015194506080890151935060a0890151620002b9816200022e565b60c08a0151909350620002cc816200022e565b60e08a0151909250620002df816200022e565b809150509295985092959890939650565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031b57607f821691505b6020821081036200033c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000392576000816000526020600020601f850160051c810160208610156200036d5750805b601f850160051c820191505b818110156200038e5782815560010162000379565b5050505b505050565b81516001600160401b03811115620003b357620003b3620002f0565b620003cb81620003c4845462000306565b8462000342565b602080601f831160018114620004035760008415620003ea5750858301515b600019600386901b1c1916600185901b1785556200038e565b600085815260208120601f198616915b82811015620004345788860151825594840194600190910190840162000413565b5085821015620004535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516122de62000486600039600081816104d40152610cbf01526122de6000f3fe6080604052600436106101b75760003560e01c806384d24226116100ec578063a8dcea8c1161008a578063b47dbf2211610064578063b47dbf22146104f8578063dd62ed3e1461050e578063f2fde38b14610554578063f952fcad1461057457600080fd5b8063a8dcea8c14610485578063a9059cbb146104a5578063b0f479a1146104c557600080fd5b80638da5cb5b116100c65780638da5cb5b1461040b5780638e990aaf1461043d57806395d89b4114610450578063a80d698e1461046557600080fd5b806384d242261461039e57806385572ffb146103cb5780638b2f0f4f146103eb57600080fd5b80634030d521116101595780636159ada1116101335780636159ada11461030d57806370a082311461033d578063715018a6146103735780637ff9b5961461038857600080fd5b80634030d521146102a357806352238fdd146102d357806360d938dc146102f357600080fd5b806318160ddd1161019557806318160ddd1461023357806322ea22311461025257806323b872dd14610267578063313ce5671461028757600080fd5b806301ffc9a7146101bc57806306fdde03146101f1578063095ea7b314610213575b600080fd5b3480156101c857600080fd5b506101dc6101d736600461195d565b61058a565b60405190151581526020015b60405180910390f35b3480156101fd57600080fd5b506102066105c1565b6040516101e891906119cd565b34801561021f57600080fd5b506101dc61022e3660046119f5565b610653565b34801561023f57600080fd5b506002545b6040519081526020016101e8565b6102656102603660046119f5565b61066b565b005b34801561027357600080fd5b506101dc610282366004611a21565b610adf565b34801561029357600080fd5b50604051601281526020016101e8565b3480156102af57600080fd5b506101dc6102be366004611a7e565b600d6020526000908152604090205460ff1681565b3480156102df57600080fd5b506102446102ee366004611a99565b610b03565b3480156102ff57600080fd5b506009546101dc9060ff1681565b34801561031957600080fd5b506101dc610328366004611ab2565b600e6020526000908152604090205460ff1681565b34801561034957600080fd5b50610244610358366004611ab2565b6001600160a01b031660009081526020819052604090205490565b34801561037f57600080fd5b50610265610ca0565b34801561039457600080fd5b5061024460065481565b3480156103aa57600080fd5b506102446103b9366004611ab2565b600c6020526000908152604090205481565b3480156103d757600080fd5b506102656103e6366004611acf565b610cb4565b3480156103f757600080fd5b50610244610406366004611ab2565b610d13565b34801561041757600080fd5b506005546001600160a01b03165b6040516001600160a01b0390911681526020016101e8565b61026561044b366004611b09565b610d96565b34801561045c57600080fd5b506102066112bc565b34801561047157600080fd5b50610265610480366004611b6a565b6112cb565b34801561049157600080fd5b506102446104a0366004611bb3565b61131d565b3480156104b157600080fd5b506101dc6104c03660046119f5565b61134b565b3480156104d157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610425565b34801561050457600080fd5b5061024460075481565b34801561051a57600080fd5b50610244610529366004611be3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561056057600080fd5b5061026561056f366004611ab2565b611359565b34801561058057600080fd5b5061024460085481565b60006001600160e01b031982166385572ffb60e01b14806105bb57506001600160e01b031982166301ffc9a760e01b145b92915050565b6060600380546105d090611c11565b80601f01602080910402602001604051908101604052809291908181526020018280546105fc90611c11565b80156106495780601f1061061e57610100808354040283529160200191610649565b820191906000526020600020905b81548152906001019060200180831161062c57829003601f168201915b5050505050905090565b600033610661818585611394565b5060019392505050565b60095460ff166106ba5760405162461bcd60e51b815260206004820152601560248201527450726573616c65206973206e6f742061637469766560581b60448201526064015b60405180910390fd5b6000806106dc83600960019054906101000a90046001600160a01b03166113a6565b9150915060075482101580156106f457506008548211155b6107405760405162461bcd60e51b815260206004820152601e60248201527f507572636861736520616d6f756e74206f757473696465206c696d697473000060448201526064016106b1565b6040805160a08101909152600a546001600160a01b031660c08201526000908060e0810160405160208183030381529060405281526020013384868960405160200161078f9493929190611c4b565b60408051601f19818403018152919052815260200160006040519080825280602002602001820160405280156107eb57816020015b60408051808201909152600080825260208201528152602001906001900390816107c45790505b50815260200160006001600160a01b0316815260200161081b604051806020016040528062030d40815250611403565b9052600f546005546040516320487ded60e01b81529293506000926001600160a01b03909216916320487ded9161086891600160a01b9091046001600160401b0316908690600401611c8c565b602060405180830381865afa158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a99190611d68565b905060006108b78287611d97565b600f546005546040516396f4e9f960e01b81529293506000926001600160a01b03909216916396f4e9f991869161090391600160a01b90046001600160401b0316908990600401611c8c565b60206040518083038185885af1158015610921573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109469190611d68565b90508134111561098857336108fc61095e8434611daa565b6040518115909202916000818181858888f19350505050158015610986573d6000803e3d6000fd5b505b600560149054906101000a90046001600160401b03166001600160401b0316817f0eea3371ebaa579f17ba752035e9dc0960bd8e5b1f79ceb9d645caa1bfa4ab66600a60009054906101000a90046001600160a01b031633898b8e60008b6040516109f99796959493929190611dbd565b60405180910390a3600b546040516000916001600160a01b03169089908381818185875af1925050503d8060008114610a4e576040519150601f19603f3d011682016040523d82523d6000602084013e610a53565b606091505b5050905080610ab05760405162461bcd60e51b815260206004820152602360248201527f4661696c656420746f2073656e64204d4154494320746f2062616e6b4163636f6044820152621d5b9d60ea1b60648201526084016106b1565b336000908152600c602052604081208054889290610acf908490611d97565b9091555050505050505050505050565b600033610aed858285611440565b610af88585856114be565b506001949350505050565b6000806000610b2784600960019054906101000a90046001600160a01b03166113a6565b6040805160a08101909152600a546001600160a01b031660c082015291935091506000908060e0810160405160208183030381529060405281526020013384866000604051602001610b7c9493929190611c4b565b60408051601f1981840301815291905281526020016000604051908082528060200260200182016040528015610bd857816020015b6040805180820190915260008082526020820152815260200190600190039081610bb15790505b50815260200160006001600160a01b03168152602001610c08604051806020016040528062030d40815250611403565b9052600f546005546040516320487ded60e01b81529293506000926001600160a01b03909216916320487ded91610c5591600160a01b9091046001600160401b0316908690600401611c8c565b602060405180830381865afa158015610c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c969190611d68565b9695505050505050565b610ca861151d565b610cb2600061154a565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cff576040516335fdcccd60e21b81523360048201526024016106b1565b610d10610d0b82611f94565b61159c565b50565b600080826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d78919061205a565b505050915050806402540be400610d8f91906120aa565b9392505050565b60095460ff16610de05760405162461bcd60e51b815260206004820152601560248201527450726573616c65206973206e6f742061637469766560581b60448201526064016106b1565b604051636eb1769f60e11b8152336004820152306024820152819085906001600160a01b0383169063dd62ed3e90604401602060405180830381865afa158015610e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e529190611d68565b1015610e995760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b60448201526064016106b1565b600080610ea687876113a6565b915091506007548210158015610ebe57506008548211155b610f0a5760405162461bcd60e51b815260206004820152601e60248201527f507572636861736520616d6f756e74206f757473696465206c696d697473000060448201526064016106b1565b6040805160a08101909152600a546001600160a01b031660c08201526000908060e0810160405160208183030381529060405281526020013384868a604051602001610f599493929190611c4b565b60408051601f1981840301815291905281526020016000604051908082528060200260200182016040528015610fb557816020015b6040805180820190915260008082526020820152815260200190600190039081610f8e5790505b50815260200160006001600160a01b03168152602001610fe5604051806020016040528062030d40815250611403565b9052600f546005546040516320487ded60e01b81529293506000926001600160a01b03909216916320487ded9161103291600160a01b9091046001600160401b0316908690600401611c8c565b602060405180830381865afa15801561104f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110739190611d68565b905060006110818234611d97565b600f546005546040516396f4e9f960e01b81529293506000926001600160a01b03909216916396f4e9f99186916110cd91600160a01b90046001600160401b0316908990600401611c8c565b60206040518083038185885af11580156110eb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111109190611d68565b90508134111561115257336108fc6111288434611daa565b6040518115909202916000818181858888f19350505050158015611150573d6000803e3d6000fd5b505b600560149054906101000a90046001600160401b03166001600160401b0316817f0eea3371ebaa579f17ba752035e9dc0960bd8e5b1f79ceb9d645caa1bfa4ab66600a60009054906101000a90046001600160a01b031633898b8f60008b6040516111c39796959493929190611dbd565b60405180910390a3336000908152600c6020526040812080548792906111ea908490611d97565b9091555050600b546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018d9052908816906323b872dd906064016020604051808303816000875af1158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c91906120da565b6112af5760405162461bcd60e51b81526020600482015260146024820152731554d115081d1c985b9cd9995c8819985a5b195960621b60448201526064016106b1565b5050505050505050505050565b6060600480546105d090611c11565b6112d361151d565b6001600160401b039092166000908152600d60209081526040808320805495151560ff1996871681179091556001600160a01b039094168352600e90915290208054909216179055565b60008061132983610d13565b60065490915061133985836120f7565b611343919061210e565b949350505050565b6000336106618185856114be565b61136161151d565b6001600160a01b03811661138b57604051631e4fbdf760e01b8152600060048201526024016106b1565b610d108161154a565b6113a1838383600161176c565b505050565b60008060006113b484610d13565b905060006113c46012600a612214565b6113ce87846120f7565b6113d8919061210e565b9050600060065487846113eb91906120f7565b6113f5919061210e565b919791965090945050505050565b60408051915160248084019190915281518084039091018152604490920190526020810180516001600160e01b03166397a657c960e01b17905290565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146114b857818110156114a957604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106b1565b6114b88484848403600061176c565b50505050565b6001600160a01b0383166114e857604051634b637e8f60e11b8152600060048201526024016106b1565b6001600160a01b0382166115125760405163ec442f0560e01b8152600060048201526024016106b1565b6113a1838383611833565b6005546001600160a01b03163314610cb25760405163118cdaa760e01b81523360048201526024016106b1565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b806020015181604001518060200190518101906115b99190612220565b6001600160401b0382166000908152600d602052604090205460ff166116215760405162461bcd60e51b815260206004820152601860248201527f536f7572636520436861696e204e6f7420416c6c6f776564000000000000000060448201526064016106b1565b6001600160a01b0381166000908152600e602052604090205460ff1661167e5760405162461bcd60e51b815260206004820152601260248201527114d95b99195c88139bdd08105b1b1bddd95960721b60448201526064016106b1565b82516010556060830151805160009161169f9181016020908101910161223d565b805160065560208082015160075560408083015160085560608301516009805460ff19169115159190911790558682015187519188015180519495506001600160401b039091169391927f97c3d4a9b4439293c74fa85d7ed2481edfb7231ea1076af142c481cc9eeee0a09261171b9290810182019101612220565b84516020808701516040808901516060808b015183516001600160a01b0390981688529487019590955290850191909152918301919091521515608082015260a0015b60405180910390a350505050565b6001600160a01b0384166117965760405163e602df0560e01b8152600060048201526024016106b1565b6001600160a01b0383166117c057604051634a1406b160e11b8152600060048201526024016106b1565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156114b857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161175e91815260200190565b6001600160a01b03831661185e5780600260008282546118539190611d97565b909155506118d09050565b6001600160a01b038316600090815260208190526040902054818110156118b15760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016106b1565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166118ec5760028054829003905561190b565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161195091815260200190565b60405180910390a3505050565b60006020828403121561196f57600080fd5b81356001600160e01b031981168114610d8f57600080fd5b6000815180845260005b818110156119ad57602081850181015186830182015201611991565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d8f6020830184611987565b6001600160a01b0381168114610d1057600080fd5b60008060408385031215611a0857600080fd5b8235611a13816119e0565b946020939093013593505050565b600080600060608486031215611a3657600080fd5b8335611a41816119e0565b92506020840135611a51816119e0565b929592945050506040919091013590565b80356001600160401b0381168114611a7957600080fd5b919050565b600060208284031215611a9057600080fd5b610d8f82611a62565b600060208284031215611aab57600080fd5b5035919050565b600060208284031215611ac457600080fd5b8135610d8f816119e0565b600060208284031215611ae157600080fd5b81356001600160401b03811115611af757600080fd5b820160a08185031215610d8f57600080fd5b60008060008060808587031215611b1f57600080fd5b843593506020850135611b31816119e0565b92506040850135611b41816119e0565b91506060850135611b51816119e0565b939692955090935050565b8015158114610d1057600080fd5b600080600060608486031215611b7f57600080fd5b611b8884611a62565b92506020840135611b98816119e0565b91506040840135611ba881611b5c565b809150509250925092565b60008060408385031215611bc657600080fd5b823591506020830135611bd8816119e0565b809150509250929050565b60008060408385031215611bf657600080fd5b8235611c01816119e0565b91506020830135611bd8816119e0565b600181811c90821680611c2557607f821691505b602082108103611c4557634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03948516815260208101939093526040830191909152909116606082015260800190565b634e487b7160e01b600052604160045260246000fd5b600060406001600160401b03851683526020604081850152845160a06040860152611cba60e0860182611987565b905081860151603f1980878403016060880152611cd78383611987565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015611d2b57845180516001600160a01b0316835286015186830152938501936001939093019290860190611cf9565b5060608901516001600160a01b031660a08901526080890151888203830160c08a01529550611d5a8187611987565b9a9950505050505050505050565b600060208284031215611d7a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156105bb576105bb611d81565b818103818111156105bb576105bb611d81565b6001600160a01b0397881681529587166020870152604086019490945260608501929092528416608084015290921660a082015260c081019190915260e00190565b604080519081016001600160401b0381118282101715611e2157611e21611c76565b60405290565b60405160a081016001600160401b0381118282101715611e2157611e21611c76565b604051601f8201601f191681016001600160401b0381118282101715611e7157611e71611c76565b604052919050565b600082601f830112611e8a57600080fd5b81356001600160401b03811115611ea357611ea3611c76565b611eb6601f8201601f1916602001611e49565b818152846020838601011115611ecb57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112611ef957600080fd5b813560206001600160401b03821115611f1457611f14611c76565b611f22818360051b01611e49565b82815260069290921b84018101918181019086841115611f4157600080fd5b8286015b84811015611f895760408189031215611f5e5760008081fd5b611f66611dff565b8135611f71816119e0565b81528185013585820152835291830191604001611f45565b509695505050505050565b600060a08236031215611fa657600080fd5b611fae611e27565b82358152611fbe60208401611a62565b602082015260408301356001600160401b0380821115611fdd57600080fd5b611fe936838701611e79565b6040840152606085013591508082111561200257600080fd5b61200e36838701611e79565b6060840152608085013591508082111561202757600080fd5b5061203436828601611ee8565b60808301525092915050565b805169ffffffffffffffffffff81168114611a7957600080fd5b600080600080600060a0868803121561207257600080fd5b61207b86612040565b945060208601519350604086015192506060860151915061209e60808701612040565b90509295509295909350565b80820260008212600160ff1b841416156120c6576120c6611d81565b81810583148215176105bb576105bb611d81565b6000602082840312156120ec57600080fd5b8151610d8f81611b5c565b80820281158282048414176105bb576105bb611d81565b60008261212b57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561216b57816000190482111561215157612151611d81565b8085161561215e57918102915b93841c9390800290612135565b509250929050565b600082612182575060016105bb565b8161218f575060006105bb565b81600181146121a557600281146121af576121cb565b60019150506105bb565b60ff8411156121c0576121c0611d81565b50506001821b6105bb565b5060208310610133831016604e8410600b84101617156121ee575081810a6105bb565b6121f88383612130565b806000190482111561220c5761220c611d81565b029392505050565b6000610d8f8383612173565b60006020828403121561223257600080fd5b8151610d8f816119e0565b60006080828403121561224f57600080fd5b604051608081018181106001600160401b038211171561227157612271611c76565b8060405250825181526020830151602082015260408301516040820152606083015161229c81611b5c565b6060820152939250505056fea2646970667358221220cecd8d78e40cb74e912e0dde465cd0a23214e54352cc3d997d88dfd4689930c364736f6c63430008180033000000000000000000000000000000000000000000000000b8159170038f96fb00000000000000000000000075282b59b79349f145e914383a034ef592fc754d0000000000000000000000000000000000000000000000000004f94ae6af8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3c21bcecceda10000000000000000000000000000004adc67696ba383f43dd60a9e78f2c97fbbfc7cb1000000000000000000000000c0fe074a9894e7ce36c946a9298d8ad2cfa32ed5000000000000000000000000d3b06cebf099ce7da4accf578aaebfdbd6e88a93