[ { "inputs": [ { "internalType": "address", "name": "_mailbox", "type": "address" }, { "internalType": "address", "name": "_feeCollector", "type": "address" }, { "internalType": "uint256", "name": "_mintFee", "type": "uint256" }, { "internalType": "uint256", "name": "_bridgeFee", "type": "uint256" }, { "internalType": "uint256", "name": "_totalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "_idMultiplier", "type": "uint256" } ], "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": "collector", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "claimedAmount", "type": "uint256" } ], "name": "FeeEarningsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "itemId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeEarnings", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "referrer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "referrerEarnings", "type": "uint256" } ], "name": "NFTMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "srcAddress", "type": "bytes32" }, { "indexed": true, "internalType": "uint32", "name": "srcChainId", "type": "uint32" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "NFTReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "uint32", "name": "dstChainId", "type": "uint32" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeEarned", "type": "uint256" } ], "name": "NFTSent", "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": "uint32", "name": "origin", "type": "uint32" }, { "indexed": true, "internalType": "bytes32", "name": "recipient", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ReceivedTransferRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "referrer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "claimedAmount", "type": "uint256" } ], "name": "ReferrerEarningsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint32", "name": "destination", "type": "uint32" }, { "indexed": true, "internalType": "bytes32", "name": "recipient", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "SentTransferRemote", "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": [], "name": "DENOMINATOR", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_tokenBaseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_tokenURIExtension", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "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": "count", "type": "uint256" } ], "name": "batchMint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "count", "type": "uint256" }, { "internalType": "address", "name": "referrer", "type": "address" } ], "name": "batchMintWithReferrer", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "bridgeFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "referrer", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "calculateRefShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimRefEarnings", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimedFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "commonRefBips", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "name": "destinationGas", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "domains", "outputs": [ { "internalType": "uint32[]", "name": "", "type": "uint32[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" }, { "internalType": "bytes32", "name": "_router", "type": "bytes32" } ], "name": "enrollRemoteRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "_domains", "type": "uint32[]" }, { "internalType": "bytes32[]", "name": "_addresses", "type": "bytes32[]" } ], "name": "enrollRemoteRouters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "feeCollector", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeToCollect", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "uint32", "name": "_dstChain", "type": "uint32" } ], "name": "getHyperlaneMessageFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_origin", "type": "uint32" }, { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, { "internalType": "bytes", "name": "_message", "type": "bytes" } ], "name": "handle", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "hook", "outputs": [ { "internalType": "contract IPostDispatchHook", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "interchainSecurityModule", "outputs": [ { "internalType": "contract IInterchainSecurityModule", "name": "", "type": "address" } ], "stateMutability": "view", "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": [], "name": "localDomain", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mailbox", "outputs": [ { "internalType": "contract IMailbox", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mintFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "referrer", "type": "address" } ], "name": "mintWithReferrer", "outputs": [], "stateMutability": "payable", "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": "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": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "personalRefBips", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_destinationDomain", "type": "uint32" } ], "name": "quoteGasPayment", "outputs": [ { "internalType": "uint256", "name": "_gasPayment", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "refAmountClaimed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "refAmountToClaim", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "refTxsCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "resqueFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" } ], "name": "routers", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "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": "uint256", "name": "_bridgeFee", "type": "uint256" } ], "name": "setBridgeFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_bips", "type": "uint16" } ], "name": "setCommonRefBips", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "domain", "type": "uint32" }, { "internalType": "uint256", "name": "gas", "type": "uint256" } ], "name": "setDestinationGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "domain", "type": "uint32" }, { "internalType": "uint256", "name": "gas", "type": "uint256" } ], "internalType": "struct GasRouter.GasRouterConfig[]", "name": "gasConfigs", "type": "tuple[]" } ], "name": "setDestinationGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_feeCollector", "type": "address" } ], "name": "setFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_hook", "type": "address" } ], "name": "setHook", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_module", "type": "address" } ], "name": "setInterchainSecurityModule", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_mintFee", "type": "uint256" } ], "name": "setMintFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "referrer", "type": "address" }, { "internalType": "uint16", "name": "bips", "type": "uint16" } ], "name": "setPersonalRefBips", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "referrers", "type": "address[]" }, { "internalType": "uint16", "name": "bips", "type": "uint16" } ], "name": "setPersonalRefBipsBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_newTokenBaseURI", "type": "string" }, { "internalType": "string", "name": "_fileExtension", "type": "string" } ], "name": "setTokenBaseURI", "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [ { "internalType": "uint32", "name": "_dstChain", "type": "uint32" }, { "internalType": "bytes32", "name": "_receiver", "type": "bytes32" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "transferRemote", "outputs": [ { "internalType": "bytes32", "name": "messageId", "type": "bytes32" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" } ], "name": "unenrollRemoteRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "_domains", "type": "uint32[]" } ], "name": "unenrollRemoteRouters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101006040523480156200001257600080fd5b5060405162004f3938038062004f398339810160408190526200003591620002ef565b604051806040016040528060058152602001640aededacaf60db1b81525060405180604001604052806003815260200162574f5760e81b815250878080808062000085816200027160201b60201c565b620000d75760405162461bcd60e51b815260206004820152601e60248201527f4d61696c626f78436c69656e743a20696e76616c6964206d61696c626f78000060448201526064015b60405180910390fd5b6001600160a01b03821660808190526040805163234d8e3d60e21b81529051638d3638f4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014891906200034c565b63ffffffff1660a0526200015c3362000280565b50505050508160cb908162000172919062000420565b5060cc62000181828262000420565b505060d5805460ff1916905550600160d6556001600160a01b038516620001eb5760405162461bcd60e51b815260206004820152601e60248201527f46656520636f6c6c6563746f72206d757374206265206e6f6e2d7a65726f00006044820152606401620000ce565b60da80546001600160a01b0319166001600160a01b03871617905560dc84905560db8390556200021c818362000502565b6200022990600162000522565b60c0526200023981600162000522565b62000245908362000502565b60e05262000254818362000502565b6200026190600162000522565b60d7555062000538945050505050565b6001600160a01b03163b151590565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b0381168114620002ea57600080fd5b919050565b60008060008060008060c087890312156200030957600080fd5b6200031487620002d2565b95506200032460208801620002d2565b945060408701519350606087015192506080870151915060a087015190509295509295509295565b6000602082840312156200035f57600080fd5b815163ffffffff811681146200037457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003a657607f821691505b602082108103620003c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200041b57600081815260208120601f850160051c81016020861015620003f65750805b601f850160051c820191505b81811015620004175782815560010162000402565b5050505b505050565b81516001600160401b038111156200043c576200043c6200037b565b62000454816200044d845462000391565b84620003cd565b602080601f8311600181146200048c5760008415620004735750858301515b600019600386901b1c1916600185901b17855562000417565b600085815260208120601f198616915b82811015620004bd578886015182559484019460019091019084016200049c565b5085821015620004dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200051c576200051c620004ec565b92915050565b808201808211156200051c576200051c620004ec565b60805160a05160c05160e051614996620005a360003960008181610969015281816110f7015281816117c301528181611d9f0152611f1b01526000610b20015260006108d9015260008181610bac015281816116460152818161328b015261392a01526149966000f3fe60806040526004361061041b5760003560e01c806381b4e8b41161021e578063c415b95c11610123578063de523cf3116100ab578063eddd0d9c1161007a578063eddd0d9c14610c88578063efae508a14610ca8578063f2ed8c5314610cc8578063f2fde38b14610ce8578063f39c504c14610d0857600080fd5b8063de523cf314610bce578063e3d078dc14610bee578063e9198bf914610c1f578063e985e9c514610c3f57600080fd5b8063ce6e23b2116100f2578063ce6e23b214610b0e578063d082e38114610b42578063d11ba61414610b58578063d294f09314610b85578063d5438eae14610b9a57600080fd5b8063c415b95c14610a93578063c87b56dd14610ab3578063cb253c4614610ad3578063cbc1418a14610aee57600080fd5b80639236197a116101a6578063a22cb46511610175578063a22cb465146109f3578063a42dce8014610a13578063b1bd643614610a33578063b49c53a714610a53578063b88d4fde14610a7357600080fd5b80639236197a1461098b57806395d89b41146109ab578063998cdf83146109c0578063a14d4699146109e057600080fd5b80638cfd1a65116101ed5780638cfd1a65146108b25780638d3638f4146108c75780638da5cb5b14610910578063918f86741461092e57806391ba317a1461095757600080fd5b806381b4e8b41461086157806382b12dd7146108745780638456cb591461088a5780638467be0d1461089f57600080fd5b806342aeaaf9116103245780636141cc09116102ac578063715018a61161027b578063715018a6146107c957806371a15b38146107de578063775313a1146107fe578063777133dd1461082b5780637f5a7c7b1461084157600080fd5b80636141cc091461075e5780636352211e14610774578063641ddc2e1461079457806370a08231146107a957600080fd5b80634e886281116102f35780634e886281146106e05780634f6ccce71461070057806356d5d475146107205780635c975abb146107335780635f74172c1461074b57600080fd5b806342aeaaf914610651578063440df4f41461067e57806349d462ef146106a05780634b7784c1146106c057600080fd5b806323b872dd116103a757806337bb76dc1161037657806337bb76dc146105c75780633ca4fb76146105e75780633dfd3873146105fc5780633f4ba83a1461061c57806342842e0e1461063157600080fd5b806323b872dd146105475780632643bf5f146105675780632ead72f6146105875780632f745c59146105a757600080fd5b80630b2b1955116103ee5780630b2b1955146104d15780630e72cc06146104e65780631249c58b1461050657806313966db51461050e57806318160ddd1461053257600080fd5b806301ffc9a71461042057806306fdde0314610455578063081812fc14610477578063095ea7b3146104af575b600080fd5b34801561042c57600080fd5b5061044061043b366004613c26565b610d35565b60405190151581526020015b60405180910390f35b34801561046157600080fd5b5061046a610d60565b60405161044c9190613c93565b34801561048357600080fd5b50610497610492366004613ca6565b610df2565b6040516001600160a01b03909116815260200161044c565b3480156104bb57600080fd5b506104cf6104ca366004613cdb565b610e19565b005b3480156104dd57600080fd5b506104cf610f33565b3480156104f257600080fd5b506104cf610501366004613d05565b61105a565b6104cf6110c1565b34801561051a57600080fd5b5061052460dc5481565b60405190815260200161044c565b34801561053e57600080fd5b5060d354610524565b34801561055357600080fd5b506104cf610562366004613d20565b6111ac565b34801561057357600080fd5b506104cf610582366004613d6e565b6111dd565b34801561059357600080fd5b506105246105a2366004613d9d565b611223565b3480156105b357600080fd5b506105246105c2366004613cdb565b611242565b3480156105d357600080fd5b506104cf6105e2366004613db8565b6112d8565b3480156105f357600080fd5b5061046a611335565b34801561060857600080fd5b506104cf610617366004613d05565b6113c3565b34801561062857600080fd5b506104cf61142a565b34801561063d57600080fd5b506104cf61064c366004613d20565b611442565b34801561065d57600080fd5b5061052461066c366004613d05565b60e16020526000908152604090205481565b34801561068a57600080fd5b5061069361145d565b60405161044c9190613deb565b3480156106ac57600080fd5b506104cf6106bb366004613e35565b61146e565b3480156106cc57600080fd5b506104cf6106db366004613e95565b611494565b3480156106ec57600080fd5b506105246106fb366004613cdb565b61153e565b34801561070c57600080fd5b5061052461071b366004613ca6565b6115a8565b6104cf61072e366004613f29565b61163b565b34801561073f57600080fd5b5060d55460ff16610440565b6104cf610759366004613f82565b61173a565b34801561076a57600080fd5b5061052460de5481565b34801561078057600080fd5b5061049761078f366004613ca6565b611901565b3480156107a057600080fd5b506104cf611961565b3480156107b557600080fd5b506105246107c4366004613d05565b611ae7565b3480156107d557600080fd5b506104cf611af2565b3480156107ea57600080fd5b506104cf6107f9366004613fa5565b611b04565b34801561080a57600080fd5b50610524610819366004613d9d565b60ca6020526000908152604090205481565b34801561083757600080fd5b5061052460dd5481565b34801561084d57600080fd5b50606554610497906001600160a01b031681565b61052461086f366004613fe6565b611b59565b34801561088057600080fd5b5061052460db5481565b34801561089657600080fd5b506104cf611d3b565b6104cf6108ad366004613ca6565b611d53565b3480156108be57600080fd5b5061046a611e63565b3480156108d357600080fd5b506108fb7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161044c565b34801561091c57600080fd5b506033546001600160a01b0316610497565b34801561093a57600080fd5b5061094461271081565b60405161ffff909116815260200161044c565b34801561096357600080fd5b506105247f000000000000000000000000000000000000000000000000000000000000000081565b34801561099757600080fd5b506105246109a6366004613d9d565b611e70565b3480156109b757600080fd5b5061046a611e8c565b3480156109cc57600080fd5b506104cf6109db366004613ca6565b611e9b565b6104cf6109ee366004613d05565b611ea8565b3480156109ff57600080fd5b506104cf610a0e366004614019565b612043565b348015610a1f57600080fd5b506104cf610a2e366004613d05565b61204e565b348015610a3f57600080fd5b506104cf610a4e366004614055565b6120ea565b348015610a5f57600080fd5b506104cf610a6e366004613e35565b61216f565b348015610a7f57600080fd5b506104cf610a8e3660046140df565b612181565b348015610a9f57600080fd5b5060da54610497906001600160a01b031681565b348015610abf57600080fd5b5061046a610ace366004613ca6565b6121b2565b348015610adf57600080fd5b5060df546109449061ffff1681565b348015610afa57600080fd5b506104cf610b093660046141ba565b6121e9565b348015610b1a57600080fd5b506105247f000000000000000000000000000000000000000000000000000000000000000081565b348015610b4e57600080fd5b5061052460d75481565b348015610b6457600080fd5b50610524610b73366004613d05565b60e26020526000908152604090205481565b348015610b9157600080fd5b506104cf61220c565b348015610ba657600080fd5b506104977f000000000000000000000000000000000000000000000000000000000000000081565b348015610bda57600080fd5b50606654610497906001600160a01b031681565b348015610bfa57600080fd5b50610944610c09366004613d05565b60e06020526000908152604090205461ffff1681565b348015610c2b57600080fd5b506104cf610c3a366004614219565b6123e8565b348015610c4b57600080fd5b50610440610c5a366004614278565b6001600160a01b03918216600090815260d06020908152604080832093909416825291909152205460ff1690565b348015610c9457600080fd5b506104cf610ca3366004613ca6565b612497565b348015610cb457600080fd5b506104cf610cc3366004613d9d565b6124a4565b348015610cd457600080fd5b50610524610ce3366004613d9d565b6124b5565b348015610cf457600080fd5b506104cf610d03366004613d05565b6124d0565b348015610d1457600080fd5b50610524610d23366004613d05565b60e36020526000908152604090205481565b60006001600160e01b0319821663780e9d6360e01b1480610d5a5750610d5a82612546565b92915050565b606060cb8054610d6f906142a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9b906142a2565b8015610de85780601f10610dbd57610100808354040283529160200191610de8565b820191906000526020600020905b815481529060010190602001808311610dcb57829003601f168201915b5050505050905090565b6000610dfd82612596565b50600090815260cf60205260409020546001600160a01b031690565b6000610e2482611901565b9050806001600160a01b0316836001600160a01b031603610e965760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610eb25750610eb28133610c5a565b610f245760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610e8d565b610f2e83836125f5565b505050565b60da546001600160a01b0316336001600160a01b03161480610f5f57506033546001600160a01b031633145b610fbf5760405162461bcd60e51b815260206004820152602b60248201527f5265737175653a204f6e6c792066656520636f6c6c6563746f72206f72206f7760448201526a1b995c88185b1b1bddd95960aa1b6064820152608401610e8d565b604051600090339047908381818185875af1925050503d8060008114611001576040519150601f19603f3d011682016040523d82523d6000602084013e611006565b606091505b50509050806110575760405162461bcd60e51b815260206004820152601d60248201527f5265737175653a20204661696c656420746f2073656e642045746865720000006044820152606401610e8d565b50565b806001600160a01b0381163b15158061107a57506001600160a01b038116155b6110965760405162461bcd60e51b8152600401610e8d906142dc565b61109e612663565b50606680546001600160a01b0319166001600160a01b0392909216919091179055565b6110c96126bd565b6110d1612716565b60dc5434146110f25760405162461bcd60e51b8152600401610e8d90614323565b60d7547f00000000000000000000000000000000000000000000000000000000000000008111156111355760405162461bcd60e51b8152600401610e8d90614365565b60d760008154611144906143b2565b919050819055503460dd600082825461115d91906143cb565b9091555061116e9050335b8261275c565b60dc54604080519182526000602083018190529183913391600080516020614941833981519152910160405180910390a4506111aa600160d655565b565b6111b63382612776565b6111d25760405162461bcd60e51b8152600401610e8d906143de565b610f2e8383836127f4565b6111e5612663565b61271061ffff8216111561120b5760405162461bcd60e51b8152600401610e8d9061442b565b60df805461ffff191661ffff92909216919091179055565b60008061123a609763ffffffff8086169061296516565b949350505050565b600061124d8361297e565b82106112af5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610e8d565b506001600160a01b0391909116600090815260d160209081526040808320938352929052205490565b6112e0612663565b61271061ffff821611156113065760405162461bcd60e51b8152600401610e8d9061442b565b6001600160a01b0391909116600090815260e060205260409020805461ffff191661ffff909216919091179055565b60d88054611342906142a2565b80601f016020809104026020016040519081016040528092919081815260200182805461136e906142a2565b80156113bb5780601f10611390576101008083540402835291602001916113bb565b820191906000526020600020905b81548152906001019060200180831161139e57829003601f168201915b505050505081565b806001600160a01b0381163b1515806113e357506001600160a01b038116155b6113ff5760405162461bcd60e51b8152600401610e8d906142dc565b611407612663565b50606580546001600160a01b0319166001600160a01b0392909216919091179055565b611432612663565b61143a612a04565b6111aa612a4d565b610f2e83838360405180602001604052806000815250612181565b60606114696097612a9f565b905090565b611476612663565b63ffffffff91909116600090815260ca6020526040902055565b5050565b61149c612663565b61271061ffff821611156114c25760405162461bcd60e51b8152600401610e8d9061442b565b60005b82811015611538578160e060008686858181106114e4576114e4614475565b90506020020160208101906114f99190613d05565b6001600160a01b031681526020810191909152604001600020805461ffff191661ffff9290921691909117905580611530816143b2565b9150506114c5565b50505050565b6001600160a01b038216600090815260e0602052604081205461ffff168181156115685781611570565b60df5461ffff165b90508060000361158557600092505050610d5a565b6000612710611594838761448b565b61159e91906144a2565b9695505050505050565b60006115b360d35490565b82106116165760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610e8d565b60d3828154811061162957611629614475565b90600052602060002001549050919050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116bd5760405162461bcd60e51b815260206004820152602160248201527f4d61696c626f78436c69656e743a2073656e646572206e6f74206d61696c626f6044820152600f60fb1b6064820152608401610e8d565b60006116c885612b59565b90508381146117275760405162461bcd60e51b815260206004820152602560248201527f456e726f6c6c656420726f7574657220646f6573206e6f74206d61746368207360448201526432b73232b960d91b6064820152608401610e8d565b61173385858585612ba5565b5050505050565b6117426126bd565b61174a612716565b336001600160a01b0382161480159061176b57506001600160a01b03811615155b6117875760405162461bcd60e51b8152600401610e8d906144c4565b8160dc54611795919061448b565b34146117b35760405162461bcd60e51b8152600401610e8d90614323565b60005b828110156118f65760d7547f00000000000000000000000000000000000000000000000000000000000000008111156118015760405162461bcd60e51b8152600401610e8d90614365565b60dc546000611810858361153e565b905060d760008154611821906143b2565b9091555061182f8183614509565b60dd600082825461184091906143cb565b90915550506001600160a01b038516600090815260e260205260408120805483929061186d9084906143cb565b90915550506001600160a01b038516600090815260e1602052604081208054909190611898906143b2565b909155506118a7335b8461275c565b60dc5460408051918252602082018390526001600160a01b0387169185913391600080516020614941833981519152910160405180910390a450505080806118ee906143b2565b9150506117b6565b50611490600160d655565b600081815260cd60205260408120546001600160a01b031680610d5a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610e8d565b6119696126bd565b33600090815260e26020526040902054806119b95760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606401610e8d565b33600081815260e26020908152604080832083905560e3909152812080548492906119e59084906143cb565b90915550506040516000906001600160a01b0383169084908381818185875af1925050503d8060008114611a35576040519150601f19603f3d011682016040523d82523d6000602084013e611a3a565b606091505b5050905080611a975760405162461bcd60e51b8152602060048201526024808201527f526566657272616c53797374656d3a204661696c656420746f2073656e6420456044820152633a3432b960e11b6064820152608401610e8d565b816001600160a01b03167fa6183a81b1ce4e0d90156f6ec9b6f2d13c204d11884302b40b47bb456fb5915684604051611ad291815260200190565b60405180910390a25050506111aa600160d655565b6000610d5a8261297e565b611afa612663565b6111aa6000612c2f565b611b0c612663565b8060005b8181101561153857611b47848483818110611b2d57611b2d614475565b9050602002016020810190611b429190613d9d565b612c81565b611b526001826143cb565b9050611b10565b6000611b636126bd565b611b6b612716565b82611bb85760405162461bcd60e51b815260206004820152601d60248201527f576f6d65784e46543732313a20496e76616c69642072656365697665720000006044820152606401610e8d565b611bc3335b83612776565b611c2a5760405162461bcd60e51b815260206004820152603260248201527f576f6d65784e46543732313a2073656e642063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610e8d565b6000611c3585611e70565b905060db5481611c4591906143cb565b341015611ca05760405162461bcd60e51b8152602060048201526024808201527f576f6d65784e46543732313a20496e636f7272656374206d6573736167652076604482015263616c756560e01b6064820152608401610e8d565b60db5460dd6000828254611cb491906143cb565b92505081905550611cd485858560db5434611ccf9190614509565b612cbc565b60db546040805186815260208101929092529193506001600160a01b0386169163ffffffff88169133917f8c76f9a0946e85f2e4c199f247a3436d1766156d4ce90144bf16dfb353878ade910160405180910390a450611d34600160d655565b9392505050565b611d43612663565b611d4b612716565b6111aa612d2b565b611d5b6126bd565b611d63612716565b8060dc54611d71919061448b565b3414611d8f5760405162461bcd60e51b8152600401610e8d90614323565b60005b81811015611e585760d7547f0000000000000000000000000000000000000000000000000000000000000000811115611ddd5760405162461bcd60e51b8152600401610e8d90614365565b60d760008154611dec906143b2565b919050819055503460dd6000828254611e0591906143cb565b90915550611e14905033611168565b60dc54604080519182526000602083018190529183913391600080516020614941833981519152910160405180910390a45080611e50816143b2565b915050611d92565b50611057600160d655565b60d98054611342906142a2565b600080611d348360405180602001604052806000815250612d68565b606060cc8054610d6f906142a2565b611ea3612663565b60db55565b611eb06126bd565b611eb8612716565b336001600160a01b03821614801590611ed957506001600160a01b03811615155b611ef55760405162461bcd60e51b8152600401610e8d906144c4565b60dc543414611f165760405162461bcd60e51b8152600401610e8d90614323565b60d7547f0000000000000000000000000000000000000000000000000000000000000000811115611f595760405162461bcd60e51b8152600401610e8d90614365565b60dc546000611f68848361153e565b905060d760008154611f79906143b2565b90915550611f878183614509565b60dd6000828254611f9891906143cb565b90915550506001600160a01b038416600090815260e2602052604081208054839290611fc59084906143cb565b90915550506001600160a01b038416600090815260e1602052604081208054909190611ff0906143b2565b90915550611ffd336118a1565b60dc5460408051918252602082018390526001600160a01b0386169185913391600080516020614941833981519152910160405180910390a4505050611057600160d655565b611490338383612d81565b612056612663565b6001600160a01b0381166120c85760405162461bcd60e51b815260206004820152603360248201527f576f6d65784e46543732313a2046656520636f6c6c6563746f72206d757374206044820152726265206e6f6e2d7a65726f206164647265737360681b6064820152608401610e8d565b60da80546001600160a01b0319166001600160a01b0392909216919091179055565b6120f2612663565b60005b81811015610f2e5761215d83838381811061211257612112614475565b6121289260206040909202019081019150613d9d565b84848481811061213a5761213a614475565b9050604002016020013563ffffffff909116600090815260ca6020526040902055565b6121686001826143cb565b90506120f5565b612177612663565b6114908282612e4f565b61218a33611bbd565b6121a65760405162461bcd60e51b8152600401610e8d906143de565b61153884848484612e65565b606060d86121bf83612e98565b60d96040516020016121d39392919061458f565b6040516020818303038152906040529050919050565b6121f1612663565b60d86121fe848683614608565b5060d9611733828483614608565b6122146126bd565b60da546001600160a01b0316336001600160a01b0316146122875760405162461bcd60e51b815260206004820152602760248201527f576f6d65784e46543732313a204f6e6c792066656520636f6c6c6563746f7220604482015266185b1b1bddd95960ca1b6064820152608401610e8d565b60dd5460008190036122db5760405162461bcd60e51b815260206004820152601d60248201527f576f6d65784e46543732313a204e6f7468696e6720746f20636c61696d0000006044820152606401610e8d565b600060dd819055508060de60008282546122f591906143cb565b909155505060da546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612347576040519150601f19603f3d011682016040523d82523d6000602084013e61234c565b606091505b50509050806123a75760405162461bcd60e51b815260206004820152602160248201527f576f6d65784e46543732313a204661696c656420746f2073656e6420457468656044820152603960f91b6064820152608401610e8d565b60405182815233907f582c87414358df39212a275853c71633d2dc65d15ae92cc5718e7438766bea769060200160405180910390a250506111aa600160d655565b6123f0612663565b8281146124295760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610e8d565b8260005b8181101561248f5761247d86868381811061244a5761244a614475565b905060200201602081019061245f9190613d9d565b85858481811061247157612471614475565b90506020020135612e4f565b6124886001826143cb565b905061242d565b505050505050565b61249f612663565b60dc55565b6124ac612663565b61105781612c81565b6000610d5a8260405180602001604052806000815250612d68565b6124d8612663565b6001600160a01b03811661253d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e8d565b61105781612c2f565b60006001600160e01b031982166380ac58cd60e01b148061257757506001600160e01b03198216635b5e139f60e01b145b80610d5a57506301ffc9a760e01b6001600160e01b0319831614610d5a565b600081815260cd60205260409020546001600160a01b03166110575760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610e8d565b600081815260cf6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061262a82611901565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6033546001600160a01b031633146111aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e8d565b600260d6540361270f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610e8d565b600260d655565b60d55460ff16156111aa5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610e8d565b611490828260405180602001604052806000815250612f2a565b60008061278283611901565b9050806001600160a01b0316846001600160a01b031614806127c957506001600160a01b03808216600090815260d0602090815260408083209388168352929052205460ff165b8061123a5750836001600160a01b03166127e284610df2565b6001600160a01b031614949350505050565b826001600160a01b031661280782611901565b6001600160a01b03161461282d5760405162461bcd60e51b8152600401610e8d906146c7565b6001600160a01b03821661288f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610e8d565b61289c8383836001612f5d565b826001600160a01b03166128af82611901565b6001600160a01b0316146128d55760405162461bcd60e51b8152600401610e8d906146c7565b600081815260cf6020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260ce855283862080546000190190559087168086528386208054600101905586865260cd90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080612972848461308a565b915091505b9250929050565b60006001600160a01b0382166129e85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610e8d565b506001600160a01b0316600090815260ce602052604090205490565b60d55460ff166111aa5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610e8d565b612a55612a04565b60d5805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60606000612aac836130c4565b905080516001600160401b03811115612ac757612ac76140c9565b604051908082528060200260200182016040528015612af0578160200160208202803683370190505b50915060005b8151811015612b5257818181518110612b1157612b11614475565b6020026020010151838281518110612b2b57612b2b614475565b63ffffffff9092166020928302919091019091015280612b4a816143b2565b915050612af6565b5050919050565b60008080612b71609763ffffffff8087169061296516565b9150915081612b7f8561315e565b90612b9d5760405162461bcd60e51b8152600401610e8d9190613c93565b509392505050565b6000612bb1838361317f565b90506000612bbf8484613197565b9050366000612bce86866131a7565b91509150612be4612bdc8590565b8484846131b7565b838863ffffffff167fba20947a325f450d232530e5f5fce293e7963499d5309a07cee84a269f2f15a685604051612c1d91815260200190565b60405180910390a35050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612c95609763ffffffff808416906131c116565b612c9e8261315e565b906114905760405162461bcd60e51b8152600401610e8d9190613c93565b600080612cc8846131cd565b9050612cdf8684612cda888886613235565b613264565b9150848663ffffffff167fd229aacb94204188fe8042965fa6b269c62dc5818b21238779ab64bdd17efeec86604051612d1a91815260200190565b60405180910390a350949350505050565b612d33612716565b60d5805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a823390565b600080612d7484612b59565b905061123a848285613287565b816001600160a01b0316836001600160a01b031603612de25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610e8d565b6001600160a01b03838116600081815260d06020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611490609763ffffffff80851690849061333616565b612e708484846127f4565b612e7c84848484613341565b6115385760405162461bcd60e51b8152600401610e8d9061470c565b60606000612ea583613442565b60010190506000816001600160401b03811115612ec457612ec46140c9565b6040519080825280601f01601f191660200182016040528015612eee576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612ef857509392505050565b612f34838361351a565b612f416000848484613341565b610f2e5760405162461bcd60e51b8152600401610e8d9061470c565b6001811115612fcc5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610e8d565b816001600160a01b038516613028576130238160d38054600083815260d460205260408120829055600182018355919091527f915c3eb987b20e1af620c1403197bf687fb7f18513b3a73fde6e78c7072c41a60155565b61304b565b836001600160a01b0316856001600160a01b03161461304b5761304b85826136b3565b6001600160a01b0384166130675761306281613750565b611733565b846001600160a01b0316846001600160a01b0316146117335761173384826137ff565b60008181526002830160205260408120548190806130b9576130ac8585613843565b9250600091506129779050565b600192509050612977565b606060006130d18361384f565b9050806001600160401b038111156130eb576130eb6140c9565b604051908082528060200260200182016040528015613114578160200160208202803683370190505b50915060005b81811015612b525761312c848261385a565b60001c83828151811061314157613141614475565b602090810291909101015280613156816143b2565b91505061311a565b606061316f8263ffffffff16612e98565b6040516020016121d3919061475e565b600061318e60208284866147a3565b611d34916147cd565b600061318e6040602084866147a3565b36600061297283604081876147a3565b611538848461275c565b6000611d348383613866565b6060336131d983611901565b6001600160a01b0316146132185760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b6044820152606401610e8d565b61322182613883565b505060408051602081019091526000815290565b606083838360405160200161324c939291906147eb565b60405160208183030381529060405290509392505050565b60008061327085612b59565b905061327e85828686613926565b95945050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381d2ea958585856132c4896139d8565b6065546040516001600160e01b031960e088901b1681526132f595949392916001600160a01b031690600401614818565b602060405180830381865afa158015613312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123a919061486a565b6115388383836139fa565b60006001600160a01b0384163b1561343757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613385903390899088908890600401614883565b6020604051808303816000875af19250505080156133c0575060408051601f3d908101601f191682019092526133bd918101906148b6565b60015b61341d573d8080156133ee576040519150601f19603f3d011682016040523d82523d6000602084013e6133f3565b606091505b5080516000036134155760405162461bcd60e51b8152600401610e8d9061470c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061123a565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106134815772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106134ad576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106134cb57662386f26fc10000830492506010015b6305f5e10083106134e3576305f5e100830492506008015b61271083106134f757612710830492506004015b60648310613509576064830492506002015b600a8310610d5a5760010192915050565b6001600160a01b0382166135705760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610e8d565b600081815260cd60205260409020546001600160a01b0316156135d55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610e8d565b6135e3600083836001612f5d565b600081815260cd60205260409020546001600160a01b0316156136485760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610e8d565b6001600160a01b038216600081815260ce602090815260408083208054600101905584835260cd90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016136c08461297e565b6136ca9190614509565b600083815260d2602052604090205490915080821461371d576001600160a01b038416600090815260d160209081526040808320858452825280832054848452818420819055835260d290915290208190555b50600091825260d2602090815260408084208490556001600160a01b03909416835260d181528383209183525290812055565b60d35460009061376290600190614509565b600083815260d4602052604081205460d3805493945090928490811061378a5761378a614475565b906000526020600020015490508060d383815481106137ab576137ab614475565b600091825260208083209091019290925582815260d4909152604080822084905585825281205560d38054806137e3576137e36148d3565b6001900381819060005260206000200160009055905550505050565b600061380a8361297e565b6001600160a01b03909316600090815260d160209081526040808320868452825280832085905593825260d29052919091209190915550565b6000611d348383613a17565b6000610d5a82613a2f565b6000611d348383613a39565b60008181526002830160205260408120819055611d348383613a63565b600061388e82611901565b905061389e816000846001612f5d565b6138a782611901565b600083815260cf6020908152604080832080546001600160a01b03199081169091556001600160a01b03851680855260ce8452828520805460001901905587855260cd909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310b83dc0848787866139648b6139d8565b6065546040516001600160e01b031960e089901b16815261399595949392916001600160a01b031690600401614818565b60206040518083038185885af11580156139b3573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061327e919061486a565b63ffffffff8116600090815260ca6020526040902054606090610d5a90613a6f565b6000828152600284016020526040812082905561123a8484613a8d565b60008181526001830160205260408120541515611d34565b6000610d5a825490565b6000826000018281548110613a5057613a50614475565b9060005260206000200154905092915050565b6000611d348383613a99565b6060610d5a6000833360405180602001604052806000815250613b8c565b6000611d348383613bc1565b60008181526001830160205260408120548015613b82576000613abd600183614509565b8554909150600090613ad190600190614509565b9050818114613b36576000866000018281548110613af157613af1614475565b9060005260206000200154905080876000018481548110613b1457613b14614475565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613b4757613b476148d3565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d5a565b6000915050610d5a565b6060600185858585604051602001613ba89594939291906148e9565b6040516020818303038152906040529050949350505050565b6000818152600183016020526040812054613c0857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d5a565b506000610d5a565b6001600160e01b03198116811461105757600080fd5b600060208284031215613c3857600080fd5b8135611d3481613c10565b60005b83811015613c5e578181015183820152602001613c46565b50506000910152565b60008151808452613c7f816020860160208601613c43565b601f01601f19169290920160200192915050565b602081526000611d346020830184613c67565b600060208284031215613cb857600080fd5b5035919050565b80356001600160a01b0381168114613cd657600080fd5b919050565b60008060408385031215613cee57600080fd5b613cf783613cbf565b946020939093013593505050565b600060208284031215613d1757600080fd5b611d3482613cbf565b600080600060608486031215613d3557600080fd5b613d3e84613cbf565b9250613d4c60208501613cbf565b9150604084013590509250925092565b803561ffff81168114613cd657600080fd5b600060208284031215613d8057600080fd5b611d3482613d5c565b803563ffffffff81168114613cd657600080fd5b600060208284031215613daf57600080fd5b611d3482613d89565b60008060408385031215613dcb57600080fd5b613dd483613cbf565b9150613de260208401613d5c565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613e2957835163ffffffff1683529284019291840191600101613e07565b50909695505050505050565b60008060408385031215613e4857600080fd5b613cf783613d89565b60008083601f840112613e6357600080fd5b5081356001600160401b03811115613e7a57600080fd5b6020830191508360208260051b850101111561297757600080fd5b600080600060408486031215613eaa57600080fd5b83356001600160401b03811115613ec057600080fd5b613ecc86828701613e51565b9094509250613edf905060208501613d5c565b90509250925092565b60008083601f840112613efa57600080fd5b5081356001600160401b03811115613f1157600080fd5b60208301915083602082850101111561297757600080fd5b60008060008060608587031215613f3f57600080fd5b613f4885613d89565b93506020850135925060408501356001600160401b03811115613f6a57600080fd5b613f7687828801613ee8565b95989497509550505050565b60008060408385031215613f9557600080fd5b82359150613de260208401613cbf565b60008060208385031215613fb857600080fd5b82356001600160401b03811115613fce57600080fd5b613fda85828601613e51565b90969095509350505050565b600080600060608486031215613ffb57600080fd5b61400484613d89565b95602085013595506040909401359392505050565b6000806040838503121561402c57600080fd5b61403583613cbf565b91506020830135801515811461404a57600080fd5b809150509250929050565b6000806020838503121561406857600080fd5b82356001600160401b038082111561407f57600080fd5b818501915085601f83011261409357600080fd5b8135818111156140a257600080fd5b8660208260061b85010111156140b757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156140f557600080fd5b6140fe85613cbf565b935061410c60208601613cbf565b92506040850135915060608501356001600160401b038082111561412f57600080fd5b818701915087601f83011261414357600080fd5b813581811115614155576141556140c9565b604051601f8201601f19908116603f0116810190838211818310171561417d5761417d6140c9565b816040528281528a602084870101111561419657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080600080604085870312156141d057600080fd5b84356001600160401b03808211156141e757600080fd5b6141f388838901613ee8565b9096509450602087013591508082111561420c57600080fd5b50613f7687828801613ee8565b6000806000806040858703121561422f57600080fd5b84356001600160401b038082111561424657600080fd5b61425288838901613e51565b9096509450602087013591508082111561426b57600080fd5b50613f7687828801613e51565b6000806040838503121561428b57600080fd5b61429483613cbf565b9150613de260208401613cbf565b600181811c908216806142b657607f821691505b6020821081036142d657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526027908201527f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742060408201526673657474696e6760c81b606082015260800190565b60208082526022908201527f576f6d65784e46543732313a20496e73756666696369656e74206d696e742066604082015261656560f01b606082015260800190565b6020808252601f908201527f576f6d65784e46543732313a204d696e742065786365656473206c696d697400604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600182016143c4576143c461439c565b5060010190565b80820180821115610d5a57610d5a61439c565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602a908201527f526566657272616c53797374656d3a20526566657272616c20626970732061726040820152690ca40e8dede40d0d2ced60b31b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610d5a57610d5a61439c565b6000826144bf57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f576f6d65784e46543732313a20496e76616c6964207265666572726572206164604082015264647265737360d81b606082015260800190565b81810381811115610d5a57610d5a61439c565b60008154614529816142a2565b60018281168015614541576001811461455657614585565b60ff1984168752821515830287019450614585565b8560005260208060002060005b8581101561457c5781548a820152908401908201614563565b50505082870194505b5050505092915050565b600061459b828661451c565b84516145ab818360208901613c43565b6145b78183018661451c565b979650505050505050565b601f821115610f2e57600081815260208120601f850160051c810160208610156145e95750805b601f850160051c820191505b8181101561248f578281556001016145f5565b6001600160401b0383111561461f5761461f6140c9565b6146338361462d83546142a2565b836145c2565b6000601f841160018114614667576000851561464f5750838201355b600019600387901b1c1916600186901b178355611733565b600083815260209020601f19861690835b828110156146985786850135825560209485019460019092019101614678565b50868210156146b55760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f4e6f20726f7574657220656e726f6c6c656420666f7220646f6d61696e3a200081526000825161479681601f850160208701613c43565b91909101601f0192915050565b600080858511156147b357600080fd5b838611156147c057600080fd5b5050820193919092039150565b80356020831015610d5a57600019602084900360031b1b1692915050565b83815282602082015260008251614809816040850160208701613c43565b91909101604001949350505050565b63ffffffff8616815284602082015260a06040820152600061483d60a0830186613c67565b828103606084015261484f8186613c67565b91505060018060a01b03831660808301529695505050505050565b60006020828403121561487c57600080fd5b5051919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061159e90830184613c67565b6000602082840312156148c857600080fd5b8151611d3481613c10565b634e487b7160e01b600052603160045260246000fd5b61ffff60f01b8660f01b1681528460028201528360228201526bffffffffffffffffffffffff198360601b1660428201526000825161492f816056850160208701613c43565b91909101605601969550505050505056fedc9e7f115f499a243fe74d676de78b20c5c147ba36ff1e3bfc8d9f1821d30385a264697066735822122081f2f8538eb61e6f15f384445725e8e2fceccd7afe6cf02bd4e43a3f53607c0664736f6c63430008130033000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6000000000000000000000000149676d254f9c01f1011c580b8f3dfd702da33330000000000000000000000000000000000000000000000000018de76816d8000000000000000000000000000000000000000000000000000000c6f3b40b6c0000000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000000000008