Feature Tip: Add private address tag to any address under My Name Tag !
AXIE is a Non-Fungible Token (NFT) that is not fully compliant with the ERC 721 standard. This is because it was deployed before the standard had become finalized.
Overview
Max Total Supply
283,783 AXIE
Holders
45,278 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AxieCore
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-04-02 */ pragma solidity ^0.4.19; // File: contracts/erc/erc165/IERC165.sol /// @title ERC-165 Standard Interface Detection /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md interface IERC165 { /// @notice Query if a contract implements an interface /// @param interfaceID The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceID` and /// `interfaceID` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceID) external view returns (bool); } // File: contracts/erc/erc165/ERC165.sol contract ERC165 is IERC165 { /// @dev You must not set element 0xffffffff to true mapping (bytes4 => bool) internal supportedInterfaces; function ERC165() internal { supportedInterfaces[0x01ffc9a7] = true; // ERC-165 } function supportsInterface(bytes4 interfaceID) external view returns (bool) { return supportedInterfaces[interfaceID]; } } // File: contracts/erc/erc721/IERC721Base.sol /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md /// Note: the ERC-165 identifier for this interface is 0x6466353c interface IERC721Base /* is IERC165 */ { /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _owner An address for whom to query the balance /// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address _owner) external view returns (uint256); /// @notice Find the owner of an NFT /// @param _tokenId The identifier for an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @return The address of the owner of the NFT function ownerOf(uint256 _tokenId) external view returns (address); /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param _data Additional data with no specified format, sent in call to `_to` // solium-disable-next-line arg-overflow function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external payable; /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to [] /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external payable; /// @notice Set or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// @dev Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param _approved The new approved NFT controller /// @param _tokenId The NFT to approve function approve(address _approved, uint256 _tokenId) external payable; /// @notice Enable or disable approval for a third party ("operator") to manage /// all your asset. /// @dev Emits the ApprovalForAll event /// @param _operator Address to add to the set of authorized operators. /// @param _approved True if the operators is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Get the approved address for a single NFT /// @dev Throws if `_tokenId` is not a valid NFT /// @param _tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 _tokenId) external view returns (address); /// @notice Query if an address is an authorized operator for another address /// @param _owner The address that owns the NFTs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool); } // File: contracts/erc/erc721/IERC721Enumerable.sol /// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md /// Note: the ERC-165 identifier for this interface is 0x780e9d63 interface IERC721Enumerable /* is IERC721Base */ { /// @notice Count NFTs tracked by this contract /// @return A count of valid NFTs tracked by this contract, where each one of /// them has an assigned and queryable owner not equal to the zero address function totalSupply() external view returns (uint256); /// @notice Enumerate valid NFTs /// @dev Throws if `_index` >= `totalSupply()`. /// @param _index A counter less than `totalSupply()` /// @return The token identifier for the `_index`th NFT, /// (sort order not specified) function tokenByIndex(uint256 _index) external view returns (uint256); /// @notice Enumerate NFTs assigned to an owner /// @dev Throws if `_index` >= `balanceOf(_owner)` or if /// `_owner` is the zero address, representing invalid NFTs. /// @param _owner An address where we are interested in NFTs owned by them /// @param _index A counter less than `balanceOf(_owner)` /// @return The token identifier for the `_index`th NFT assigned to `_owner`, /// (sort order not specified) function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _tokenId); } // File: contracts/erc/erc721/IERC721TokenReceiver.sol /// @dev Note: the ERC-165 identifier for this interface is 0xf0b9e5ba interface IERC721TokenReceiver { /// @notice Handle the receipt of an NFT /// @dev The ERC721 smart contract calls this function on the recipient /// after a `transfer`. This function MAY throw to revert and reject the /// transfer. This function MUST use 50,000 gas or less. Return of other /// than the magic value MUST result in the transaction being reverted. /// Note: the contract address is always the message sender. /// @param _from The sending address /// @param _tokenId The NFT identifier which is being transfered /// @param _data Additional data with no specified format /// @return `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))` /// unless throwing function onERC721Received(address _from, uint256 _tokenId, bytes _data) external returns (bytes4); } // File: contracts/core/dependency/AxieManager.sol interface AxieSpawningManager { function isSpawningAllowed(uint256 _genes, address _owner) external returns (bool); function isRebirthAllowed(uint256 _axieId, uint256 _genes) external returns (bool); } interface AxieRetirementManager { function isRetirementAllowed(uint256 _axieId, bool _rip) external returns (bool); } interface AxieMarketplaceManager { function isTransferAllowed(address _from, address _to, uint256 _axieId) external returns (bool); } interface AxieGeneManager { function isEvolvementAllowed(uint256 _axieId, uint256 _newGenes) external returns (bool); } // File: contracts/core/dependency/AxieDependency.sol contract AxieDependency { address public whitelistSetterAddress; AxieSpawningManager public spawningManager; AxieRetirementManager public retirementManager; AxieMarketplaceManager public marketplaceManager; AxieGeneManager public geneManager; mapping (address => bool) public whitelistedSpawner; mapping (address => bool) public whitelistedByeSayer; mapping (address => bool) public whitelistedMarketplace; mapping (address => bool) public whitelistedGeneScientist; function AxieDependency() internal { whitelistSetterAddress = msg.sender; } modifier onlyWhitelistSetter() { require(msg.sender == whitelistSetterAddress); _; } modifier whenSpawningAllowed(uint256 _genes, address _owner) { require( spawningManager == address(0) || spawningManager.isSpawningAllowed(_genes, _owner) ); _; } modifier whenRebirthAllowed(uint256 _axieId, uint256 _genes) { require( spawningManager == address(0) || spawningManager.isRebirthAllowed(_axieId, _genes) ); _; } modifier whenRetirementAllowed(uint256 _axieId, bool _rip) { require( retirementManager == address(0) || retirementManager.isRetirementAllowed(_axieId, _rip) ); _; } modifier whenTransferAllowed(address _from, address _to, uint256 _axieId) { require( marketplaceManager == address(0) || marketplaceManager.isTransferAllowed(_from, _to, _axieId) ); _; } modifier whenEvolvementAllowed(uint256 _axieId, uint256 _newGenes) { require( geneManager == address(0) || geneManager.isEvolvementAllowed(_axieId, _newGenes) ); _; } modifier onlySpawner() { require(whitelistedSpawner[msg.sender]); _; } modifier onlyByeSayer() { require(whitelistedByeSayer[msg.sender]); _; } modifier onlyMarketplace() { require(whitelistedMarketplace[msg.sender]); _; } modifier onlyGeneScientist() { require(whitelistedGeneScientist[msg.sender]); _; } /* * @dev Setting the whitelist setter address to `address(0)` would be a irreversible process. * This is to lock changes to Axie's contracts after their development is done. */ function setWhitelistSetter(address _newSetter) external onlyWhitelistSetter { whitelistSetterAddress = _newSetter; } function setSpawningManager(address _manager) external onlyWhitelistSetter { spawningManager = AxieSpawningManager(_manager); } function setRetirementManager(address _manager) external onlyWhitelistSetter { retirementManager = AxieRetirementManager(_manager); } function setMarketplaceManager(address _manager) external onlyWhitelistSetter { marketplaceManager = AxieMarketplaceManager(_manager); } function setGeneManager(address _manager) external onlyWhitelistSetter { geneManager = AxieGeneManager(_manager); } function setSpawner(address _spawner, bool _whitelisted) external onlyWhitelistSetter { require(whitelistedSpawner[_spawner] != _whitelisted); whitelistedSpawner[_spawner] = _whitelisted; } function setByeSayer(address _byeSayer, bool _whitelisted) external onlyWhitelistSetter { require(whitelistedByeSayer[_byeSayer] != _whitelisted); whitelistedByeSayer[_byeSayer] = _whitelisted; } function setMarketplace(address _marketplace, bool _whitelisted) external onlyWhitelistSetter { require(whitelistedMarketplace[_marketplace] != _whitelisted); whitelistedMarketplace[_marketplace] = _whitelisted; } function setGeneScientist(address _geneScientist, bool _whitelisted) external onlyWhitelistSetter { require(whitelistedGeneScientist[_geneScientist] != _whitelisted); whitelistedGeneScientist[_geneScientist] = _whitelisted; } } // File: contracts/core/AxieAccessControl.sol contract AxieAccessControl { address public ceoAddress; address public cfoAddress; address public cooAddress; function AxieAccessControl() internal { ceoAddress = msg.sender; } modifier onlyCEO() { require(msg.sender == ceoAddress); _; } modifier onlyCFO() { require(msg.sender == cfoAddress); _; } modifier onlyCOO() { require(msg.sender == cooAddress); _; } modifier onlyCLevel() { require( // solium-disable operator-whitespace msg.sender == ceoAddress || msg.sender == cfoAddress || msg.sender == cooAddress // solium-enable operator-whitespace ); _; } function setCEO(address _newCEO) external onlyCEO { require(_newCEO != address(0)); ceoAddress = _newCEO; } function setCFO(address _newCFO) external onlyCEO { cfoAddress = _newCFO; } function setCOO(address _newCOO) external onlyCEO { cooAddress = _newCOO; } function withdrawBalance() external onlyCFO { cfoAddress.transfer(this.balance); } } // File: contracts/core/lifecycle/AxiePausable.sol contract AxiePausable is AxieAccessControl { bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused { require(paused); _; } function pause() external onlyCLevel whenNotPaused { paused = true; } function unpause() public onlyCEO whenPaused { paused = false; } } // File: zeppelin/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } // File: contracts/core/erc721/AxieERC721BaseEnumerable.sol contract AxieERC721BaseEnumerable is ERC165, IERC721Base, IERC721Enumerable, AxieDependency, AxiePausable { using SafeMath for uint256; // @dev Total amount of tokens. uint256 private _totalTokens; // @dev Mapping from token index to ID. mapping (uint256 => uint256) private _overallTokenId; // @dev Mapping from token ID to index. mapping (uint256 => uint256) private _overallTokenIndex; // @dev Mapping from token ID to owner. mapping (uint256 => address) private _tokenOwner; // @dev For a given owner and a given operator, store whether // the operator is allowed to manage tokens on behalf of the owner. mapping (address => mapping (address => bool)) private _tokenOperator; // @dev Mapping from token ID to approved address. mapping (uint256 => address) private _tokenApproval; // @dev Mapping from owner to list of owned token IDs. mapping (address => uint256[]) private _ownedTokens; // @dev Mapping from token ID to index in the owned token list. mapping (uint256 => uint256) private _ownedTokenIndex; function AxieERC721BaseEnumerable() internal { supportedInterfaces[0x6466353c] = true; // ERC-721 Base supportedInterfaces[0x780e9d63] = true; // ERC-721 Enumerable } // solium-disable function-order modifier mustBeValidToken(uint256 _tokenId) { require(_tokenOwner[_tokenId] != address(0)); _; } function _isTokenOwner(address _ownerToCheck, uint256 _tokenId) private view returns (bool) { return _tokenOwner[_tokenId] == _ownerToCheck; } function _isTokenOperator(address _operatorToCheck, uint256 _tokenId) private view returns (bool) { return whitelistedMarketplace[_operatorToCheck] || _tokenOperator[_tokenOwner[_tokenId]][_operatorToCheck]; } function _isApproved(address _approvedToCheck, uint256 _tokenId) private view returns (bool) { return _tokenApproval[_tokenId] == _approvedToCheck; } modifier onlyTokenOwner(uint256 _tokenId) { require(_isTokenOwner(msg.sender, _tokenId)); _; } modifier onlyTokenOwnerOrOperator(uint256 _tokenId) { require(_isTokenOwner(msg.sender, _tokenId) || _isTokenOperator(msg.sender, _tokenId)); _; } modifier onlyTokenAuthorized(uint256 _tokenId) { require( // solium-disable operator-whitespace _isTokenOwner(msg.sender, _tokenId) || _isTokenOperator(msg.sender, _tokenId) || _isApproved(msg.sender, _tokenId) // solium-enable operator-whitespace ); _; } // ERC-721 Base function balanceOf(address _owner) external view returns (uint256) { require(_owner != address(0)); return _ownedTokens[_owner].length; } function ownerOf(uint256 _tokenId) external view mustBeValidToken(_tokenId) returns (address) { return _tokenOwner[_tokenId]; } function _addTokenTo(address _to, uint256 _tokenId) private { require(_to != address(0)); _tokenOwner[_tokenId] = _to; uint256 length = _ownedTokens[_to].length; _ownedTokens[_to].push(_tokenId); _ownedTokenIndex[_tokenId] = length; } function _mint(address _to, uint256 _tokenId) internal { require(_tokenOwner[_tokenId] == address(0)); _addTokenTo(_to, _tokenId); _overallTokenId[_totalTokens] = _tokenId; _overallTokenIndex[_tokenId] = _totalTokens; _totalTokens = _totalTokens.add(1); Transfer(address(0), _to, _tokenId); } function _removeTokenFrom(address _from, uint256 _tokenId) private { require(_from != address(0)); uint256 _tokenIndex = _ownedTokenIndex[_tokenId]; uint256 _lastTokenIndex = _ownedTokens[_from].length.sub(1); uint256 _lastTokenId = _ownedTokens[_from][_lastTokenIndex]; _tokenOwner[_tokenId] = address(0); // Insert the last token into the position previously occupied by the removed token. _ownedTokens[_from][_tokenIndex] = _lastTokenId; _ownedTokenIndex[_lastTokenId] = _tokenIndex; // Resize the array. delete _ownedTokens[_from][_lastTokenIndex]; _ownedTokens[_from].length--; // Remove the array if no more tokens are owned to prevent pollution. if (_ownedTokens[_from].length == 0) { delete _ownedTokens[_from]; } // Update the index of the removed token. delete _ownedTokenIndex[_tokenId]; } function _burn(uint256 _tokenId) internal { address _from = _tokenOwner[_tokenId]; require(_from != address(0)); _removeTokenFrom(_from, _tokenId); _totalTokens = _totalTokens.sub(1); uint256 _tokenIndex = _overallTokenIndex[_tokenId]; uint256 _lastTokenId = _overallTokenId[_totalTokens]; delete _overallTokenIndex[_tokenId]; delete _overallTokenId[_totalTokens]; _overallTokenId[_tokenIndex] = _lastTokenId; _overallTokenIndex[_lastTokenId] = _tokenIndex; Transfer(_from, address(0), _tokenId); } function _isContract(address _address) private view returns (bool) { uint _size; // solium-disable-next-line security/no-inline-assembly assembly { _size := extcodesize(_address) } return _size > 0; } function _transferFrom( address _from, address _to, uint256 _tokenId, bytes _data, bool _check ) internal mustBeValidToken(_tokenId) onlyTokenAuthorized(_tokenId) whenTransferAllowed(_from, _to, _tokenId) { require(_isTokenOwner(_from, _tokenId)); require(_to != address(0)); require(_to != _from); _removeTokenFrom(_from, _tokenId); delete _tokenApproval[_tokenId]; Approval(_from, address(0), _tokenId); _addTokenTo(_to, _tokenId); if (_check && _isContract(_to)) { IERC721TokenReceiver(_to).onERC721Received.gas(50000)(_from, _tokenId, _data); } Transfer(_from, _to, _tokenId); } // solium-disable arg-overflow function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external payable { _transferFrom(_from, _to, _tokenId, _data, true); } function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable { _transferFrom(_from, _to, _tokenId, "", true); } function transferFrom(address _from, address _to, uint256 _tokenId) external payable { _transferFrom(_from, _to, _tokenId, "", false); } // solium-enable arg-overflow function approve( address _approved, uint256 _tokenId ) external payable mustBeValidToken(_tokenId) onlyTokenOwnerOrOperator(_tokenId) whenNotPaused { address _owner = _tokenOwner[_tokenId]; require(_owner != _approved); require(_tokenApproval[_tokenId] != _approved); _tokenApproval[_tokenId] = _approved; Approval(_owner, _approved, _tokenId); } function setApprovalForAll(address _operator, bool _approved) external whenNotPaused { require(_tokenOperator[msg.sender][_operator] != _approved); _tokenOperator[msg.sender][_operator] = _approved; ApprovalForAll(msg.sender, _operator, _approved); } function getApproved(uint256 _tokenId) external view mustBeValidToken(_tokenId) returns (address) { return _tokenApproval[_tokenId]; } function isApprovedForAll(address _owner, address _operator) external view returns (bool) { return _tokenOperator[_owner][_operator]; } // ERC-721 Enumerable function totalSupply() external view returns (uint256) { return _totalTokens; } function tokenByIndex(uint256 _index) external view returns (uint256) { require(_index < _totalTokens); return _overallTokenId[_index]; } function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _tokenId) { require(_owner != address(0)); require(_index < _ownedTokens[_owner].length); return _ownedTokens[_owner][_index]; } } // File: contracts/erc/erc721/IERC721Metadata.sol /// @title ERC-721 Non-Fungible Token Standard, optional metadata extension /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md /// Note: the ERC-165 identifier for this interface is 0x5b5e139f interface IERC721Metadata /* is IERC721Base */ { /// @notice A descriptive name for a collection of NFTs in this contract function name() external pure returns (string _name); /// @notice An abbreviated name for NFTs in this contract function symbol() external pure returns (string _symbol); /// @notice A distinct Uniform Resource Identifier (URI) for a given asset. /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC /// 3986. The URI may point to a JSON file that conforms to the "ERC721 /// Metadata JSON Schema". function tokenURI(uint256 _tokenId) external view returns (string); } // File: contracts/core/erc721/AxieERC721Metadata.sol contract AxieERC721Metadata is AxieERC721BaseEnumerable, IERC721Metadata { string public tokenURIPrefix = "https://axieinfinity.com/erc/721/axies/"; string public tokenURISuffix = ".json"; function AxieERC721Metadata() internal { supportedInterfaces[0x5b5e139f] = true; // ERC-721 Metadata } function name() external pure returns (string) { return "Axie"; } function symbol() external pure returns (string) { return "AXIE"; } function setTokenURIAffixes(string _prefix, string _suffix) external onlyCEO { tokenURIPrefix = _prefix; tokenURISuffix = _suffix; } function tokenURI( uint256 _tokenId ) external view mustBeValidToken(_tokenId) returns (string) { bytes memory _tokenURIPrefixBytes = bytes(tokenURIPrefix); bytes memory _tokenURISuffixBytes = bytes(tokenURISuffix); uint256 _tmpTokenId = _tokenId; uint256 _length; do { _length++; _tmpTokenId /= 10; } while (_tmpTokenId > 0); bytes memory _tokenURIBytes = new bytes(_tokenURIPrefixBytes.length + _length + 5); uint256 _i = _tokenURIBytes.length - 6; _tmpTokenId = _tokenId; do { _tokenURIBytes[_i--] = byte(48 + _tmpTokenId % 10); _tmpTokenId /= 10; } while (_tmpTokenId > 0); for (_i = 0; _i < _tokenURIPrefixBytes.length; _i++) { _tokenURIBytes[_i] = _tokenURIPrefixBytes[_i]; } for (_i = 0; _i < _tokenURISuffixBytes.length; _i++) { _tokenURIBytes[_tokenURIBytes.length + _i - 5] = _tokenURISuffixBytes[_i]; } return string(_tokenURIBytes); } } // File: contracts/core/erc721/AxieERC721.sol // solium-disable-next-line no-empty-blocks contract AxieERC721 is AxieERC721BaseEnumerable, AxieERC721Metadata { } // File: contracts/core/AxieCore.sol // solium-disable-next-line no-empty-blocks contract AxieCore is AxieERC721 { struct Axie { uint256 genes; uint256 bornAt; } Axie[] axies; event AxieSpawned(uint256 indexed _axieId, address indexed _owner, uint256 _genes); event AxieRebirthed(uint256 indexed _axieId, uint256 _genes); event AxieRetired(uint256 indexed _axieId); event AxieEvolved(uint256 indexed _axieId, uint256 _oldGenes, uint256 _newGenes); function AxieCore() public { axies.push(Axie(0, now)); // The void Axie _spawnAxie(0, msg.sender); // Will be Puff _spawnAxie(0, msg.sender); // Will be Kotaro _spawnAxie(0, msg.sender); // Will be Ginger _spawnAxie(0, msg.sender); // Will be Stella } function getAxie( uint256 _axieId ) external view mustBeValidToken(_axieId) returns (uint256 /* _genes */, uint256 /* _bornAt */) { Axie storage _axie = axies[_axieId]; return (_axie.genes, _axie.bornAt); } function spawnAxie( uint256 _genes, address _owner ) external onlySpawner whenSpawningAllowed(_genes, _owner) returns (uint256) { return _spawnAxie(_genes, _owner); } function rebirthAxie( uint256 _axieId, uint256 _genes ) external onlySpawner mustBeValidToken(_axieId) whenRebirthAllowed(_axieId, _genes) { Axie storage _axie = axies[_axieId]; _axie.genes = _genes; _axie.bornAt = now; AxieRebirthed(_axieId, _genes); } function retireAxie( uint256 _axieId, bool _rip ) external onlyByeSayer whenRetirementAllowed(_axieId, _rip) { _burn(_axieId); if (_rip) { delete axies[_axieId]; } AxieRetired(_axieId); } function evolveAxie( uint256 _axieId, uint256 _newGenes ) external onlyGeneScientist mustBeValidToken(_axieId) whenEvolvementAllowed(_axieId, _newGenes) { uint256 _oldGenes = axies[_axieId].genes; axies[_axieId].genes = _newGenes; AxieEvolved(_axieId, _oldGenes, _newGenes); } function _spawnAxie(uint256 _genes, address _owner) private returns (uint256 _axieId) { Axie memory _axie = Axie(_genes, now); _axieId = axies.push(_axie) - 1; _mint(_owner, _axieId); AxieSpawned(_axieId, _owner, _genes); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_approved","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_axieId","type":"uint256"},{"name":"_genes","type":"uint256"}],"name":"rebirthAxie","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistSetterAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"marketplaceManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"setRetirementManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_geneScientist","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setGeneScientist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"setMarketplaceManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newCFO","type":"address"}],"name":"setCFO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"retirementManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newSetter","type":"address"}],"name":"setWhitelistSetter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_genes","type":"uint256"},{"name":"_owner","type":"address"}],"name":"spawnAxie","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_marketplace","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setMarketplace","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"geneManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_byeSayer","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setByeSayer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"setSpawningManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"setGeneManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedByeSayer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"spawningManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedGeneScientist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spawner","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setSpawner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedMarketplace","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_axieId","type":"uint256"}],"name":"getAxie","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_axieId","type":"uint256"},{"name":"_newGenes","type":"uint256"}],"name":"evolveAxie","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"tokenURIPrefix","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedSpawner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_axieId","type":"uint256"},{"name":"_rip","type":"bool"}],"name":"retireAxie","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenURISuffix","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_prefix","type":"string"},{"name":"_suffix","type":"string"}],"name":"setTokenURIAffixes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_axieId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_genes","type":"uint256"}],"name":"AxieSpawned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_axieId","type":"uint256"},{"indexed":false,"name":"_genes","type":"uint256"}],"name":"AxieRebirthed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_axieId","type":"uint256"}],"name":"AxieRetired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_axieId","type":"uint256"},{"indexed":false,"name":"_oldGenes","type":"uint256"},{"indexed":false,"name":"_newGenes","type":"uint256"}],"name":"AxieEvolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]
Contract Creation Code
60606040818152600c805460a060020a60ff02191690555190810160405280602781526020017f68747470733a2f2f61786965696e66696e6974792e636f6d2f6572632f37323181526020017f2f61786965732f00000000000000000000000000000000000000000000000000815250601590805162000084929160200190620004bf565b5060408051908101604052600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208201526016908051620000ce929160200190620004bf565b503415620000db57600080fd5b600060208190527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5805460ff1990811660019081179092558154600160a060020a033316600160a060020a031991821681178455600a80549092161790557f77218e6e0a7dc0a9ee09daeaab3dc6c60094df0c2747e685a4b5f67f6cd5ebd880548216831790557f77b7bbe0e49b76487c9476b5db3354cf5270619d0037ccb899c2a4c4a75b431880548216831790557f5b5e139f000000000000000000000000000000000000000000000000000000009092527f9562381dfbc2d8b8b66e765249f330164b73e329e5f01670660643571d1974df805490921681179091556017805490918101620001ee838262000544565b916000526020600020906002020160006040805190810160405260008152426020820152919050815181556020820151816001015550505062000247600033620002a26401000000000262001fdf176401000000009004565b506200026360003364010000000062001fdf620002a282021704565b506200027f60003364010000000062001fdf620002a282021704565b506200029b60003364010000000062001fdf620002a282021704565b50620005f4565b6000620002ae62000578565b6040805190810160405284815242602082015260178054919250600191808301620002da838262000544565b6000928352602090922084916002020181518155602082015160019091015550039150620003178383640100000000620023966200035c82021704565b82600160a060020a0316827f0aa75ef3ef0b2c4f092828edf4e4ded5a223d08350535710b957679883ff3a3c8660405190815260200160405180910390a35092915050565b600081815260106020526040902054600160a060020a0316156200037f57600080fd5b6200039982826401000000006200230b6200042282021704565b600d80546000908152600e602090815260408083208590559254848352600f909152919020819055620003dc90600164010000000062002453620004a882021704565b600d55600160a060020a03821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35050565b6000600160a060020a03831615156200043a57600080fd5b5060008181526010602090815260408083208054600160a060020a031916600160a060020a03871690811790915583526013909152902080549081600181016200048583826200058f565b506000918252602080832091909101849055928152601490925260409091205550565b600082820183811015620004b857fe5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200050257805160ff191683800117855562000532565b8280016001018555821562000532579182015b828111156200053257825182559160200191906001019062000515565b5062000540929150620005b1565b5090565b8154818355818115116200057357600202816002028360005260206000209182019101620005739190620005d1565b505050565b604080519081016040526000808252602082015290565b8154818355818115116200057357600083815260209020620005739181019083015b620005ce91905b80821115620005405760008155600101620005b8565b90565b620005ce91905b80821115620005405760008082556001820155600201620005d8565b6125e080620006046000396000f3006060604052600436106102585763ffffffff60e060020a60003504166301ffc9a7811461025d5780630519ce79146102a657806306fdde03146102d5578063081812fc1461035f578063095ea7b3146103755780630a0f81681461038e5780630d2cc54a146103a15780631412409a146103ba57806318160ddd146103cd5780631889500c146103f25780631a68b1a1146104055780631f8df2cd1461042457806323b872dd1461044857806327d7874c146104655780632ba73c15146104845780632f745c59146104a35780632ffb054e146104c55780633f4ba83a146104e457806342842e0e146104f75780634e0a3379146105145780634f6ccce71461053357806352ac882c14610549578063547a5eee1461055c5780635c975abb1461057b5780635dcc6dbc1461058e5780635fd8c710146105b05780636352211e146105c357806370a08231146105d95780637419e77a146105f857806380173a191461061c57806381b2dad91461062f5780638456cb59146106535780638c37e31e14610666578063927aaa7c1461068557806395d89b41146106a45780639848146a146106b757806398f5ee5d146106d657806399165bf4146106e95780639f186edb14610708578063a22cb4651461072c578063a306dfbe14610750578063a64729061461076f578063ae67b4c31461079d578063b047fb50146107b6578063b88d4fde146107c9578063c0ac9983146107f5578063c84c9e4514610808578063c87b56dd14610827578063c9644b771461083d578063dbbc853b14610858578063e985e9c51461086b578063faf4212514610890575b600080fd5b341561026857600080fd5b6102927bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19600435166108ba565b604051901515815260200160405180910390f35b34156102b157600080fd5b6102b96108ee565b604051600160a060020a03909116815260200160405180910390f35b34156102e057600080fd5b6102e86108fd565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561032457808201518382015260200161030c565b50505050905090810190601f1680156103515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036a57600080fd5b6102b960043561093f565b61038c600160a060020a0360043516602435610981565b005b341561039957600080fd5b6102b9610aa0565b34156103ac57600080fd5b61038c600435602435610aaf565b34156103c557600080fd5b6102b9610bf5565b34156103d857600080fd5b6103e0610c04565b60405190815260200160405180910390f35b34156103fd57600080fd5b6102b9610c0a565b341561041057600080fd5b61038c600160a060020a0360043516610c19565b341561042f57600080fd5b61038c600160a060020a03600435166024351515610c56565b61038c600160a060020a0360043581169060243516604435610cc8565b341561047057600080fd5b61038c600160a060020a0360043516610ce8565b341561048f57600080fd5b61038c600160a060020a0360043516610d3a565b34156104ae57600080fd5b6103e0600160a060020a0360043516602435610d77565b34156104d057600080fd5b61038c600160a060020a0360043516610dea565b34156104ef57600080fd5b61038c610e27565b61038c600160a060020a0360043581169060243516604435610e7a565b341561051f57600080fd5b61038c600160a060020a0360043516610e96565b341561053e57600080fd5b6103e0600435610ed3565b341561055457600080fd5b6102b9610ef7565b341561056757600080fd5b61038c600160a060020a0360043516610f06565b341561058657600080fd5b610292610f43565b341561059957600080fd5b6103e0600435600160a060020a0360243516610f53565b34156105bb57600080fd5b61038c61102b565b34156105ce57600080fd5b6102b9600435611081565b34156105e457600080fd5b6103e0600160a060020a03600435166110c3565b341561060357600080fd5b61038c600160a060020a036004351660243515156110f6565b341561062757600080fd5b6102b9611168565b341561063a57600080fd5b61038c600160a060020a03600435166024351515611177565b341561065e57600080fd5b61038c6111e9565b341561067157600080fd5b61038c600160a060020a0360043516611275565b341561069057600080fd5b61038c600160a060020a03600435166112b2565b34156106af57600080fd5b6102e86112ef565b34156106c257600080fd5b610292600160a060020a0360043516611330565b34156106e157600080fd5b6102b9611345565b34156106f457600080fd5b610292600160a060020a0360043516611354565b341561071357600080fd5b61038c600160a060020a03600435166024351515611369565b341561073757600080fd5b61038c600160a060020a036004351660243515156113db565b341561075b57600080fd5b610292600160a060020a036004351661149b565b341561077a57600080fd5b6107856004356114b0565b60405191825260208201526040908101905180910390f35b34156107a857600080fd5b61038c60043560243561150c565b34156107c157600080fd5b6102b9611673565b61038c600160a060020a0360048035821691602480359091169160443591606435908101910135611682565b341561080057600080fd5b6102e86116c7565b341561081357600080fd5b610292600160a060020a0360043516611765565b341561083257600080fd5b6102e860043561177a565b341561084857600080fd5b61038c6004356024351515611a65565b341561086357600080fd5b6102e8611b8a565b341561087657600080fd5b610292600160a060020a0360043581169060243516611bf5565b341561089b57600080fd5b61038c6024600480358281019290820135918135918201910135611c23565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b600b54600160a060020a031681565b610905612462565b60408051908101604052600481527f4178696500000000000000000000000000000000000000000000000000000000602082015290505b90565b6000818152601060205260408120548290600160a060020a0316151561096457600080fd5b5050600090815260126020526040902054600160a060020a031690565b6000818152601060205260408120548290600160a060020a031615156109a657600080fd5b826109b13382611c57565b806109c157506109c13382611c77565b15156109cc57600080fd5b600c5460a060020a900460ff16156109e357600080fd5b600084815260106020526040902054600160a060020a0390811693508516831415610a0d57600080fd5b600084815260126020526040902054600160a060020a0386811691161415610a3457600080fd5b600084815260126020526040908190208054600160a060020a031916600160a060020a0388811691821790925591908516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259087905190815260200160405180910390a35050505050565b600a54600160a060020a031681565b600160a060020a03331660009081526006602052604081205460ff161515610ad657600080fd5b6000838152601060205260409020548390600160a060020a03161515610afb57600080fd5b60025484908490600160a060020a03161580610b855750600254600160a060020a031663d4d33ece838360006040516020015260405160e060020a63ffffffff851602815260048101929092526024820152604401602060405180830381600087803b1515610b6957600080fd5b6102c65a03f11515610b7a57600080fd5b505050604051805190505b1515610b9057600080fd5b6017805487908110610b9e57fe5b600091825260209091206002909102018581554260018201559350857f90f712fe1864fe3fbc2bd97b660fbfec7c30d013d3961ac72ea12cffc09e06638660405190815260200160405180910390a2505050505050565b600154600160a060020a031681565b600d5490565b600454600160a060020a031681565b60015433600160a060020a03908116911614610c3457600080fd5b60038054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a03908116911614610c7157600080fd5b600160a060020a03821660009081526009602052604090205460ff1615158115151415610c9d57600080fd5b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b610ce383838360206040519081016040526000808252611cd5565b505050565b600a5433600160a060020a03908116911614610d0357600080fd5b600160a060020a0381161515610d1857600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b600a5433600160a060020a03908116911614610d5557600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b6000600160a060020a0383161515610d8e57600080fd5b600160a060020a0383166000908152601360205260409020548210610db257600080fd5b600160a060020a0383166000908152601360205260409020805483908110610dd657fe5b906000526020600020900154905092915050565b60015433600160a060020a03908116911614610e0557600080fd5b60048054600160a060020a031916600160a060020a0392909216919091179055565b600a5433600160a060020a03908116911614610e4257600080fd5b600c5460a060020a900460ff161515610e5a57600080fd5b600c805474ff000000000000000000000000000000000000000019169055565b610ce38383836020604051908101604052600081526001611cd5565b600a5433600160a060020a03908116911614610eb157600080fd5b600b8054600160a060020a031916600160a060020a0392909216919091179055565b600d546000908210610ee457600080fd5b506000908152600e602052604090205490565b600354600160a060020a031681565b60015433600160a060020a03908116911614610f2157600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b600c5460a060020a900460ff1681565b600160a060020a03331660009081526006602052604081205460ff161515610f7a57600080fd5b60025483908390600160a060020a0316158061100d5750600254600160a060020a0316630e972421838360006040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b1515610ff157600080fd5b6102c65a03f1151561100257600080fd5b505050604051805190505b151561101857600080fd5b6110228585611fdf565b95945050505050565b600b5433600160a060020a0390811691161461104657600080fd5b600b54600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561107f57600080fd5b565b6000818152601060205260408120548290600160a060020a031615156110a657600080fd5b5050600090815260106020526040902054600160a060020a031690565b6000600160a060020a03821615156110da57600080fd5b50600160a060020a031660009081526013602052604090205490565b60015433600160a060020a0390811691161461111157600080fd5b600160a060020a03821660009081526008602052604090205460ff161515811515141561113d57600080fd5b600160a060020a03919091166000908152600860205260409020805460ff1916911515919091179055565b600554600160a060020a031681565b60015433600160a060020a0390811691161461119257600080fd5b600160a060020a03821660009081526007602052604090205460ff16151581151514156111be57600080fd5b600160a060020a03919091166000908152600760205260409020805460ff1916911515919091179055565b600a5433600160a060020a03908116911614806112145750600b5433600160a060020a039081169116145b8061122d5750600c5433600160a060020a039081169116145b151561123857600080fd5b600c5460a060020a900460ff161561124f57600080fd5b600c805474ff0000000000000000000000000000000000000000191660a060020a179055565b60015433600160a060020a0390811691161461129057600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146112cd57600080fd5b60058054600160a060020a031916600160a060020a0392909216919091179055565b6112f7612462565b60408051908101604052600481527f41584945000000000000000000000000000000000000000000000000000000006020820152905090565b60076020526000908152604090205460ff1681565b600254600160a060020a031681565b60096020526000908152604090205460ff1681565b60015433600160a060020a0390811691161461138457600080fd5b600160a060020a03821660009081526006602052604090205460ff16151581151514156113b057600080fd5b600160a060020a03919091166000908152600660205260409020805460ff1916911515919091179055565b600c5460a060020a900460ff16156113f257600080fd5b600160a060020a0333811660009081526011602090815260408083209386168352929052205460ff161515811515141561142b57600080fd5b33600160a060020a0390811660008181526011602090815260408083209487168084529490915290819020805460ff19168515151790557f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190849051901515815260200160405180910390a35050565b60086020526000908152604090205460ff1681565b600081815260106020526040812054819081908490600160a060020a031615156114d957600080fd5b60178054869081106114e757fe5b9060005260206000209060020201915081600001548260010154935093505050915091565b600160a060020a03331660009081526009602052604081205460ff16151561153357600080fd5b6000838152601060205260409020548390600160a060020a0316151561155857600080fd5b60055484908490600160a060020a031615806115e25750600554600160a060020a0316639613bc90838360006040516020015260405160e060020a63ffffffff851602815260048101929092526024820152604401602060405180830381600087803b15156115c657600080fd5b6102c65a03f115156115d757600080fd5b505050604051805190505b15156115ed57600080fd5b60178054879081106115fb57fe5b90600052602060002090600202016000015493508460178781548110151561161f57fe5b6000918252602090912060029091020155857f6715bb2e56d8b9cd079426816318abbb6ee679a7e8e64602b38bf5c074b58e55858760405191825260208201526040908101905180910390a2505050505050565b600c54600160a060020a031681565b6116c085858585858080601f01602080910402602001604051908101604052818152929190602084018383808284375060019450611cd59350505050565b5050505050565b60158054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561175d5780601f106117325761010080835404028352916020019161175d565b820191906000526020600020905b81548152906001019060200180831161174057829003601f168201915b505050505081565b60066020526000908152604090205460ff1681565b611782612462565b61178a612462565b611792612462565b60008061179d612462565b6000878152601060205260408120548890600160a060020a031615156117c257600080fd5b60158054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118585780601f1061182d57610100808354040283529160200191611858565b820191906000526020600020905b81548152906001019060200180831161183b57829003601f168201915b5050505050965060168054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f55780601f106118ca576101008083540402835291602001916118f5565b820191906000526020600020905b8154815290600101906020018083116118d857829003601f168201915b505050505095508894505b600190930192600a85049450600085111561191a57611900565b8387510160050160405180591061192e5750595b818152601f19601f830116810160200160405290509250600683510391508894505b60001982019160f860020a6030600a880601029084908151811061197057fe5b906020010190600160f860020a031916908160001a905350600a85049450600085111561199c57611950565b600091505b86518210156119f7578682815181106119b657fe5b016020015160f860020a900460f860020a028383815181106119d457fe5b906020010190600160f860020a031916908160001a9053506001909101906119a1565b600091505b8551821015611a5857858281518110611a1157fe5b016020015160f860020a900460f860020a02836005848651010381518110611a3557fe5b906020010190600160f860020a031916908160001a9053506001909101906119fc565b5090979650505050505050565b600160a060020a03331660009081526007602052604090205460ff161515611a8c57600080fd5b60035482908290600160a060020a03161580611b185750600354600160a060020a03166318dcdfbe838360006040516020015260405160e060020a63ffffffff8516028152600481019290925215156024820152604401602060405180830381600087803b1515611afc57600080fd5b6102c65a03f11515611b0d57600080fd5b505050604051805190505b1515611b2357600080fd5b611b2c84612085565b8215611b57576017805485908110611b4057fe5b600091825260208220600290910201818155600101555b837fc7e9cc512eb27debd93c5ff5830060459d7e6777ebcb540f3c9e2e520eb2502b60405160405180910390a250505050565b60168054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561175d5780601f106117325761010080835404028352916020019161175d565b600160a060020a03918216600090815260116020908152604080832093909416825291909152205460ff1690565b600a5433600160a060020a03908116911614611c3e57600080fd5b611c4a60158585612474565b506116c060168383612474565b600090815260106020526040902054600160a060020a0391821691161490565b600160a060020a03821660009081526008602052604081205460ff1680611cce5750600082815260106020908152604080832054600160a060020a03908116845260118352818420908716845290915290205460ff165b9392505050565b6000838152601060205260409020548390600160a060020a03161515611cfa57600080fd5b83611d053382611c57565b80611d155750611d153382611c77565b80611d255750611d25338261215a565b1515611d3057600080fd5b600454879087908790600160a060020a03161580611dd15750600454600160a060020a031663f7ebc39a84848460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611db557600080fd5b6102c65a03f11515611dc657600080fd5b505050604051805190505b1515611ddc57600080fd5b611de68a89611c57565b1515611df157600080fd5b600160a060020a0389161515611e0657600080fd5b600160a060020a03898116908b161415611e1f57600080fd5b611e298a8961217a565b6000888152601260205260408082208054600160a060020a0319169055600160a060020a038c16907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908b905190815260200160405180910390a3611e8e898961230b565b858015611e9f5750611e9f8961238e565b15611f8c5788600160a060020a031663f0b9e5ba61c3508c8b8b6040518563ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611f26578082015183820152602001611f0e565b50505050905090810190601f168015611f535780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600088803b1515611f7357600080fd5b87f11515611f8057600080fd5b50505050604051805150505b88600160a060020a03168a600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405190815260200160405180910390a350505050505050505050565b6000611fe96124f2565b60408051908101604052848152426020820152601780549192506001918083016120138382612509565b60009283526020909220849160020201815181556020820151816001015550500391506120408383612396565b82600160a060020a0316827f0aa75ef3ef0b2c4f092828edf4e4ded5a223d08350535710b957679883ff3a3c8660405190815260200160405180910390a35092915050565b600081815260106020526040812054600160a060020a031690808215156120ab57600080fd5b6120b5838561217a565b600d546120c990600163ffffffff61244116565b600d8181556000868152600f602081815260408084208054968552600e835281852054908590559454845280842084905585845280842085905584845291905280822084905592945090925090600160a060020a038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9087905190815260200160405180910390a350505050565b600090815260126020526040902054600160a060020a0391821691161490565b60008080600160a060020a038516151561219357600080fd5b600084815260146020908152604080832054600160a060020a03891684526013909252909120549093506121ce90600163ffffffff61244116565b600160a060020a0386166000908152601360205260409020805491935090839081106121f657fe5b60009182526020808320909101548683526010825260408084208054600160a060020a0319169055600160a060020a038916845260139092529120805491925082918590811061224257fe5b6000918252602080832090910192909255828152601482526040808220869055600160a060020a038816825260139092522080548390811061228057fe5b60009182526020808320909101829055600160a060020a038716825260139052604090208054906122b5906000198301612535565b50600160a060020a03851660009081526013602052604090205415156122f657600160a060020a03851660009081526013602052604081206122f691612559565b50505060009081526014602052604081205550565b6000600160a060020a038316151561232257600080fd5b5060008181526010602090815260408083208054600160a060020a031916600160a060020a038716908117909155835260139091529020805490816001810161236b8382612535565b506000918252602080832091909101849055928152601490925260409091205550565b6000903b1190565b600081815260106020526040902054600160a060020a0316156123b857600080fd5b6123c2828261230b565b600d80546000908152600e602090815260408083208590559254848352600f9091529190208190556123fb90600163ffffffff61245316565b600d55600160a060020a03821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35050565b60008282111561244d57fe5b50900390565b600082820183811015611cce57fe5b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106124b55782800160ff198235161785556124e2565b828001600101855582156124e2579182015b828111156124e25782358255916020019190600101906124c7565b506124ee92915061257a565b5090565b604080519081016040526000808252602082015290565b815481835581811511610ce357600202816002028360005260206000209182019101610ce39190612594565b815481835581811511610ce357600083815260209020610ce391810190830161257a565b5080546000825590600052602060002090810190612577919061257a565b50565b61093c91905b808211156124ee5760008155600101612580565b61093c91905b808211156124ee576000808255600182015560020161259a5600a165627a7a723058205c581cfc083f257425f5769585ca2b5795a24934862554ed6f13b530d4fdb0510029
Deployed Bytecode
0x6060604052600436106102585763ffffffff60e060020a60003504166301ffc9a7811461025d5780630519ce79146102a657806306fdde03146102d5578063081812fc1461035f578063095ea7b3146103755780630a0f81681461038e5780630d2cc54a146103a15780631412409a146103ba57806318160ddd146103cd5780631889500c146103f25780631a68b1a1146104055780631f8df2cd1461042457806323b872dd1461044857806327d7874c146104655780632ba73c15146104845780632f745c59146104a35780632ffb054e146104c55780633f4ba83a146104e457806342842e0e146104f75780634e0a3379146105145780634f6ccce71461053357806352ac882c14610549578063547a5eee1461055c5780635c975abb1461057b5780635dcc6dbc1461058e5780635fd8c710146105b05780636352211e146105c357806370a08231146105d95780637419e77a146105f857806380173a191461061c57806381b2dad91461062f5780638456cb59146106535780638c37e31e14610666578063927aaa7c1461068557806395d89b41146106a45780639848146a146106b757806398f5ee5d146106d657806399165bf4146106e95780639f186edb14610708578063a22cb4651461072c578063a306dfbe14610750578063a64729061461076f578063ae67b4c31461079d578063b047fb50146107b6578063b88d4fde146107c9578063c0ac9983146107f5578063c84c9e4514610808578063c87b56dd14610827578063c9644b771461083d578063dbbc853b14610858578063e985e9c51461086b578063faf4212514610890575b600080fd5b341561026857600080fd5b6102927bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19600435166108ba565b604051901515815260200160405180910390f35b34156102b157600080fd5b6102b96108ee565b604051600160a060020a03909116815260200160405180910390f35b34156102e057600080fd5b6102e86108fd565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561032457808201518382015260200161030c565b50505050905090810190601f1680156103515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036a57600080fd5b6102b960043561093f565b61038c600160a060020a0360043516602435610981565b005b341561039957600080fd5b6102b9610aa0565b34156103ac57600080fd5b61038c600435602435610aaf565b34156103c557600080fd5b6102b9610bf5565b34156103d857600080fd5b6103e0610c04565b60405190815260200160405180910390f35b34156103fd57600080fd5b6102b9610c0a565b341561041057600080fd5b61038c600160a060020a0360043516610c19565b341561042f57600080fd5b61038c600160a060020a03600435166024351515610c56565b61038c600160a060020a0360043581169060243516604435610cc8565b341561047057600080fd5b61038c600160a060020a0360043516610ce8565b341561048f57600080fd5b61038c600160a060020a0360043516610d3a565b34156104ae57600080fd5b6103e0600160a060020a0360043516602435610d77565b34156104d057600080fd5b61038c600160a060020a0360043516610dea565b34156104ef57600080fd5b61038c610e27565b61038c600160a060020a0360043581169060243516604435610e7a565b341561051f57600080fd5b61038c600160a060020a0360043516610e96565b341561053e57600080fd5b6103e0600435610ed3565b341561055457600080fd5b6102b9610ef7565b341561056757600080fd5b61038c600160a060020a0360043516610f06565b341561058657600080fd5b610292610f43565b341561059957600080fd5b6103e0600435600160a060020a0360243516610f53565b34156105bb57600080fd5b61038c61102b565b34156105ce57600080fd5b6102b9600435611081565b34156105e457600080fd5b6103e0600160a060020a03600435166110c3565b341561060357600080fd5b61038c600160a060020a036004351660243515156110f6565b341561062757600080fd5b6102b9611168565b341561063a57600080fd5b61038c600160a060020a03600435166024351515611177565b341561065e57600080fd5b61038c6111e9565b341561067157600080fd5b61038c600160a060020a0360043516611275565b341561069057600080fd5b61038c600160a060020a03600435166112b2565b34156106af57600080fd5b6102e86112ef565b34156106c257600080fd5b610292600160a060020a0360043516611330565b34156106e157600080fd5b6102b9611345565b34156106f457600080fd5b610292600160a060020a0360043516611354565b341561071357600080fd5b61038c600160a060020a03600435166024351515611369565b341561073757600080fd5b61038c600160a060020a036004351660243515156113db565b341561075b57600080fd5b610292600160a060020a036004351661149b565b341561077a57600080fd5b6107856004356114b0565b60405191825260208201526040908101905180910390f35b34156107a857600080fd5b61038c60043560243561150c565b34156107c157600080fd5b6102b9611673565b61038c600160a060020a0360048035821691602480359091169160443591606435908101910135611682565b341561080057600080fd5b6102e86116c7565b341561081357600080fd5b610292600160a060020a0360043516611765565b341561083257600080fd5b6102e860043561177a565b341561084857600080fd5b61038c6004356024351515611a65565b341561086357600080fd5b6102e8611b8a565b341561087657600080fd5b610292600160a060020a0360043581169060243516611bf5565b341561089b57600080fd5b61038c6024600480358281019290820135918135918201910135611c23565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b600b54600160a060020a031681565b610905612462565b60408051908101604052600481527f4178696500000000000000000000000000000000000000000000000000000000602082015290505b90565b6000818152601060205260408120548290600160a060020a0316151561096457600080fd5b5050600090815260126020526040902054600160a060020a031690565b6000818152601060205260408120548290600160a060020a031615156109a657600080fd5b826109b13382611c57565b806109c157506109c13382611c77565b15156109cc57600080fd5b600c5460a060020a900460ff16156109e357600080fd5b600084815260106020526040902054600160a060020a0390811693508516831415610a0d57600080fd5b600084815260126020526040902054600160a060020a0386811691161415610a3457600080fd5b600084815260126020526040908190208054600160a060020a031916600160a060020a0388811691821790925591908516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259087905190815260200160405180910390a35050505050565b600a54600160a060020a031681565b600160a060020a03331660009081526006602052604081205460ff161515610ad657600080fd5b6000838152601060205260409020548390600160a060020a03161515610afb57600080fd5b60025484908490600160a060020a03161580610b855750600254600160a060020a031663d4d33ece838360006040516020015260405160e060020a63ffffffff851602815260048101929092526024820152604401602060405180830381600087803b1515610b6957600080fd5b6102c65a03f11515610b7a57600080fd5b505050604051805190505b1515610b9057600080fd5b6017805487908110610b9e57fe5b600091825260209091206002909102018581554260018201559350857f90f712fe1864fe3fbc2bd97b660fbfec7c30d013d3961ac72ea12cffc09e06638660405190815260200160405180910390a2505050505050565b600154600160a060020a031681565b600d5490565b600454600160a060020a031681565b60015433600160a060020a03908116911614610c3457600080fd5b60038054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a03908116911614610c7157600080fd5b600160a060020a03821660009081526009602052604090205460ff1615158115151415610c9d57600080fd5b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b610ce383838360206040519081016040526000808252611cd5565b505050565b600a5433600160a060020a03908116911614610d0357600080fd5b600160a060020a0381161515610d1857600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b600a5433600160a060020a03908116911614610d5557600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b6000600160a060020a0383161515610d8e57600080fd5b600160a060020a0383166000908152601360205260409020548210610db257600080fd5b600160a060020a0383166000908152601360205260409020805483908110610dd657fe5b906000526020600020900154905092915050565b60015433600160a060020a03908116911614610e0557600080fd5b60048054600160a060020a031916600160a060020a0392909216919091179055565b600a5433600160a060020a03908116911614610e4257600080fd5b600c5460a060020a900460ff161515610e5a57600080fd5b600c805474ff000000000000000000000000000000000000000019169055565b610ce38383836020604051908101604052600081526001611cd5565b600a5433600160a060020a03908116911614610eb157600080fd5b600b8054600160a060020a031916600160a060020a0392909216919091179055565b600d546000908210610ee457600080fd5b506000908152600e602052604090205490565b600354600160a060020a031681565b60015433600160a060020a03908116911614610f2157600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b600c5460a060020a900460ff1681565b600160a060020a03331660009081526006602052604081205460ff161515610f7a57600080fd5b60025483908390600160a060020a0316158061100d5750600254600160a060020a0316630e972421838360006040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b1515610ff157600080fd5b6102c65a03f1151561100257600080fd5b505050604051805190505b151561101857600080fd5b6110228585611fdf565b95945050505050565b600b5433600160a060020a0390811691161461104657600080fd5b600b54600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561107f57600080fd5b565b6000818152601060205260408120548290600160a060020a031615156110a657600080fd5b5050600090815260106020526040902054600160a060020a031690565b6000600160a060020a03821615156110da57600080fd5b50600160a060020a031660009081526013602052604090205490565b60015433600160a060020a0390811691161461111157600080fd5b600160a060020a03821660009081526008602052604090205460ff161515811515141561113d57600080fd5b600160a060020a03919091166000908152600860205260409020805460ff1916911515919091179055565b600554600160a060020a031681565b60015433600160a060020a0390811691161461119257600080fd5b600160a060020a03821660009081526007602052604090205460ff16151581151514156111be57600080fd5b600160a060020a03919091166000908152600760205260409020805460ff1916911515919091179055565b600a5433600160a060020a03908116911614806112145750600b5433600160a060020a039081169116145b8061122d5750600c5433600160a060020a039081169116145b151561123857600080fd5b600c5460a060020a900460ff161561124f57600080fd5b600c805474ff0000000000000000000000000000000000000000191660a060020a179055565b60015433600160a060020a0390811691161461129057600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146112cd57600080fd5b60058054600160a060020a031916600160a060020a0392909216919091179055565b6112f7612462565b60408051908101604052600481527f41584945000000000000000000000000000000000000000000000000000000006020820152905090565b60076020526000908152604090205460ff1681565b600254600160a060020a031681565b60096020526000908152604090205460ff1681565b60015433600160a060020a0390811691161461138457600080fd5b600160a060020a03821660009081526006602052604090205460ff16151581151514156113b057600080fd5b600160a060020a03919091166000908152600660205260409020805460ff1916911515919091179055565b600c5460a060020a900460ff16156113f257600080fd5b600160a060020a0333811660009081526011602090815260408083209386168352929052205460ff161515811515141561142b57600080fd5b33600160a060020a0390811660008181526011602090815260408083209487168084529490915290819020805460ff19168515151790557f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190849051901515815260200160405180910390a35050565b60086020526000908152604090205460ff1681565b600081815260106020526040812054819081908490600160a060020a031615156114d957600080fd5b60178054869081106114e757fe5b9060005260206000209060020201915081600001548260010154935093505050915091565b600160a060020a03331660009081526009602052604081205460ff16151561153357600080fd5b6000838152601060205260409020548390600160a060020a0316151561155857600080fd5b60055484908490600160a060020a031615806115e25750600554600160a060020a0316639613bc90838360006040516020015260405160e060020a63ffffffff851602815260048101929092526024820152604401602060405180830381600087803b15156115c657600080fd5b6102c65a03f115156115d757600080fd5b505050604051805190505b15156115ed57600080fd5b60178054879081106115fb57fe5b90600052602060002090600202016000015493508460178781548110151561161f57fe5b6000918252602090912060029091020155857f6715bb2e56d8b9cd079426816318abbb6ee679a7e8e64602b38bf5c074b58e55858760405191825260208201526040908101905180910390a2505050505050565b600c54600160a060020a031681565b6116c085858585858080601f01602080910402602001604051908101604052818152929190602084018383808284375060019450611cd59350505050565b5050505050565b60158054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561175d5780601f106117325761010080835404028352916020019161175d565b820191906000526020600020905b81548152906001019060200180831161174057829003601f168201915b505050505081565b60066020526000908152604090205460ff1681565b611782612462565b61178a612462565b611792612462565b60008061179d612462565b6000878152601060205260408120548890600160a060020a031615156117c257600080fd5b60158054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118585780601f1061182d57610100808354040283529160200191611858565b820191906000526020600020905b81548152906001019060200180831161183b57829003601f168201915b5050505050965060168054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f55780601f106118ca576101008083540402835291602001916118f5565b820191906000526020600020905b8154815290600101906020018083116118d857829003601f168201915b505050505095508894505b600190930192600a85049450600085111561191a57611900565b8387510160050160405180591061192e5750595b818152601f19601f830116810160200160405290509250600683510391508894505b60001982019160f860020a6030600a880601029084908151811061197057fe5b906020010190600160f860020a031916908160001a905350600a85049450600085111561199c57611950565b600091505b86518210156119f7578682815181106119b657fe5b016020015160f860020a900460f860020a028383815181106119d457fe5b906020010190600160f860020a031916908160001a9053506001909101906119a1565b600091505b8551821015611a5857858281518110611a1157fe5b016020015160f860020a900460f860020a02836005848651010381518110611a3557fe5b906020010190600160f860020a031916908160001a9053506001909101906119fc565b5090979650505050505050565b600160a060020a03331660009081526007602052604090205460ff161515611a8c57600080fd5b60035482908290600160a060020a03161580611b185750600354600160a060020a03166318dcdfbe838360006040516020015260405160e060020a63ffffffff8516028152600481019290925215156024820152604401602060405180830381600087803b1515611afc57600080fd5b6102c65a03f11515611b0d57600080fd5b505050604051805190505b1515611b2357600080fd5b611b2c84612085565b8215611b57576017805485908110611b4057fe5b600091825260208220600290910201818155600101555b837fc7e9cc512eb27debd93c5ff5830060459d7e6777ebcb540f3c9e2e520eb2502b60405160405180910390a250505050565b60168054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561175d5780601f106117325761010080835404028352916020019161175d565b600160a060020a03918216600090815260116020908152604080832093909416825291909152205460ff1690565b600a5433600160a060020a03908116911614611c3e57600080fd5b611c4a60158585612474565b506116c060168383612474565b600090815260106020526040902054600160a060020a0391821691161490565b600160a060020a03821660009081526008602052604081205460ff1680611cce5750600082815260106020908152604080832054600160a060020a03908116845260118352818420908716845290915290205460ff165b9392505050565b6000838152601060205260409020548390600160a060020a03161515611cfa57600080fd5b83611d053382611c57565b80611d155750611d153382611c77565b80611d255750611d25338261215a565b1515611d3057600080fd5b600454879087908790600160a060020a03161580611dd15750600454600160a060020a031663f7ebc39a84848460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611db557600080fd5b6102c65a03f11515611dc657600080fd5b505050604051805190505b1515611ddc57600080fd5b611de68a89611c57565b1515611df157600080fd5b600160a060020a0389161515611e0657600080fd5b600160a060020a03898116908b161415611e1f57600080fd5b611e298a8961217a565b6000888152601260205260408082208054600160a060020a0319169055600160a060020a038c16907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908b905190815260200160405180910390a3611e8e898961230b565b858015611e9f5750611e9f8961238e565b15611f8c5788600160a060020a031663f0b9e5ba61c3508c8b8b6040518563ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611f26578082015183820152602001611f0e565b50505050905090810190601f168015611f535780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600088803b1515611f7357600080fd5b87f11515611f8057600080fd5b50505050604051805150505b88600160a060020a03168a600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405190815260200160405180910390a350505050505050505050565b6000611fe96124f2565b60408051908101604052848152426020820152601780549192506001918083016120138382612509565b60009283526020909220849160020201815181556020820151816001015550500391506120408383612396565b82600160a060020a0316827f0aa75ef3ef0b2c4f092828edf4e4ded5a223d08350535710b957679883ff3a3c8660405190815260200160405180910390a35092915050565b600081815260106020526040812054600160a060020a031690808215156120ab57600080fd5b6120b5838561217a565b600d546120c990600163ffffffff61244116565b600d8181556000868152600f602081815260408084208054968552600e835281852054908590559454845280842084905585845280842085905584845291905280822084905592945090925090600160a060020a038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9087905190815260200160405180910390a350505050565b600090815260126020526040902054600160a060020a0391821691161490565b60008080600160a060020a038516151561219357600080fd5b600084815260146020908152604080832054600160a060020a03891684526013909252909120549093506121ce90600163ffffffff61244116565b600160a060020a0386166000908152601360205260409020805491935090839081106121f657fe5b60009182526020808320909101548683526010825260408084208054600160a060020a0319169055600160a060020a038916845260139092529120805491925082918590811061224257fe5b6000918252602080832090910192909255828152601482526040808220869055600160a060020a038816825260139092522080548390811061228057fe5b60009182526020808320909101829055600160a060020a038716825260139052604090208054906122b5906000198301612535565b50600160a060020a03851660009081526013602052604090205415156122f657600160a060020a03851660009081526013602052604081206122f691612559565b50505060009081526014602052604081205550565b6000600160a060020a038316151561232257600080fd5b5060008181526010602090815260408083208054600160a060020a031916600160a060020a038716908117909155835260139091529020805490816001810161236b8382612535565b506000918252602080832091909101849055928152601490925260409091205550565b6000903b1190565b600081815260106020526040902054600160a060020a0316156123b857600080fd5b6123c2828261230b565b600d80546000908152600e602090815260408083208590559254848352600f9091529190208190556123fb90600163ffffffff61245316565b600d55600160a060020a03821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35050565b60008282111561244d57fe5b50900390565b600082820183811015611cce57fe5b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106124b55782800160ff198235161785556124e2565b828001600101855582156124e2579182015b828111156124e25782358255916020019190600101906124c7565b506124ee92915061257a565b5090565b604080519081016040526000808252602082015290565b815481835581811511610ce357600202816002028360005260206000209182019101610ce39190612594565b815481835581811511610ce357600083815260209020610ce391810190830161257a565b5080546000825590600052602060002090810190612577919061257a565b50565b61093c91905b808211156124ee5760008155600101612580565b61093c91905b808211156124ee576000808255600182015560020161259a5600a165627a7a723058205c581cfc083f257425f5769585ca2b5795a24934862554ed6f13b530d4fdb0510029
Swarm Source
bzzr://5c581cfc083f257425f5769585ca2b5795a24934862554ed6f13b530d4fdb051
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.