Overview
ETH Balance
0.00002746447221 ETH
Eth Value
$0.07 (@ $2,698.27/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 752 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set CEO | 5731909 | 2451 days ago | IN | 0 ETH | 0.00025849 | ||||
Create Person Ge... | 5723137 | 2453 days ago | IN | 0 ETH | 0.00065338 | ||||
Create Person Ge... | 5722961 | 2453 days ago | IN | 0 ETH | 0.00065338 | ||||
Create Person Ge... | 5722658 | 2453 days ago | IN | 0 ETH | 0.00065312 | ||||
Create Person Ge... | 5722646 | 2453 days ago | IN | 0 ETH | 0.00065312 | ||||
Create Person Ge... | 5722037 | 2453 days ago | IN | 0 ETH | 0.00065158 | ||||
Create Person Ge... | 5722023 | 2453 days ago | IN | 0 ETH | 0.00081608 | ||||
Create Person Ge... | 5722023 | 2453 days ago | IN | 0 ETH | 0.00081736 | ||||
Create Person Ge... | 5722021 | 2453 days ago | IN | 0 ETH | 0.00081704 | ||||
Create Person Ge... | 5722019 | 2453 days ago | IN | 0 ETH | 0.00081512 | ||||
Create Person Ge... | 5722016 | 2453 days ago | IN | 0 ETH | 0.00081448 | ||||
Create Person Ge... | 5722012 | 2453 days ago | IN | 0 ETH | 0.00081448 | ||||
Create Person Ge... | 5722006 | 2453 days ago | IN | 0 ETH | 0.00081384 | ||||
Create Person Ge... | 5721986 | 2453 days ago | IN | 0 ETH | 0.00081416 | ||||
Create Person Ge... | 5721984 | 2453 days ago | IN | 0 ETH | 0.0008148 | ||||
Create Person Ge... | 5721983 | 2453 days ago | IN | 0 ETH | 0.00081448 | ||||
Create Person Ge... | 5721979 | 2453 days ago | IN | 0 ETH | 0.000818 | ||||
Create Person Ge... | 5721978 | 2453 days ago | IN | 0 ETH | 0.00081608 | ||||
Create Person Ge... | 5721976 | 2453 days ago | IN | 0 ETH | 0.00081768 | ||||
Create Person Ge... | 5721974 | 2453 days ago | IN | 0 ETH | 0.00081672 | ||||
Create Person Ge... | 5721972 | 2453 days ago | IN | 0 ETH | 0.00081544 | ||||
Create Person Ge... | 5721970 | 2453 days ago | IN | 0 ETH | 0.00081672 | ||||
Create Person Ge... | 5721967 | 2453 days ago | IN | 0 ETH | 0.0008148 | ||||
Create Person Ge... | 5721965 | 2453 days ago | IN | 0 ETH | 0.00081512 | ||||
Create Person Ge... | 5721963 | 2453 days ago | IN | 0 ETH | 0.00081544 |
Latest 15 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
5698874 | 2457 days ago | 0.00006408 ETH | ||||
5698874 | 2457 days ago | 0.00003923 ETH | ||||
5686333 | 2460 days ago | 0.00028182 ETH | ||||
5686333 | 2460 days ago | 0.00017254 ETH | ||||
5686290 | 2460 days ago | 0.00129536 ETH | ||||
5686290 | 2460 days ago | 0.00079308 ETH | ||||
5683956 | 2460 days ago | 0.00614509 ETH | ||||
5683956 | 2460 days ago | 0.0037623 ETH | ||||
5683956 | 2460 days ago | 0.001 ETH | ||||
5683899 | 2460 days ago | 0.005929 ETH | ||||
5683899 | 2460 days ago | 0.00363 ETH | ||||
5683899 | 2460 days ago | 0.001 ETH | ||||
5682770 | 2460 days ago | 0.0049 ETH | ||||
5682770 | 2460 days ago | 0.003 ETH | ||||
5682770 | 2460 days ago | 0.001 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CelebrityBreederToken
Compiler Version
v0.4.22-nightly.2018.4.12+commit.c3dc67d0
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-05-24 */ pragma solidity ^0.4.18; // solhint-disable-line /// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens /// @author Dieter Shirley <[email protected]> (https://github.com/dete) contract ERC721 { // Required methods function approve(address _to, uint256 _tokenId) public; function balanceOf(address _owner) public view returns (uint256 balance); function implementsERC721() public pure returns (bool); function ownerOf(uint256 _tokenId) public view returns (address addr); function takeOwnership(uint256 _tokenId) public; function totalSupply() public view returns (uint256 total); function transferFrom(address _from, address _to, uint256 _tokenId) public; function transfer(address _to, uint256 _tokenId) public; event Transfer(address indexed from, address indexed to, uint256 tokenId); event Approval(address indexed owner, address indexed approved, uint256 tokenId); // Optional // function name() public view returns (string name); // function symbol() public view returns (string symbol); // function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 tokenId); // function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl); } contract CelebrityToken is ERC721 { /*** EVENTS ***/ /// @dev The Birth event is fired whenever a new person comes into existence. event Birth(uint256 tokenId, string name, address owner); /// @dev The TokenSold event is fired whenever a token is sold. event TokenSold(uint256 tokenId, uint256 oldPrice, uint256 newPrice, address prevOwner, address winner, string name); /// @dev Transfer event as defined in current draft of ERC721. /// ownership is assigned, including births. event Transfer(address from, address to, uint256 tokenId); /*** CONSTANTS ***/ /// @notice Name and symbol of the non fungible token, as defined in ERC721. string public constant NAME = "CryptoCelebrities"; // solhint-disable-line string public constant SYMBOL = "CelebrityToken"; // solhint-disable-line uint256 private startingPrice = 0.001 ether; uint256 private constant PROMO_CREATION_LIMIT = 5000; uint256 private firstStepLimit = 0.053613 ether; uint256 private secondStepLimit = 0.564957 ether; /*** STORAGE ***/ /// @dev A mapping from person IDs to the address that owns them. All persons have /// some valid owner address. mapping (uint256 => address) public personIndexToOwner; // @dev A mapping from owner address to count of tokens that address owns. // Used internally inside balanceOf() to resolve ownership count. mapping (address => uint256) private ownershipTokenCount; /// @dev A mapping from PersonIDs to an address that has been approved to call /// transferFrom(). Each Person can only have one approved address for transfer /// at any time. A zero value means no approval is outstanding. mapping (uint256 => address) public personIndexToApproved; // @dev A mapping from PersonIDs to the price of the token. mapping (uint256 => uint256) private personIndexToPrice; // The addresses of the accounts (or contracts) that can execute actions within each roles. address public ceoAddress; address public cooAddress; uint256 public promoCreatedCount; /*** DATATYPES ***/ struct Person { string name; } Person[] private persons; /*** ACCESS MODIFIERS ***/ /// @dev Access modifier for CEO-only functionality modifier onlyCEO() { require(msg.sender == ceoAddress); _; } /// @dev Access modifier for COO-only functionality modifier onlyCOO() { require(msg.sender == cooAddress); _; } /// Access modifier for contract owner only functionality modifier onlyCLevel() { require( msg.sender == ceoAddress || msg.sender == cooAddress ); _; } /*** CONSTRUCTOR ***/ function CelebrityToken() public { ceoAddress = msg.sender; cooAddress = msg.sender; } /*** PUBLIC FUNCTIONS ***/ /// @notice Grant another address the right to transfer token via takeOwnership() and transferFrom(). /// @param _to The address to be granted transfer approval. Pass address(0) to /// clear all approvals. /// @param _tokenId The ID of the Token that can be transferred if this call succeeds. /// @dev Required for ERC-721 compliance. function approve( address _to, uint256 _tokenId ) public { // Caller must own token. require(_owns(msg.sender, _tokenId)); personIndexToApproved[_tokenId] = _to; Approval(msg.sender, _to, _tokenId); } /// For querying balance of a particular account /// @param _owner The address for balance query /// @dev Required for ERC-721 compliance. function balanceOf(address _owner) public view returns (uint256 balance) { return ownershipTokenCount[_owner]; } /// @dev Creates a new promo Person with the given name, with given _price and assignes it to an address. function createPromoPerson(address _owner, string _name, uint256 _price) public onlyCOO { require(promoCreatedCount < PROMO_CREATION_LIMIT); address personOwner = _owner; if (personOwner == address(0)) { personOwner = cooAddress; } if (_price <= 0) { _price = startingPrice; } promoCreatedCount++; _createPerson(_name, personOwner, _price); } /// @dev Creates a new Person with the given name. function createContractPerson(string _name) public onlyCOO { _createPerson(_name, address(this), startingPrice); } /// @notice Returns all the relevant information about a specific person. /// @param _tokenId The tokenId of the person of interest. function getPerson(uint256 _tokenId) public view returns ( string personName, uint256 sellingPrice, address owner ) { Person storage person = persons[_tokenId]; personName = person.name; sellingPrice = personIndexToPrice[_tokenId]; owner = personIndexToOwner[_tokenId]; } function implementsERC721() public pure returns (bool) { return true; } /// @dev Required for ERC-721 compliance. function name() public pure returns (string) { return NAME; } /// For querying owner of token /// @param _tokenId The tokenID for owner inquiry /// @dev Required for ERC-721 compliance. function ownerOf(uint256 _tokenId) public view returns (address owner) { owner = personIndexToOwner[_tokenId]; require(owner != address(0)); } function payout(address _to) public onlyCLevel { _payout(_to); } // Allows someone to send ether and obtain the token function purchase(uint256 _tokenId) public payable { address oldOwner = personIndexToOwner[_tokenId]; address newOwner = msg.sender; uint256 sellingPrice = personIndexToPrice[_tokenId]; // Making sure token owner is not sending to self require(oldOwner != newOwner); // Safety check to prevent against an unexpected 0x0 default. require(_addressNotNull(newOwner)); // Making sure sent amount is greater than or equal to the sellingPrice require(msg.value >= sellingPrice); uint256 payment = uint256(SafeMath.div(SafeMath.mul(sellingPrice, 94), 100)); uint256 purchaseExcess = SafeMath.sub(msg.value, sellingPrice); // Update prices if (sellingPrice < firstStepLimit) { // first stage personIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 200), 94); } else if (sellingPrice < secondStepLimit) { // second stage personIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 120), 94); } else { // third stage personIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 115), 94); } _transfer(oldOwner, newOwner, _tokenId); // Pay previous tokenOwner if owner is not contract if (oldOwner != address(this)) { oldOwner.transfer(payment); //(1-0.06) } TokenSold(_tokenId, sellingPrice, personIndexToPrice[_tokenId], oldOwner, newOwner, persons[_tokenId].name); msg.sender.transfer(purchaseExcess); } function priceOf(uint256 _tokenId) public view returns (uint256 price) { return personIndexToPrice[_tokenId]; } /// @dev Assigns a new address to act as the CEO. Only available to the current CEO. /// @param _newCEO The address of the new CEO function setCEO(address _newCEO) public onlyCEO { require(_newCEO != address(0)); ceoAddress = _newCEO; } /// @dev Assigns a new address to act as the COO. Only available to the current COO. /// @param _newCOO The address of the new COO function setCOO(address _newCOO) public onlyCEO { require(_newCOO != address(0)); cooAddress = _newCOO; } /// @dev Required for ERC-721 compliance. function symbol() public pure returns (string) { return SYMBOL; } /// @notice Allow pre-approved user to take ownership of a token /// @param _tokenId The ID of the Token that can be transferred if this call succeeds. /// @dev Required for ERC-721 compliance. function takeOwnership(uint256 _tokenId) public { address newOwner = msg.sender; address oldOwner = personIndexToOwner[_tokenId]; // Safety check to prevent against an unexpected 0x0 default. require(_addressNotNull(newOwner)); // Making sure transfer is approved require(_approved(newOwner, _tokenId)); _transfer(oldOwner, newOwner, _tokenId); } /// @param _owner The owner whose celebrity tokens we are interested in. /// @dev This method MUST NEVER be called by smart contract code. First, it's fairly /// expensive (it walks the entire Persons array looking for persons belonging to owner), /// but it also returns a dynamic array, which is only supported for web3 calls, and /// not contract-to-contract calls. function tokensOfOwner(address _owner) public view returns(uint256[] ownerTokens) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 totalPersons = totalSupply(); uint256 resultIndex = 0; uint256 personId; for (personId = 0; personId <= totalPersons; personId++) { if (personIndexToOwner[personId] == _owner) { result[resultIndex] = personId; resultIndex++; } } return result; } } /// For querying totalSupply of token /// @dev Required for ERC-721 compliance. function totalSupply() public view returns (uint256 total) { return persons.length; } /// Owner initates the transfer of the token to another account /// @param _to The address for the token to be transferred to. /// @param _tokenId The ID of the Token that can be transferred if this call succeeds. /// @dev Required for ERC-721 compliance. function transfer( address _to, uint256 _tokenId ) public { require(_owns(msg.sender, _tokenId)); require(_addressNotNull(_to)); _transfer(msg.sender, _to, _tokenId); } /// Third-party initiates transfer of token from address _from to address _to /// @param _from The address for the token to be transferred from. /// @param _to The address for the token to be transferred to. /// @param _tokenId The ID of the Token that can be transferred if this call succeeds. /// @dev Required for ERC-721 compliance. function transferFrom( address _from, address _to, uint256 _tokenId ) public { require(_owns(_from, _tokenId)); require(_approved(_to, _tokenId)); require(_addressNotNull(_to)); _transfer(_from, _to, _tokenId); } /*** PRIVATE FUNCTIONS ***/ /// Safety check on _to address to prevent against an unexpected 0x0 default. function _addressNotNull(address _to) private pure returns (bool) { return _to != address(0); } /// For checking approval of transfer for address _to function _approved(address _to, uint256 _tokenId) private view returns (bool) { return personIndexToApproved[_tokenId] == _to; } /// For creating Person function _createPerson(string _name, address _owner, uint256 _price) private { Person memory _person = Person({ name: _name }); uint256 newPersonId = persons.push(_person) - 1; // It's probably never going to happen, 4 billion tokens are A LOT, but // let's just be 100% sure we never let this happen. require(newPersonId == uint256(uint32(newPersonId))); Birth(newPersonId, _name, _owner); personIndexToPrice[newPersonId] = _price; // This will assign ownership, and also emit the Transfer event as // per ERC721 draft _transfer(address(0), _owner, newPersonId); } /// Check for token ownership function _owns(address claimant, uint256 _tokenId) private view returns (bool) { return claimant == personIndexToOwner[_tokenId]; } /// For paying out balance on contract function _payout(address _to) private { if (_to == address(0)) { ceoAddress.transfer(this.balance); } else { _to.transfer(this.balance); } } /// @dev Assigns ownership of a specific Person to an address. function _transfer(address _from, address _to, uint256 _tokenId) private { // Since the number of persons is capped to 2^32 we can't overflow this ownershipTokenCount[_to]++; //transfer ownership personIndexToOwner[_tokenId] = _to; // When creating new persons _from is 0x0, but we can't account that address. if (_from != address(0)) { ownershipTokenCount[_from]--; // clear any previously approved ownership exchange delete personIndexToApproved[_tokenId]; } // Emit the transfer event. Transfer(_from, _to, _tokenId); } } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure 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; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /// @author Artyom Harutyunyan <[email protected]> contract CelebrityBreederToken is ERC721 { /// @dev The Birth event is fired whenever a new person comes into existence. event Birth(uint256 tokenId, string name, address owner); /// @dev The TokenSold event is fired whenever a token is sold. event TokenSold(uint256 tokenId, uint256 oldPrice, uint256 newPrice, address prevOwner, address winner, string name); /// @dev Transfer event as defined in current draft of ERC721. /// ownership is assigned, including births. event Transfer(address from, address to, uint256 tokenId); event Trained(address caller, uint256 tokenId, bool generation); event Beaten(address caller, uint256 tokenId, bool generation); event SiringPriceEvent(address caller, uint256 tokenId, bool generation, uint price); event SellingPriceEvent(address caller, uint256 tokenId, bool generation, uint price); event GenesInitialisedEvent(address caller, uint256 tokenId, bool generation, uint genes); CelebrityToken private CelGen0=CelebrityToken(0xbb5Ed1EdeB5149AF3ab43ea9c7a6963b3C1374F7); //@Artyom Pointing to original CC string public constant NAME = "CryptoCelebrityBreederCards"; string public constant SYMBOL = "CeleBreedCard"; uint256 public breedingFee = 0.01 ether; uint256 public initialTraining = 0.00001 ether; uint256 public initialBeating = 0.00002 ether; uint256 private constant CreationLimitGen0 = 5000; uint256 private constant CreationLimitGen1 = 2500000; uint256 public constant MaxValue = 100000000 ether; mapping (uint256 => address) public personIndexToOwnerGen1; mapping (address => uint256) private ownershipTokenCountGen1; mapping (uint256 => address) public personIndexToApprovedGen1; mapping (uint256 => uint256) private personIndexToPriceGen1; mapping (uint256 => address) public ExternalAllowdContractGen0; mapping (uint256 => address) public ExternalAllowdContractGen1; mapping (uint256 => uint256) public personIndexToSiringPrice0; mapping (uint256 => uint256) public personIndexToSiringPrice1; address public CeoAddress; address public DevAddress; struct Person { string name; string surname; uint64 genes; uint64 birthTime; uint32 fatherId; uint32 motherId; uint32 readyToBreedWithId; uint32 trainedcount; uint32 beatencount; bool readyToBreedWithGen; bool gender; bool fatherGeneration; bool motherGeneration; } Person[] private PersonsGen0; Person[] private PersonsGen1; modifier onlyCEO() { require(msg.sender == CeoAddress); _; } modifier onlyDEV() { require(msg.sender == DevAddress); _; } modifier onlyPlayers() { require(ownershipTokenCountGen1[msg.sender]>0 || CelGen0.balanceOf(msg.sender)>0); _; } /// Access modifier for contract owner only functionality /* modifier onlyTopLevel() { require( msg.sender == CeoAddress || msg.sender == DevAddress ); _; } */ function CelebrityBreederToken() public { CeoAddress= msg.sender; DevAddress= msg.sender; } function setBreedingFee(uint256 newfee) external onlyCEO{ breedingFee=newfee; } function allowexternalContract(address _to, uint256 _tokenId,bool _tokengeneration) public { // Caller must own token. require(_owns(msg.sender, _tokenId, _tokengeneration)); if(_tokengeneration) { if(_addressNotNull(_to)) { ExternalAllowdContractGen1[_tokenId]=_to; } else { delete ExternalAllowdContractGen1[_tokenId]; } } else { if(_addressNotNull(_to)) { ExternalAllowdContractGen0[_tokenId]=_to; } else { delete ExternalAllowdContractGen0[_tokenId]; } } } //@Artyom Required for ERC-721 compliance. function approve(address _to, uint256 _tokenId) public { //@Artyom only gen1 // Caller must own token. require(_owns(msg.sender, _tokenId, true)); personIndexToApprovedGen1[_tokenId] = _to; Approval(msg.sender, _to, _tokenId); } // @Artyom Required for ERC-721 compliance. //@Artyom only gen1 function balanceOf(address _owner) public view returns (uint256 balance) { return ownershipTokenCountGen1[_owner]; } function getPerson(uint256 _tokenId,bool generation) public view returns ( string name, string surname, uint64 genes,uint64 birthTime, uint32 readyToBreedWithId, uint32 trainedcount,uint32 beatencount,bool readyToBreedWithGen, bool gender) { Person person; if(generation==false) { person = PersonsGen0[_tokenId]; } else { person = PersonsGen1[_tokenId]; } name = person.name; surname=person.surname; genes=person.genes; birthTime=person.birthTime; readyToBreedWithId=person.readyToBreedWithId; trainedcount=person.trainedcount; beatencount=person.beatencount; readyToBreedWithGen=person.readyToBreedWithGen; gender=person.gender; } function getPersonParents(uint256 _tokenId, bool generation) public view returns ( uint32 fatherId, uint32 motherId, bool fatherGeneration, bool motherGeneration) { Person person; if(generation==false) { person = PersonsGen0[_tokenId]; } else { person = PersonsGen1[_tokenId]; } fatherId=person.fatherId; motherId=person.motherId; fatherGeneration=person.fatherGeneration; motherGeneration=person.motherGeneration; } // @Artyom Required for ERC-721 compliance. function implementsERC721() public pure returns (bool) { return true; } // @Artyom Required for ERC-721 compliance. function name() public pure returns (string) { return NAME; } // @Artyom Required for ERC-721 compliance. function ownerOf(uint256 _tokenId) public view returns (address owner) { owner = personIndexToOwnerGen1[_tokenId]; require(_addressNotNull(owner)); } //@Artyom only gen1 function purchase(uint256 _tokenId) public payable { address oldOwner = personIndexToOwnerGen1[_tokenId]; address newOwner = msg.sender; uint256 sellingPrice = personIndexToPriceGen1[_tokenId]; personIndexToPriceGen1[_tokenId]=MaxValue; // Making sure token owner is not sending to self require(oldOwner != newOwner); // Safety check to prevent against an unexpected 0x0 default. require(_addressNotNull(newOwner)); // Making sure sent amount is greater than or equal to the sellingPrice require(msg.value >= sellingPrice); // uint256 payment = uint256(SafeMath.div(SafeMath.mul(sellingPrice, 94), 100)); uint256 purchaseExcess = SafeMath.sub(msg.value, sellingPrice); _transfer(oldOwner, newOwner, _tokenId); // Pay previous tokenOwner if owner is not contract if (oldOwner != address(this)) { // oldOwner.transfer(payment); //(1-0.06) //old code for holding some percents oldOwner.transfer(sellingPrice); } blankbreedingdata(_tokenId,true); TokenSold(_tokenId, sellingPrice, personIndexToPriceGen1[_tokenId], oldOwner, newOwner, PersonsGen1[_tokenId].name); msg.sender.transfer(purchaseExcess); } //@Artyom only gen1 function priceOf(uint256 _tokenId) public view returns (uint256 price) { return personIndexToPriceGen1[_tokenId]; } function setCEO(address _newCEO) external onlyCEO { require(_addressNotNull(_newCEO)); CeoAddress = _newCEO; } //@Artyom only gen1 function setprice(uint256 _tokenId, uint256 _price) public { require(_owns(msg.sender, _tokenId, true)); if(_price<=0 || _price>=MaxValue) { personIndexToPriceGen1[_tokenId]=MaxValue; } else { personIndexToPriceGen1[_tokenId]=_price; } SellingPriceEvent(msg.sender,_tokenId,true,_price); } function setDEV(address _newDEV) external onlyDEV { require(_addressNotNull(_newDEV)); DevAddress = _newDEV; } // @Artyom Required for ERC-721 compliance. function symbol() public pure returns (string) { return SYMBOL; } // @Artyom Required for ERC-721 compliance. //@Artyom only gen1 function takeOwnership(uint256 _tokenId) public { address newOwner = msg.sender; address oldOwner = personIndexToOwnerGen1[_tokenId]; // Safety check to prevent against an unexpected 0x0 default. require(_addressNotNull(newOwner)); // Making sure transfer is approved require(_approvedGen1(newOwner, _tokenId)); _transfer(oldOwner, newOwner, _tokenId); } //@Artyom only gen1 function tokensOfOwner(address _owner) public view returns(uint256[] ownerTokens) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 totalPersons = totalSupply(); uint256 resultIndex = 0; uint256 personId; for (personId = 0; personId <= totalPersons; personId++) { if (personIndexToOwnerGen1[personId] == _owner) { result[resultIndex] = personId; resultIndex++; } } return result; } } // @Artyom Required for ERC-721 compliance. //@Artyom only gen1 function totalSupply() public view returns (uint256 total) { return PersonsGen1.length; } // @Artyom Required for ERC-721 compliance. //@Artyom only gen1 function transfer( address _to, uint256 _tokenId) public { require(_owns(msg.sender, _tokenId, true)); require(_addressNotNull(_to)); _transfer(msg.sender, _to, _tokenId); } // @Artyom Required for ERC-721 compliance. //@Artyom only gen1 function transferFrom(address _from, address _to, uint256 _tokenId) public { require(_owns(_from, _tokenId, true)); require(_approvedGen1(_to, _tokenId)); require(_addressNotNull(_to)); _transfer(_from, _to, _tokenId); } function _addressNotNull(address _to) private pure returns (bool) { return _to != address(0); } /// For checking approval of transfer for address _to function _approvedGen1(address _to, uint256 _tokenId) private view returns (bool) { return personIndexToApprovedGen1[_tokenId] == _to; } //@Artyom only gen0 function createPersonGen0(string _name, string _surname,uint64 _genes, bool _gender) external onlyCEO returns(uint256) { return _birthPerson(_name, _surname ,_genes, _gender, false); } function SetGene(uint256 tokenId,bool generation, uint64 newgene) public { require(_owns(msg.sender, tokenId, generation) || msg.sender==CeoAddress); require(newgene<=9999999999 && newgene>=10); Person person; //@Artyom reference if (generation==false) { person = PersonsGen0[tokenId]; } else { person = PersonsGen1[tokenId]; } require(person.genes<=90); uint64 _gene=newgene; uint64 _pointCount=0; for(uint i=0;i<10;i++) { _pointCount+=_gene%10; _gene=_gene/10; } // log(_pointCount,person.genes); require(_pointCount==person.genes); person.genes=newgene; GenesInitialisedEvent(msg.sender,tokenId,generation,newgene); } function breed(uint256 _mypersonid, bool _mypersongeneration, uint256 _withpersonid, bool _withpersongeneration, string _boyname, string _girlname) public payable { //@Artyom mother require(_owns(msg.sender, _mypersonid, _mypersongeneration)); require(CreationLimitGen1>totalSupply()+1); //Mother Person person; //@Artyom reference if(_mypersongeneration==false) { person = PersonsGen0[_mypersonid]; } else { person = PersonsGen1[_mypersonid]; require(person.gender==false); //@Artyom checking gender for gen1 to be mother in this case } require(person.genes>90);//@Artyom if its unlocked uint64 genes1=person.genes; //Father if(_withpersongeneration==false) { person = PersonsGen0[_withpersonid]; } else { person = PersonsGen1[_withpersonid]; } require(readyTobreed(_mypersonid, _mypersongeneration, _withpersonid, _withpersongeneration)); require(breedingFee<=msg.value); delete person.readyToBreedWithId; person.readyToBreedWithGen=false; // uint64 genes2=person.genes; uint64 _generatedGen; bool _gender; (_generatedGen,_gender)=_generateGene(genes1,person.genes,_mypersonid,_withpersonid); if(_gender) { _girlname=_boyname; //@Artyom if gender is true/1 then it should take the boyname } uint newid=_birthPerson(_girlname, person.surname, _generatedGen, _gender, true); PersonsGen1[newid].fatherGeneration=_withpersongeneration; // @ Artyom, did here because stack too deep for function PersonsGen1[newid].motherGeneration=_mypersongeneration; PersonsGen1[newid].fatherId=uint32(_withpersonid); PersonsGen1[newid].motherId=uint32(_mypersonid); _payout(); } function breedOnAuction(uint256 _mypersonid, bool _mypersongeneration, uint256 _withpersonid, bool _withpersongeneration, string _boyname, string _girlname) public payable { //@Artyom mother require(_owns(msg.sender, _mypersonid, _mypersongeneration)); require(CreationLimitGen1>totalSupply()+1); require(!(_mypersonid==_withpersonid && _mypersongeneration==_withpersongeneration));// @Artyom not to breed with self require(!((_mypersonid==0 && _mypersongeneration==false) || (_withpersonid==0 && _withpersongeneration==false))); //Not to touch Satoshi //Mother Person person; //@Artyom reference if(_mypersongeneration==false) { person = PersonsGen0[_mypersonid]; } else { person = PersonsGen1[_mypersonid]; require(person.gender==false); //@Artyom checking gender for gen1 to be mother in this case } require(person.genes>90);//@Artyom if its unlocked address owneroffather; uint256 _siringprice; uint64 genes1=person.genes; //Father if(_withpersongeneration==false) { person = PersonsGen0[_withpersonid]; _siringprice=personIndexToSiringPrice0[_withpersonid]; owneroffather=CelGen0.ownerOf(_withpersonid); } else { person = PersonsGen1[_withpersonid]; _siringprice=personIndexToSiringPrice1[_withpersonid]; owneroffather= personIndexToOwnerGen1[_withpersonid]; } require(_siringprice>0 && _siringprice<MaxValue); require((breedingFee+_siringprice)<=msg.value); // uint64 genes2=; uint64 _generatedGen; bool _gender; (_generatedGen,_gender)=_generateGene(genes1,person.genes,_mypersonid,_withpersonid); if(_gender) { _girlname=_boyname; //@Artyom if gender is true/1 then it should take the boyname } uint newid=_birthPerson(_girlname, person.surname, _generatedGen, _gender, true); PersonsGen1[newid].fatherGeneration=_withpersongeneration; // @ Artyom, did here because stack too deep for function PersonsGen1[newid].motherGeneration=_mypersongeneration; PersonsGen1[newid].fatherId=uint32(_withpersonid); PersonsGen1[newid].motherId=uint32(_mypersonid); owneroffather.transfer(_siringprice); _payout(); } function prepareToBreed(uint256 _mypersonid, bool _mypersongeneration, uint256 _withpersonid, bool _withpersongeneration, uint256 _siringprice) external { //@Artyom father require(_owns(msg.sender, _mypersonid, _mypersongeneration)); Person person; //@Artyom reference if(_mypersongeneration==false) { person = PersonsGen0[_mypersonid]; personIndexToSiringPrice0[_mypersonid]=_siringprice; } else { person = PersonsGen1[_mypersonid]; require(person.gender==true);//@Artyom for gen1 checking genders to be male personIndexToSiringPrice1[_mypersonid]=_siringprice; } require(person.genes>90);//@Artyom if its unlocked person.readyToBreedWithId=uint32(_withpersonid); person.readyToBreedWithGen=_withpersongeneration; SiringPriceEvent(msg.sender,_mypersonid,_mypersongeneration,_siringprice); } function readyTobreed(uint256 _mypersonid, bool _mypersongeneration, uint256 _withpersonid, bool _withpersongeneration) public view returns(bool) { if (_mypersonid==_withpersonid && _mypersongeneration==_withpersongeneration) //Not to fuck Themselves return false; if((_mypersonid==0 && _mypersongeneration==false) || (_withpersonid==0 && _withpersongeneration==false)) //Not to touch Satoshi return false; Person withperson; //@Artyom reference if(_withpersongeneration==false) { withperson = PersonsGen0[_withpersonid]; } else { withperson = PersonsGen1[_withpersonid]; } if(withperson.readyToBreedWithGen==_mypersongeneration) { if(withperson.readyToBreedWithId==_mypersonid) { return true; } } return false; } function _birthPerson(string _name, string _surname, uint64 _genes, bool _gender, bool _generation) private returns(uint256) { // about this steps Person memory _person = Person({ name: _name, surname: _surname, genes: _genes, birthTime: uint64(now), fatherId: 0, motherId: 0, readyToBreedWithId: 0, trainedcount: 0, beatencount: 0, readyToBreedWithGen: false, gender: _gender, fatherGeneration: false, motherGeneration: false }); uint256 newPersonId; if(_generation==false) { newPersonId = PersonsGen0.push(_person) - 1; } else { newPersonId = PersonsGen1.push(_person) - 1; personIndexToPriceGen1[newPersonId] = MaxValue; //@Artyom indicating not for sale // per ERC721 draft-This will assign ownership, and also emit the Transfer event as _transfer(address(0), msg.sender, newPersonId); } Birth(newPersonId, _name, msg.sender); return newPersonId; } function _generateGene(uint64 _genes1,uint64 _genes2,uint256 _mypersonid,uint256 _withpersonid) private returns(uint64,bool) { uint64 _gene; uint64 _gene1; uint64 _gene2; uint64 _rand; uint256 _finalGene=0; bool gender=false; for(uint i=0;i<10;i++) { _gene1 =_genes1%10; _gene2=_genes2%10; _genes1=_genes1/10; _genes2=_genes2/10; _rand=uint64(keccak256(block.blockhash(block.number), i, now,_mypersonid,_withpersonid))%10000; if(_gene1>=_gene2) { _gene=_gene1-_gene2; } else { _gene=_gene2-_gene1; } if(_rand<26) { _gene-=3; } else if(_rand<455) { _gene-=2; } else if(_rand<3173) { _gene-=1; } else if(_rand<6827) { } else if(_rand<9545) { _gene+=1; } else if(_rand<9974) { _gene+=2; } else if(_rand<1000) { _gene+=3; } if(_gene>12) //@Artyom to avoid negative overflow _gene=0; if(_gene>9) _gene=9; _finalGene+=(uint(10)**i)*_gene; } if(uint64(keccak256(block.blockhash(block.number), 11, now,_mypersonid,_withpersonid))%2>0) gender=true; return(uint64(_finalGene),gender); } function _owns(address claimant, uint256 _tokenId,bool _tokengeneration) private view returns (bool) { if(_tokengeneration) { return ((claimant == personIndexToOwnerGen1[_tokenId]) || (claimant==ExternalAllowdContractGen1[_tokenId])); } else { return ((claimant == CelGen0.personIndexToOwner(_tokenId)) || (claimant==ExternalAllowdContractGen0[_tokenId])); } } function _payout() private { DevAddress.transfer((this.balance/10)*3); CeoAddress.transfer((this.balance/10)*7); } // @Artyom Required for ERC-721 compliance. //@Artyom only gen1 function _transfer(address _from, address _to, uint256 _tokenId) private { // Since the number of persons is capped to 2^32 we can't overflow this ownershipTokenCountGen1[_to]++; //transfer ownership personIndexToOwnerGen1[_tokenId] = _to; // When creating new persons _from is 0x0, but we can't account that address. if (_addressNotNull(_from)) { ownershipTokenCountGen1[_from]--; // clear any previously approved ownership exchange blankbreedingdata(_tokenId,true); } // Emit the transfer event. Transfer(_from, _to, _tokenId); } function blankbreedingdata(uint256 _personid, bool _persongeneration) private{ Person person; if(_persongeneration==false) { person = PersonsGen0[_personid]; delete ExternalAllowdContractGen0[_personid]; delete personIndexToSiringPrice0[_personid]; } else { person = PersonsGen1[_personid]; delete ExternalAllowdContractGen1[_personid]; delete personIndexToSiringPrice1[_personid]; delete personIndexToApprovedGen1[_personid]; } delete person.readyToBreedWithId; delete person.readyToBreedWithGen; } function train(uint256 personid, bool persongeneration, uint8 gene) external payable onlyPlayers { require(gene>=0 && gene<10); uint256 trainingPrice=checkTrainingPrice(personid,persongeneration); require(msg.value >= trainingPrice); Person person; if(persongeneration==false) { person = PersonsGen0[personid]; } else { person = PersonsGen1[personid]; } require(person.genes>90);//@Artyom if its unlocked uint gensolo=person.genes/(uint(10)**gene); gensolo=gensolo%10; require(gensolo<9); //@Artyom not to train after 9 person.genes+=uint64(10)**gene; person.trainedcount++; uint256 purchaseExcess = SafeMath.sub(msg.value, trainingPrice); msg.sender.transfer(purchaseExcess); _payout(); Trained(msg.sender, personid, persongeneration); } function beat(uint256 personid, bool persongeneration, uint8 gene) external payable onlyPlayers { require(gene>=0 && gene<10); uint256 beatingPrice=checkBeatingPrice(personid,persongeneration); require(msg.value >= beatingPrice); Person person; if(persongeneration==false) { person = PersonsGen0[personid]; } else { person = PersonsGen1[personid]; } require(person.genes>90);//@Artyom if its unlocked uint gensolo=person.genes/(uint(10)**gene); gensolo=gensolo%10; require(gensolo>0); person.genes-=uint64(10)**gene; person.beatencount++; uint256 purchaseExcess = SafeMath.sub(msg.value, beatingPrice); msg.sender.transfer(purchaseExcess); _payout(); Beaten(msg.sender, personid, persongeneration); } function checkTrainingPrice(uint256 personid, bool persongeneration) view returns (uint256) { Person person; if(persongeneration==false) { person = PersonsGen0[personid]; } else { person = PersonsGen1[personid]; } uint256 _trainingprice= (uint(2)**person.trainedcount) * initialTraining; if (_trainingprice > 5 ether) _trainingprice=5 ether; return _trainingprice; } function checkBeatingPrice(uint256 personid, bool persongeneration) view returns (uint256) { Person person; if(persongeneration==false) { person = PersonsGen0[personid]; } else { person = PersonsGen1[personid]; } uint256 _beatingprice=(uint(2)**person.beatencount) * initialBeating; if (_beatingprice > 7 ether) _beatingprice=7 ether; return _beatingprice; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"personid","type":"uint256"},{"name":"persongeneration","type":"bool"},{"name":"gene","type":"uint8"}],"name":"beat","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CeoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"ExternalAllowdContractGen0","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_mypersonid","type":"uint256"},{"name":"_mypersongeneration","type":"bool"},{"name":"_withpersonid","type":"uint256"},{"name":"_withpersongeneration","type":"bool"}],"name":"readyTobreed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"total","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"personIndexToSiringPrice0","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"generation","type":"bool"}],"name":"getPersonParents","outputs":[{"name":"fatherId","type":"uint32"},{"name":"motherId","type":"uint32"},{"name":"fatherGeneration","type":"bool"},{"name":"motherGeneration","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newfee","type":"uint256"}],"name":"setBreedingFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_tokengeneration","type":"bool"}],"name":"allowexternalContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"personIndexToOwnerGen1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_surname","type":"string"},{"name":"_genes","type":"uint64"},{"name":"_gender","type":"bool"}],"name":"createPersonGen0","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newDEV","type":"address"}],"name":"setDEV","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"setprice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"ownerTokens","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"generation","type":"bool"},{"name":"newgene","type":"uint64"}],"name":"SetGene","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"DevAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"personid","type":"uint256"},{"name":"persongeneration","type":"bool"}],"name":"checkBeatingPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"ExternalAllowdContractGen1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"priceOf","outputs":[{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialTraining","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_mypersonid","type":"uint256"},{"name":"_mypersongeneration","type":"bool"},{"name":"_withpersonid","type":"uint256"},{"name":"_withpersongeneration","type":"bool"},{"name":"_boyname","type":"string"},{"name":"_girlname","type":"string"}],"name":"breedOnAuction","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"breedingFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"personIndexToSiringPrice1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MaxValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"generation","type":"bool"}],"name":"getPerson","outputs":[{"name":"name","type":"string"},{"name":"surname","type":"string"},{"name":"genes","type":"uint64"},{"name":"birthTime","type":"uint64"},{"name":"readyToBreedWithId","type":"uint32"},{"name":"trainedcount","type":"uint32"},{"name":"beatencount","type":"uint32"},{"name":"readyToBreedWithGen","type":"bool"},{"name":"gender","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"personid","type":"uint256"},{"name":"persongeneration","type":"bool"},{"name":"gene","type":"uint8"}],"name":"train","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_mypersonid","type":"uint256"},{"name":"_mypersongeneration","type":"bool"},{"name":"_withpersonid","type":"uint256"},{"name":"_withpersongeneration","type":"bool"},{"name":"_boyname","type":"string"},{"name":"_girlname","type":"string"}],"name":"breed","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"initialBeating","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"personIndexToApprovedGen1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"personid","type":"uint256"},{"name":"persongeneration","type":"bool"}],"name":"checkTrainingPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_mypersonid","type":"uint256"},{"name":"_mypersongeneration","type":"bool"},{"name":"_withpersonid","type":"uint256"},{"name":"_withpersongeneration","type":"bool"},{"name":"_siringprice","type":"uint256"}],"name":"prepareToBreed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"owner","type":"address"}],"name":"Birth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"oldPrice","type":"uint256"},{"indexed":false,"name":"newPrice","type":"uint256"},{"indexed":false,"name":"prevOwner","type":"address"},{"indexed":false,"name":"winner","type":"address"},{"indexed":false,"name":"name","type":"string"}],"name":"TokenSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caller","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"generation","type":"bool"}],"name":"Trained","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caller","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"generation","type":"bool"}],"name":"Beaten","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caller","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"generation","type":"bool"},{"indexed":false,"name":"price","type":"uint256"}],"name":"SiringPriceEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caller","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"generation","type":"bool"},{"indexed":false,"name":"price","type":"uint256"}],"name":"SellingPriceEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caller","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"generation","type":"bool"},{"indexed":false,"name":"genes","type":"uint256"}],"name":"GenesInitialisedEvent","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"}]
Contract Creation Code
608060405273bb5ed1edeb5149af3ab43ea9c7a6963b3c1374f76000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550662386f26fc100006001556509184e72a0006002556512309ce54000600355341561008257600080fd5b33600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614bfa806101136000396000f30060806040526004361061021a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063013a83f11461021f57806306fdde0314610258578063095ea7b3146102e65780630b869824146103315780630de7e440146103865780630e14f955146103f15780631051db341461045657806318160ddd1461048357806323b872dd146104ac57806327cae7c01461051757806327d7874c146105565780633befedea146105975780634574dea51461061757806351584916146106425780635423977714610699578063630e0ae6146107045780636352211e1461078957806369288540146107f457806370a0823114610835578063843170081461088a5780638462151c146108bf578063871388c91461095557806389a4c1a0146109a0578063944c8929146109f557806395d89b4114610a40578063a3f4df7e14610ace578063a9059cbb14610b5c578063ade2d19314610ba7578063b2e6ceeb14610c12578063b9186d7d14610c3d578063b944ef3c14610c7c578063c13fb08b14610ca5578063c69cd09d14610d73578063c737338614610d9c578063d230e87514610ddb578063e282969e14610e04578063ec0d69e314610fa5578063ec0ea81614610fde578063efef39a1146110ac578063f2abd01d146110cc578063f4c09c17146110f5578063f76f8d7814611160578063fa28a6b6146111ee578063fa6fc03714611239575b600080fd5b61025660048036038101908080359060200190929190803515159060200190929190803560ff169060200190929190505050611290565b005b341561026357600080fd5b61026b61164a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102f157600080fd5b61032f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611687565b005b341561033c57600080fd5b610344611759565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561039157600080fd5b6103af6004803603810190808035906020019092919050505061177f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103fc57600080fd5b61043c60048036038101908080359060200190929190803515159060200190929190803590602001909291908035151590602001909291905050506117b2565b604051808215151515815260200191505060405180910390f35b341561046157600080fd5b6104696118ba565b604051808215151515815260200191505060405180910390f35b341561048e57600080fd5b6104966118c3565b6040518082815260200191505060405180910390f35b34156104b757600080fd5b610515600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118d0565b005b341561052257600080fd5b61054060048036038101908080359060200190929190505050611920565b6040518082815260200191505060405180910390f35b341561056157600080fd5b610595600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611938565b005b34156105a257600080fd5b6105cc600480360381019080803590602001909291908035151590602001909291905050506119ec565b604051808563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff168152602001831515151581526020018215151515815260200194505050505060405180910390f35b341561062257600080fd5b61064060048036038101908080359060200190929190505050611aa4565b005b341561064d57600080fd5b610697600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050611b0a565b005b34156106a457600080fd5b6106c260048036038101908080359060200190929190505050611c69565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561070f57600080fd5b610773600480360381019080803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390803567ffffffffffffffff169060200190929190803515159060200190929190505050611c9c565b6040518082815260200191505060405180910390f35b341561079457600080fd5b6107b260048036038101908080359060200190929190505050611d78565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156107ff57600080fd5b610833600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dc9565b005b341561084057600080fd5b610874600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e7d565b6040518082815260200191505060405180910390f35b341561089557600080fd5b6108bd6004803603810190808035906020019092919080359060200190929190505050611ec6565b005b34156108ca57600080fd5b6108fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fc2565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610941578082015181840152602081019050610926565b505050509050019250505060405180910390f35b341561096057600080fd5b61099e60048036038101908080359060200190929190803515159060200190929190803567ffffffffffffffff16906020019092919050505061210f565b005b34156109ab57600080fd5b6109b3612388565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610a0057600080fd5b610a2a600480360381019080803590602001909291908035151590602001909291905050506123ae565b6040518082815260200191505060405180910390f35b3415610a4b57600080fd5b610a5361244e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a93578082015181840152602081019050610a78565b50505050905090810190601f168015610ac05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610ad957600080fd5b610ae161248b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b21578082015181840152602081019050610b06565b50505050905090810190601f168015610b4e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610b6757600080fd5b610ba5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124c4565b005b3415610bb257600080fd5b610bd0600480360381019080803590602001909291905050506124fe565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610c1d57600080fd5b610c3b60048036038101908080359060200190929190505050612531565b005b3415610c4857600080fd5b610c66600480360381019080803590602001909291905050506125a6565b6040518082815260200191505060405180910390f35b3415610c8757600080fd5b610c8f6125c3565b6040518082815260200191505060405180910390f35b610d716004803603810190808035906020019092919080351515906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506125c9565b005b3415610d7e57600080fd5b610d86612af5565b6040518082815260200191505060405180910390f35b3415610da757600080fd5b610dc560048036038101908080359060200190929190505050612afb565b6040518082815260200191505060405180910390f35b3415610de657600080fd5b610dee612b13565b6040518082815260200191505060405180910390f35b3415610e0f57600080fd5b610e3960048036038101908080359060200190929190803515159060200190929190505050612b22565b6040518080602001806020018a67ffffffffffffffff1667ffffffffffffffff1681526020018967ffffffffffffffff1667ffffffffffffffff1681526020018863ffffffff1663ffffffff1681526020018763ffffffff1663ffffffff1681526020018663ffffffff1663ffffffff168152602001851515151581526020018415151515815260200183810383528c818151815260200191508051906020019080838360005b83811015610efb578082015181840152602081019050610ee0565b50505050905090810190601f168015610f285780820380516001836020036101000a031916815260200191505b5083810382528b818151815260200191508051906020019080838360005b83811015610f61578082015181840152602081019050610f46565b50505050905090810190601f168015610f8e5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b610fdc60048036038101908080359060200190929190803515159060200190929190803560ff169060200190929190505050612d71565b005b6110aa6004803603810190808035906020019092919080351515906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061312b565b005b6110ca600480360381019080803590602001909291905050506134b7565b005b34156110d757600080fd5b6110df6137d6565b6040518082815260200191505060405180910390f35b341561110057600080fd5b61111e600480360381019080803590602001909291905050506137dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561116b57600080fd5b61117361380f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156111b3578082015181840152602081019050611198565b50505050905090810190601f1680156111e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156111f957600080fd5b61122360048036038101908080359060200190929190803515159060200190929190505050613848565b6040518082815260200191505060405180910390f35b341561124457600080fd5b61128e6004803603810190808035906020019092919080351515906020019092919080359060200190929190803515159060200190929190803590602001909291905050506138e8565b005b6000806000806000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806113d1575060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561139c57600080fd5b5af115156113a957600080fd5b5050506040513d60208110156113be57600080fd5b8101908080519060200190929190505050115b15156113dc57600080fd5b60008560ff16101580156113f35750600a8560ff16105b15156113fe57600080fd5b61140887876123ae565b935083341015151561141957600080fd5b60001515861515141561144a57600e8781548110151561143557fe5b9060005260206000209060040201925061146a565b600f8781548110151561145957fe5b906000526020600020906004020192505b605a8360020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1611151561149b57600080fd5b8460ff16600a0a8360020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff168115156114ce57fe5b049150600a828115156114dd57fe5b0691506000821115156114ef57600080fd5b8460ff16600a0a8360020160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600301600081819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff160217905550506115803485613a9c565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156115c257600080fd5b6115ca613ab5565b7fee0cc81767fb293a336247d0b7b2d4a2bd01b9471eb023d895790c4fa4a235b1338888604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182151515158152602001935050505060405180910390a150505050505050565b60606040805190810160405280601b81526020017f43727970746f43656c6562726974794272656564657243617264730000000000815250905090565b61169333826001613bc7565b151561169e57600080fd5b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008083861480156117c75750821515851515145b156117d557600091506118b1565b6000861480156117e9575060001515851515145b806118045750600084148015611803575060001515831515145b5b1561181257600091506118b1565b60001515831515141561184357600e8481548110151561182e57fe5b90600052602060002090600402019050611863565b600f8481548110151561185257fe5b906000526020600020906004020190505b8415158160030160049054906101000a900460ff16151514156118ac57858160020160189054906101000a900463ffffffff1663ffffffff1614156118ab57600191506118b1565b5b600091505b50949350505050565b60006001905090565b6000600f80549050905090565b6118dc83826001613bc7565b15156118e757600080fd5b6118f18282613e04565b15156118fc57600080fd5b61190582613e70565b151561191057600080fd5b61191b838383613ea9565b505050565b600a6020528060005260406000206000915090505481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561199457600080fd5b61199d81613e70565b15156119a857600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060008015158615151415611a2457600e87815481101515611a0f57fe5b90600052602060002090600402019050611a44565b600f87815481101515611a3357fe5b906000526020600020906004020190505b8060020160109054906101000a900463ffffffff1694508060020160149054906101000a900463ffffffff1693508060030160069054906101000a900460ff1692508060030160079054906101000a900460ff1691505092959194509250565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b0057600080fd5b8060018190555050565b611b15338383613bc7565b1515611b2057600080fd5b8015611bc757611b2f83613e70565b15611b8b57826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611bc2565b6009600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b611c64565b611bd083613e70565b15611c2c57826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611c63565b6008600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b5b505050565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cfa57600080fd5b611d6c87878080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505086868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505085856000614058565b90509695505050505050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611db981613e70565b1515611dc457600080fd5b919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e2557600080fd5b611e2e81613e70565b1515611e3957600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ed233836001613bc7565b1515611edd57600080fd5b600081111580611ef857506a52b7d2dcc80cd2e40000008110155b15611f25576a52b7d2dcc80cd2e40000006007600084815260200190815260200160002081905550611f3e565b8060076000848152602001908152602001600020819055505b7f913e11880c4c308f0b48d197ed7f6f0943891f2440ad527a51d2e06e111460ff3383600184604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390a15050565b6060600060606000806000611fd687611e7d565b945060008514156120195760006040519080825280602002602001820160405280156120115781602001602082028038833980820191505090505b509550612105565b846040519080825280602002602001820160405280156120485781602001602082028038833980820191505090505b5093506120536118c3565b925060009150600090505b8281111515612101578673ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120f4578084838151811015156120dd57fe5b906020019060200201818152505081806001019250505b808060010191505061205e565b8395505b5050505050919050565b600080600080612120338888613bc7565b806121785750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561218357600080fd5b6402540be3ff8567ffffffffffffffff16111580156121ad5750600a8567ffffffffffffffff1610155b15156121b857600080fd5b6000151586151514156121e957600e878154811015156121d457fe5b90600052602060002090600402019350612209565b600f878154811015156121f857fe5b906000526020600020906004020193505b605a8460020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161115151561223b57600080fd5b84925060009150600090505b600a81101561229157600a8367ffffffffffffffff1681151561226657fe5b0682019150600a8367ffffffffffffffff1681151561228157fe5b0492508080600101915050612247565b8360020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff168267ffffffffffffffff161415156122cb57600080fd5b848460020160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fa3538417882555b2b672efa68fe316620fd2b0413107809b0653bbb4f920a66833888888604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001831515151581526020018267ffffffffffffffff16815260200194505050505060405180910390a150505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080151584151514156123e357600e858154811015156123ce57fe5b90600052602060002090600402019150612403565b600f858154811015156123f257fe5b906000526020600020906004020191505b6003548260030160009054906101000a900463ffffffff1663ffffffff1660020a029050676124fee993bc000081111561244357676124fee993bc000090505b809250505092915050565b60606040805190810160405280600d81526020017f43656c6542726565644361726400000000000000000000000000000000000000815250905090565b6040805190810160405280601b81526020017f43727970746f43656c656272697479427265656465724361726473000000000081525081565b6124d033826001613bc7565b15156124db57600080fd5b6124e482613e70565b15156124ef57600080fd5b6124fa338383613ea9565b5050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803391506004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061257682613e70565b151561258157600080fd5b61258b8284613e04565b151561259657600080fd5b6125a1818385613ea9565b505050565b600060076000838152602001908152602001600020549050919050565b60025481565b60008060008060008060006125df338e8e613bc7565b15156125ea57600080fd5b60016125f46118c3565b01622625a011151561260557600080fd5b8a8d14801561261757508915158c1515145b15151561262357600080fd5b60008d1480156126375750600015158c1515145b80612652575060008b1480156126515750600015158a1515145b5b15151561265e57600080fd5b600015158c1515141561268f57600e8d81548110151561267a57fe5b906000526020600020906004020196506126d3565b600f8d81548110151561269e57fe5b90600052602060002090600402019650600015158760030160059054906101000a900460ff1615151415156126d257600080fd5b5b605a8760020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1611151561270457600080fd5b8660020160009054906101000a900467ffffffffffffffff169350600015158a1515141561282a57600e8b81548110151561273b57fe5b90600052602060002090600402019650600a60008c81526020019081526020016000205494506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8c6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15156127f057600080fd5b5af115156127fd57600080fd5b5050506040513d602081101561281257600080fd5b81019080805190602001909291905050509550612896565b600f8b81548110151561283957fe5b90600052602060002090600402019650600b60008c8152602001908152602001600020549450600460008c815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1695505b6000851180156128b057506a52b7d2dcc80cd2e400000085105b15156128bb57600080fd5b348560015401111515156128ce57600080fd5b6128f2848860020160009054906101000a900467ffffffffffffffff168f8e614653565b80935081945050508115612904578897505b6129ae88886001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129a05780601f10612975576101008083540402835291602001916129a0565b820191906000526020600020905b81548152906001019060200180831161298357829003601f168201915b505050505085856001614058565b905089600f828154811015156129c057fe5b906000526020600020906004020160030160066101000a81548160ff0219169083151502179055508b600f828154811015156129f857fe5b906000526020600020906004020160030160076101000a81548160ff0219169083151502179055508a600f82815481101515612a3057fe5b906000526020600020906004020160020160106101000a81548163ffffffff021916908363ffffffff1602179055508c600f82815481101515612a6f57fe5b906000526020600020906004020160020160146101000a81548163ffffffff021916908363ffffffff1602179055508573ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501515612ade57600080fd5b612ae6613ab5565b50505050505050505050505050565b60015481565b600b6020528060005260406000206000915090505481565b6a52b7d2dcc80cd2e400000081565b606080600080600080600080600080600015158b15151415612b6257600e8c815481101515612b4d57fe5b90600052602060002090600402019050612b82565b600f8c815481101515612b7157fe5b906000526020600020906004020190505b806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c1a5780601f10612bef57610100808354040283529160200191612c1a565b820191906000526020600020905b815481529060010190602001808311612bfd57829003601f168201915b50505050509950806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612cb95780601f10612c8e57610100808354040283529160200191612cb9565b820191906000526020600020905b815481529060010190602001808311612c9c57829003601f168201915b505050505098508060020160009054906101000a900467ffffffffffffffff1697508060020160089054906101000a900467ffffffffffffffff1696508060020160189054906101000a900463ffffffff16955080600201601c9054906101000a900463ffffffff1694508060030160009054906101000a900463ffffffff1693508060030160049054906101000a900460ff1692508060030160059054906101000a900460ff169150509295985092959850929598565b6000806000806000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612eb2575060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612e7d57600080fd5b5af11515612e8a57600080fd5b5050506040513d6020811015612e9f57600080fd5b8101908080519060200190929190505050115b1515612ebd57600080fd5b60008560ff1610158015612ed45750600a8560ff16105b1515612edf57600080fd5b612ee98787613848565b9350833410151515612efa57600080fd5b600015158615151415612f2b57600e87815481101515612f1657fe5b90600052602060002090600402019250612f4b565b600f87815481101515612f3a57fe5b906000526020600020906004020192505b605a8360020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16111515612f7c57600080fd5b8460ff16600a0a8360020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16811515612faf57fe5b049150600a82811515612fbe57fe5b069150600982101515612fd057600080fd5b8460ff16600a0a8360020160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600201601c81819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff160217905550506130613485613a9c565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156130a357600080fd5b6130ab613ab5565b7fdfda1f36e9a72c0e20d2410764fc28694c08c78e70289efc7622f83ef80e30fe338888604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182151515158152602001935050505060405180910390a150505050505050565b600080600080600061313e338c8c613bc7565b151561314957600080fd5b60016131536118c3565b01622625a011151561316457600080fd5b600015158a1515141561319557600e8b81548110151561318057fe5b906000526020600020906004020194506131d9565b600f8b8154811015156131a457fe5b90600052602060002090600402019450600015158560030160059054906101000a900460ff1615151415156131d857600080fd5b5b605a8560020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1611151561320a57600080fd5b8460020160009054906101000a900467ffffffffffffffff16935060001515881515141561325657600e8981548110151561324157fe5b90600052602060002090600402019450613276565b600f8981548110151561326557fe5b906000526020600020906004020194505b6132828b8b8b8b6117b2565b151561328d57600080fd5b346001541115151561329e57600080fd5b8460020160186101000a81549063ffffffff021916905560008560030160046101000a81548160ff0219169083151502179055506132f6848660020160009054906101000a900467ffffffffffffffff168d8c614653565b80935081945050508115613308578695505b6133b286866001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133a45780601f10613379576101008083540402835291602001916133a4565b820191906000526020600020905b81548152906001019060200180831161338757829003601f168201915b505050505085856001614058565b905087600f828154811015156133c457fe5b906000526020600020906004020160030160066101000a81548160ff02191690831515021790555089600f828154811015156133fc57fe5b906000526020600020906004020160030160076101000a81548160ff02191690831515021790555088600f8281548110151561343457fe5b906000526020600020906004020160020160106101000a81548163ffffffff021916908363ffffffff1602179055508a600f8281548110151561347357fe5b906000526020600020906004020160020160146101000a81548163ffffffff021916908363ffffffff1602179055506134aa613ab5565b5050505050505050505050565b6000806000806004600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169350339250600760008681526020019081526020016000205491506a52b7d2dcc80cd2e400000060076000878152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561356a57600080fd5b61357383613e70565b151561357e57600080fd5b81341015151561358d57600080fd5b6135973483613a9c565b90506135a4848487613ea9565b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151561361a578373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561361957600080fd5b5b613625856001614934565b7e8201e7bcbf010c2c07de59d6e97cb7e3cf67a46125c49cbc89b9d2cde1f48f858360076000898152602001908152602001600020548787600f8b81548110151561366c57fe5b9060005260206000209060040201600001604051808781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200182810382528381815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561377c5780601f106137515761010080835404028352916020019161377c565b820191906000526020600020905b81548152906001019060200180831161375f57829003601f168201915b505097505050505050505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156137cf57600080fd5b5050505050565b60035481565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600d81526020017f43656c654272656564436172640000000000000000000000000000000000000081525081565b6000806000801515841515141561387d57600e8581548110151561386857fe5b9060005260206000209060040201915061389d565b600f8581548110151561388c57fe5b906000526020600020906004020191505b60025482600201601c9054906101000a900463ffffffff1663ffffffff1660020a029050674563918244f400008111156138dd57674563918244f4000090505b809250505092915050565b60006138f5338787613bc7565b151561390057600080fd5b60001515851515141561394957600e8681548110151561391c57fe5b9060005260206000209060040201905081600a6000888152602001908152602001600020819055506139a5565b600f8681548110151561395857fe5b90600052602060002090600402019050600115158160030160059054906101000a900460ff16151514151561398c57600080fd5b81600b6000888152602001908152602001600020819055505b605a8160020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161115156139d657600080fd5b838160020160186101000a81548163ffffffff021916908363ffffffff160217905550828160030160046101000a81548160ff0219169083151502179055507f9c9bbfc444fadb4f6ea76eeea0f2096baf957e36bf9dea2e1520dfc82e6934aa33878785604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390a1505050505050565b6000828211151515613aaa57fe5b818303905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003600a3073ffffffffffffffffffffffffffffffffffffffff1631811515613b1657fe5b04029081150290604051600060405180830381858888f193505050501515613b3d57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6007600a3073ffffffffffffffffffffffffffffffffffffffff1631811515613b9e57fe5b04029081150290604051600060405180830381858888f193505050501515613bc557600080fd5b565b60008115613ca1576004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613c9a57506009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050613dfd565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aa1d98af846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515613d3057600080fd5b5af11515613d3d57600080fd5b5050506040513d6020811015613d5257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613dfa57506008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90505b9392505050565b60008273ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613f5383613e70565b15613fb457600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550613fb3816001614934565b5b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b6000614062614a86565b60006101a0604051908101604052808981526020018881526020018767ffffffffffffffff1681526020014267ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff1681526020016000151581526020018615158152602001600015158152602001600015158152509150600015158415151415614328576001600e8390806001815401808255809150509060018203906000526020600020906004020160009091929091909150600082015181600001908051906020019061415a929190614b29565b506020820151816001019080519060200190614177929190614b29565b5060408201518160020160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160020160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160020160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160020160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600201601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160030160006101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160030160046101000a81548160ff0219169083151502179055506101408201518160030160056101000a81548160ff0219169083151502179055506101608201518160030160066101000a81548160ff0219169083151502179055506101808201518160030160076101000a81548160ff021916908315150217905550505003905061456d565b6001600f83908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000019080519060200190614374929190614b29565b506020820151816001019080519060200190614391929190614b29565b5060408201518160020160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160020160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160020160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160020160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600201601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160030160006101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160030160046101000a81548160ff0219169083151502179055506101408201518160030160056101000a81548160ff0219169083151502179055506101608201518160030160066101000a81548160ff0219169083151502179055506101808201518160030160076101000a81548160ff02191690831515021790555050500390506a52b7d2dcc80cd2e4000000600760008381526020019081526020016000208190555061456c60003383613ea9565b5b7fb3b0cf861f168bcdb275c69da97b2543631552ba562628aa3c7317d4a6089ef281893360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156146095780820151818401526020810190506145ee565b50505050905090810190601f1680156146365780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1809250505095945050505050565b600080600080600080600080600080925060009150600090505b600a81101561488857600a8d67ffffffffffffffff1681151561468c57fe5b069550600a8c67ffffffffffffffff168115156146a557fe5b069450600a8d67ffffffffffffffff168115156146be57fe5b049c50600a8c67ffffffffffffffff168115156146d757fe5b049b50612710434082428e8e6040518086600019166000191681526020018581526020018481526020018381526020018281526020019550505050505060405180910390206001900467ffffffffffffffff1681151561473357fe5b0693508467ffffffffffffffff168667ffffffffffffffff1610151561475d578486039650614763565b85850396505b601a8467ffffffffffffffff16101561478157600387039650614837565b6101c78467ffffffffffffffff1610156147a057600287039650614836565b610c658467ffffffffffffffff1610156147bf57600187039650614835565b611aab8467ffffffffffffffff1610156147d857614834565b6125498467ffffffffffffffff1610156147f757600187019650614833565b6126f68467ffffffffffffffff16101561481657600287019650614832565b6103e88467ffffffffffffffff161015614831576003870196505b5b5b5b5b5b5b600c8767ffffffffffffffff16111561484f57600096505b60098767ffffffffffffffff16111561486757600996505b8667ffffffffffffffff1681600a0a0283019250808060010191505061466d565b600060024340600b428f8f6040518086600019166000191681526020018560ff167f01000000000000000000000000000000000000000000000000000000000000000281526001018481526020018381526020018281526020019550505050505060405180910390206001900467ffffffffffffffff1681151561490857fe5b0667ffffffffffffffff16111561491e57600191505b8282985098505050505050505094509492505050565b600080151582151514156149b357600e8381548110151561495157fe5b906000526020600020906004020190506008600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a600084815260200190815260200160002060009055614a56565b600f838154811015156149c257fe5b906000526020600020906004020190506009600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600b6000848152602001908152602001600020600090556006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b8060020160186101000a81549063ffffffff02191690558060030160046101000a81549060ff0219169055505050565b6101a0604051908101604052806060815260200160608152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff1681526020016000151581526020016000151581526020016000151581526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614b6a57805160ff1916838001178555614b98565b82800160010185558215614b98579182015b82811115614b97578251825591602001919060010190614b7c565b5b509050614ba59190614ba9565b5090565b614bcb91905b80821115614bc7576000816000905550600101614baf565b5090565b905600a165627a7a723058203ba28f220433460030c0c085caf3a4e47b356096d75eb32a6954e21b1c928d860029
Deployed Bytecode
0x60806040526004361061021a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063013a83f11461021f57806306fdde0314610258578063095ea7b3146102e65780630b869824146103315780630de7e440146103865780630e14f955146103f15780631051db341461045657806318160ddd1461048357806323b872dd146104ac57806327cae7c01461051757806327d7874c146105565780633befedea146105975780634574dea51461061757806351584916146106425780635423977714610699578063630e0ae6146107045780636352211e1461078957806369288540146107f457806370a0823114610835578063843170081461088a5780638462151c146108bf578063871388c91461095557806389a4c1a0146109a0578063944c8929146109f557806395d89b4114610a40578063a3f4df7e14610ace578063a9059cbb14610b5c578063ade2d19314610ba7578063b2e6ceeb14610c12578063b9186d7d14610c3d578063b944ef3c14610c7c578063c13fb08b14610ca5578063c69cd09d14610d73578063c737338614610d9c578063d230e87514610ddb578063e282969e14610e04578063ec0d69e314610fa5578063ec0ea81614610fde578063efef39a1146110ac578063f2abd01d146110cc578063f4c09c17146110f5578063f76f8d7814611160578063fa28a6b6146111ee578063fa6fc03714611239575b600080fd5b61025660048036038101908080359060200190929190803515159060200190929190803560ff169060200190929190505050611290565b005b341561026357600080fd5b61026b61164a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102f157600080fd5b61032f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611687565b005b341561033c57600080fd5b610344611759565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561039157600080fd5b6103af6004803603810190808035906020019092919050505061177f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103fc57600080fd5b61043c60048036038101908080359060200190929190803515159060200190929190803590602001909291908035151590602001909291905050506117b2565b604051808215151515815260200191505060405180910390f35b341561046157600080fd5b6104696118ba565b604051808215151515815260200191505060405180910390f35b341561048e57600080fd5b6104966118c3565b6040518082815260200191505060405180910390f35b34156104b757600080fd5b610515600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118d0565b005b341561052257600080fd5b61054060048036038101908080359060200190929190505050611920565b6040518082815260200191505060405180910390f35b341561056157600080fd5b610595600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611938565b005b34156105a257600080fd5b6105cc600480360381019080803590602001909291908035151590602001909291905050506119ec565b604051808563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff168152602001831515151581526020018215151515815260200194505050505060405180910390f35b341561062257600080fd5b61064060048036038101908080359060200190929190505050611aa4565b005b341561064d57600080fd5b610697600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050611b0a565b005b34156106a457600080fd5b6106c260048036038101908080359060200190929190505050611c69565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561070f57600080fd5b610773600480360381019080803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390803567ffffffffffffffff169060200190929190803515159060200190929190505050611c9c565b6040518082815260200191505060405180910390f35b341561079457600080fd5b6107b260048036038101908080359060200190929190505050611d78565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156107ff57600080fd5b610833600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dc9565b005b341561084057600080fd5b610874600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e7d565b6040518082815260200191505060405180910390f35b341561089557600080fd5b6108bd6004803603810190808035906020019092919080359060200190929190505050611ec6565b005b34156108ca57600080fd5b6108fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fc2565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610941578082015181840152602081019050610926565b505050509050019250505060405180910390f35b341561096057600080fd5b61099e60048036038101908080359060200190929190803515159060200190929190803567ffffffffffffffff16906020019092919050505061210f565b005b34156109ab57600080fd5b6109b3612388565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610a0057600080fd5b610a2a600480360381019080803590602001909291908035151590602001909291905050506123ae565b6040518082815260200191505060405180910390f35b3415610a4b57600080fd5b610a5361244e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a93578082015181840152602081019050610a78565b50505050905090810190601f168015610ac05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610ad957600080fd5b610ae161248b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b21578082015181840152602081019050610b06565b50505050905090810190601f168015610b4e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610b6757600080fd5b610ba5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124c4565b005b3415610bb257600080fd5b610bd0600480360381019080803590602001909291905050506124fe565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610c1d57600080fd5b610c3b60048036038101908080359060200190929190505050612531565b005b3415610c4857600080fd5b610c66600480360381019080803590602001909291905050506125a6565b6040518082815260200191505060405180910390f35b3415610c8757600080fd5b610c8f6125c3565b6040518082815260200191505060405180910390f35b610d716004803603810190808035906020019092919080351515906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506125c9565b005b3415610d7e57600080fd5b610d86612af5565b6040518082815260200191505060405180910390f35b3415610da757600080fd5b610dc560048036038101908080359060200190929190505050612afb565b6040518082815260200191505060405180910390f35b3415610de657600080fd5b610dee612b13565b6040518082815260200191505060405180910390f35b3415610e0f57600080fd5b610e3960048036038101908080359060200190929190803515159060200190929190505050612b22565b6040518080602001806020018a67ffffffffffffffff1667ffffffffffffffff1681526020018967ffffffffffffffff1667ffffffffffffffff1681526020018863ffffffff1663ffffffff1681526020018763ffffffff1663ffffffff1681526020018663ffffffff1663ffffffff168152602001851515151581526020018415151515815260200183810383528c818151815260200191508051906020019080838360005b83811015610efb578082015181840152602081019050610ee0565b50505050905090810190601f168015610f285780820380516001836020036101000a031916815260200191505b5083810382528b818151815260200191508051906020019080838360005b83811015610f61578082015181840152602081019050610f46565b50505050905090810190601f168015610f8e5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b610fdc60048036038101908080359060200190929190803515159060200190929190803560ff169060200190929190505050612d71565b005b6110aa6004803603810190808035906020019092919080351515906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061312b565b005b6110ca600480360381019080803590602001909291905050506134b7565b005b34156110d757600080fd5b6110df6137d6565b6040518082815260200191505060405180910390f35b341561110057600080fd5b61111e600480360381019080803590602001909291905050506137dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561116b57600080fd5b61117361380f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156111b3578082015181840152602081019050611198565b50505050905090810190601f1680156111e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156111f957600080fd5b61122360048036038101908080359060200190929190803515159060200190929190505050613848565b6040518082815260200191505060405180910390f35b341561124457600080fd5b61128e6004803603810190808035906020019092919080351515906020019092919080359060200190929190803515159060200190929190803590602001909291905050506138e8565b005b6000806000806000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806113d1575060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561139c57600080fd5b5af115156113a957600080fd5b5050506040513d60208110156113be57600080fd5b8101908080519060200190929190505050115b15156113dc57600080fd5b60008560ff16101580156113f35750600a8560ff16105b15156113fe57600080fd5b61140887876123ae565b935083341015151561141957600080fd5b60001515861515141561144a57600e8781548110151561143557fe5b9060005260206000209060040201925061146a565b600f8781548110151561145957fe5b906000526020600020906004020192505b605a8360020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1611151561149b57600080fd5b8460ff16600a0a8360020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff168115156114ce57fe5b049150600a828115156114dd57fe5b0691506000821115156114ef57600080fd5b8460ff16600a0a8360020160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600301600081819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff160217905550506115803485613a9c565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156115c257600080fd5b6115ca613ab5565b7fee0cc81767fb293a336247d0b7b2d4a2bd01b9471eb023d895790c4fa4a235b1338888604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182151515158152602001935050505060405180910390a150505050505050565b60606040805190810160405280601b81526020017f43727970746f43656c6562726974794272656564657243617264730000000000815250905090565b61169333826001613bc7565b151561169e57600080fd5b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008083861480156117c75750821515851515145b156117d557600091506118b1565b6000861480156117e9575060001515851515145b806118045750600084148015611803575060001515831515145b5b1561181257600091506118b1565b60001515831515141561184357600e8481548110151561182e57fe5b90600052602060002090600402019050611863565b600f8481548110151561185257fe5b906000526020600020906004020190505b8415158160030160049054906101000a900460ff16151514156118ac57858160020160189054906101000a900463ffffffff1663ffffffff1614156118ab57600191506118b1565b5b600091505b50949350505050565b60006001905090565b6000600f80549050905090565b6118dc83826001613bc7565b15156118e757600080fd5b6118f18282613e04565b15156118fc57600080fd5b61190582613e70565b151561191057600080fd5b61191b838383613ea9565b505050565b600a6020528060005260406000206000915090505481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561199457600080fd5b61199d81613e70565b15156119a857600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060008015158615151415611a2457600e87815481101515611a0f57fe5b90600052602060002090600402019050611a44565b600f87815481101515611a3357fe5b906000526020600020906004020190505b8060020160109054906101000a900463ffffffff1694508060020160149054906101000a900463ffffffff1693508060030160069054906101000a900460ff1692508060030160079054906101000a900460ff1691505092959194509250565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b0057600080fd5b8060018190555050565b611b15338383613bc7565b1515611b2057600080fd5b8015611bc757611b2f83613e70565b15611b8b57826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611bc2565b6009600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b611c64565b611bd083613e70565b15611c2c57826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611c63565b6008600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b5b505050565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cfa57600080fd5b611d6c87878080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505086868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505085856000614058565b90509695505050505050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611db981613e70565b1515611dc457600080fd5b919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e2557600080fd5b611e2e81613e70565b1515611e3957600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ed233836001613bc7565b1515611edd57600080fd5b600081111580611ef857506a52b7d2dcc80cd2e40000008110155b15611f25576a52b7d2dcc80cd2e40000006007600084815260200190815260200160002081905550611f3e565b8060076000848152602001908152602001600020819055505b7f913e11880c4c308f0b48d197ed7f6f0943891f2440ad527a51d2e06e111460ff3383600184604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390a15050565b6060600060606000806000611fd687611e7d565b945060008514156120195760006040519080825280602002602001820160405280156120115781602001602082028038833980820191505090505b509550612105565b846040519080825280602002602001820160405280156120485781602001602082028038833980820191505090505b5093506120536118c3565b925060009150600090505b8281111515612101578673ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120f4578084838151811015156120dd57fe5b906020019060200201818152505081806001019250505b808060010191505061205e565b8395505b5050505050919050565b600080600080612120338888613bc7565b806121785750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561218357600080fd5b6402540be3ff8567ffffffffffffffff16111580156121ad5750600a8567ffffffffffffffff1610155b15156121b857600080fd5b6000151586151514156121e957600e878154811015156121d457fe5b90600052602060002090600402019350612209565b600f878154811015156121f857fe5b906000526020600020906004020193505b605a8460020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161115151561223b57600080fd5b84925060009150600090505b600a81101561229157600a8367ffffffffffffffff1681151561226657fe5b0682019150600a8367ffffffffffffffff1681151561228157fe5b0492508080600101915050612247565b8360020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff168267ffffffffffffffff161415156122cb57600080fd5b848460020160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fa3538417882555b2b672efa68fe316620fd2b0413107809b0653bbb4f920a66833888888604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001831515151581526020018267ffffffffffffffff16815260200194505050505060405180910390a150505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080151584151514156123e357600e858154811015156123ce57fe5b90600052602060002090600402019150612403565b600f858154811015156123f257fe5b906000526020600020906004020191505b6003548260030160009054906101000a900463ffffffff1663ffffffff1660020a029050676124fee993bc000081111561244357676124fee993bc000090505b809250505092915050565b60606040805190810160405280600d81526020017f43656c6542726565644361726400000000000000000000000000000000000000815250905090565b6040805190810160405280601b81526020017f43727970746f43656c656272697479427265656465724361726473000000000081525081565b6124d033826001613bc7565b15156124db57600080fd5b6124e482613e70565b15156124ef57600080fd5b6124fa338383613ea9565b5050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803391506004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061257682613e70565b151561258157600080fd5b61258b8284613e04565b151561259657600080fd5b6125a1818385613ea9565b505050565b600060076000838152602001908152602001600020549050919050565b60025481565b60008060008060008060006125df338e8e613bc7565b15156125ea57600080fd5b60016125f46118c3565b01622625a011151561260557600080fd5b8a8d14801561261757508915158c1515145b15151561262357600080fd5b60008d1480156126375750600015158c1515145b80612652575060008b1480156126515750600015158a1515145b5b15151561265e57600080fd5b600015158c1515141561268f57600e8d81548110151561267a57fe5b906000526020600020906004020196506126d3565b600f8d81548110151561269e57fe5b90600052602060002090600402019650600015158760030160059054906101000a900460ff1615151415156126d257600080fd5b5b605a8760020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1611151561270457600080fd5b8660020160009054906101000a900467ffffffffffffffff169350600015158a1515141561282a57600e8b81548110151561273b57fe5b90600052602060002090600402019650600a60008c81526020019081526020016000205494506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8c6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15156127f057600080fd5b5af115156127fd57600080fd5b5050506040513d602081101561281257600080fd5b81019080805190602001909291905050509550612896565b600f8b81548110151561283957fe5b90600052602060002090600402019650600b60008c8152602001908152602001600020549450600460008c815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1695505b6000851180156128b057506a52b7d2dcc80cd2e400000085105b15156128bb57600080fd5b348560015401111515156128ce57600080fd5b6128f2848860020160009054906101000a900467ffffffffffffffff168f8e614653565b80935081945050508115612904578897505b6129ae88886001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129a05780601f10612975576101008083540402835291602001916129a0565b820191906000526020600020905b81548152906001019060200180831161298357829003601f168201915b505050505085856001614058565b905089600f828154811015156129c057fe5b906000526020600020906004020160030160066101000a81548160ff0219169083151502179055508b600f828154811015156129f857fe5b906000526020600020906004020160030160076101000a81548160ff0219169083151502179055508a600f82815481101515612a3057fe5b906000526020600020906004020160020160106101000a81548163ffffffff021916908363ffffffff1602179055508c600f82815481101515612a6f57fe5b906000526020600020906004020160020160146101000a81548163ffffffff021916908363ffffffff1602179055508573ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501515612ade57600080fd5b612ae6613ab5565b50505050505050505050505050565b60015481565b600b6020528060005260406000206000915090505481565b6a52b7d2dcc80cd2e400000081565b606080600080600080600080600080600015158b15151415612b6257600e8c815481101515612b4d57fe5b90600052602060002090600402019050612b82565b600f8c815481101515612b7157fe5b906000526020600020906004020190505b806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c1a5780601f10612bef57610100808354040283529160200191612c1a565b820191906000526020600020905b815481529060010190602001808311612bfd57829003601f168201915b50505050509950806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612cb95780601f10612c8e57610100808354040283529160200191612cb9565b820191906000526020600020905b815481529060010190602001808311612c9c57829003601f168201915b505050505098508060020160009054906101000a900467ffffffffffffffff1697508060020160089054906101000a900467ffffffffffffffff1696508060020160189054906101000a900463ffffffff16955080600201601c9054906101000a900463ffffffff1694508060030160009054906101000a900463ffffffff1693508060030160049054906101000a900460ff1692508060030160059054906101000a900460ff169150509295985092959850929598565b6000806000806000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612eb2575060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612e7d57600080fd5b5af11515612e8a57600080fd5b5050506040513d6020811015612e9f57600080fd5b8101908080519060200190929190505050115b1515612ebd57600080fd5b60008560ff1610158015612ed45750600a8560ff16105b1515612edf57600080fd5b612ee98787613848565b9350833410151515612efa57600080fd5b600015158615151415612f2b57600e87815481101515612f1657fe5b90600052602060002090600402019250612f4b565b600f87815481101515612f3a57fe5b906000526020600020906004020192505b605a8360020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16111515612f7c57600080fd5b8460ff16600a0a8360020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16811515612faf57fe5b049150600a82811515612fbe57fe5b069150600982101515612fd057600080fd5b8460ff16600a0a8360020160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600201601c81819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff160217905550506130613485613a9c565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156130a357600080fd5b6130ab613ab5565b7fdfda1f36e9a72c0e20d2410764fc28694c08c78e70289efc7622f83ef80e30fe338888604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182151515158152602001935050505060405180910390a150505050505050565b600080600080600061313e338c8c613bc7565b151561314957600080fd5b60016131536118c3565b01622625a011151561316457600080fd5b600015158a1515141561319557600e8b81548110151561318057fe5b906000526020600020906004020194506131d9565b600f8b8154811015156131a457fe5b90600052602060002090600402019450600015158560030160059054906101000a900460ff1615151415156131d857600080fd5b5b605a8560020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1611151561320a57600080fd5b8460020160009054906101000a900467ffffffffffffffff16935060001515881515141561325657600e8981548110151561324157fe5b90600052602060002090600402019450613276565b600f8981548110151561326557fe5b906000526020600020906004020194505b6132828b8b8b8b6117b2565b151561328d57600080fd5b346001541115151561329e57600080fd5b8460020160186101000a81549063ffffffff021916905560008560030160046101000a81548160ff0219169083151502179055506132f6848660020160009054906101000a900467ffffffffffffffff168d8c614653565b80935081945050508115613308578695505b6133b286866001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133a45780601f10613379576101008083540402835291602001916133a4565b820191906000526020600020905b81548152906001019060200180831161338757829003601f168201915b505050505085856001614058565b905087600f828154811015156133c457fe5b906000526020600020906004020160030160066101000a81548160ff02191690831515021790555089600f828154811015156133fc57fe5b906000526020600020906004020160030160076101000a81548160ff02191690831515021790555088600f8281548110151561343457fe5b906000526020600020906004020160020160106101000a81548163ffffffff021916908363ffffffff1602179055508a600f8281548110151561347357fe5b906000526020600020906004020160020160146101000a81548163ffffffff021916908363ffffffff1602179055506134aa613ab5565b5050505050505050505050565b6000806000806004600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169350339250600760008681526020019081526020016000205491506a52b7d2dcc80cd2e400000060076000878152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561356a57600080fd5b61357383613e70565b151561357e57600080fd5b81341015151561358d57600080fd5b6135973483613a9c565b90506135a4848487613ea9565b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151561361a578373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561361957600080fd5b5b613625856001614934565b7e8201e7bcbf010c2c07de59d6e97cb7e3cf67a46125c49cbc89b9d2cde1f48f858360076000898152602001908152602001600020548787600f8b81548110151561366c57fe5b9060005260206000209060040201600001604051808781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200182810382528381815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561377c5780601f106137515761010080835404028352916020019161377c565b820191906000526020600020905b81548152906001019060200180831161375f57829003601f168201915b505097505050505050505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156137cf57600080fd5b5050505050565b60035481565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600d81526020017f43656c654272656564436172640000000000000000000000000000000000000081525081565b6000806000801515841515141561387d57600e8581548110151561386857fe5b9060005260206000209060040201915061389d565b600f8581548110151561388c57fe5b906000526020600020906004020191505b60025482600201601c9054906101000a900463ffffffff1663ffffffff1660020a029050674563918244f400008111156138dd57674563918244f4000090505b809250505092915050565b60006138f5338787613bc7565b151561390057600080fd5b60001515851515141561394957600e8681548110151561391c57fe5b9060005260206000209060040201905081600a6000888152602001908152602001600020819055506139a5565b600f8681548110151561395857fe5b90600052602060002090600402019050600115158160030160059054906101000a900460ff16151514151561398c57600080fd5b81600b6000888152602001908152602001600020819055505b605a8160020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161115156139d657600080fd5b838160020160186101000a81548163ffffffff021916908363ffffffff160217905550828160030160046101000a81548160ff0219169083151502179055507f9c9bbfc444fadb4f6ea76eeea0f2096baf957e36bf9dea2e1520dfc82e6934aa33878785604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390a1505050505050565b6000828211151515613aaa57fe5b818303905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003600a3073ffffffffffffffffffffffffffffffffffffffff1631811515613b1657fe5b04029081150290604051600060405180830381858888f193505050501515613b3d57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6007600a3073ffffffffffffffffffffffffffffffffffffffff1631811515613b9e57fe5b04029081150290604051600060405180830381858888f193505050501515613bc557600080fd5b565b60008115613ca1576004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613c9a57506009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050613dfd565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aa1d98af846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515613d3057600080fd5b5af11515613d3d57600080fd5b5050506040513d6020811015613d5257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613dfa57506008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90505b9392505050565b60008273ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613f5383613e70565b15613fb457600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550613fb3816001614934565b5b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b6000614062614a86565b60006101a0604051908101604052808981526020018881526020018767ffffffffffffffff1681526020014267ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff1681526020016000151581526020018615158152602001600015158152602001600015158152509150600015158415151415614328576001600e8390806001815401808255809150509060018203906000526020600020906004020160009091929091909150600082015181600001908051906020019061415a929190614b29565b506020820151816001019080519060200190614177929190614b29565b5060408201518160020160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160020160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160020160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160020160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600201601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160030160006101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160030160046101000a81548160ff0219169083151502179055506101408201518160030160056101000a81548160ff0219169083151502179055506101608201518160030160066101000a81548160ff0219169083151502179055506101808201518160030160076101000a81548160ff021916908315150217905550505003905061456d565b6001600f83908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000019080519060200190614374929190614b29565b506020820151816001019080519060200190614391929190614b29565b5060408201518160020160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160020160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160020160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160020160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600201601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160030160006101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160030160046101000a81548160ff0219169083151502179055506101408201518160030160056101000a81548160ff0219169083151502179055506101608201518160030160066101000a81548160ff0219169083151502179055506101808201518160030160076101000a81548160ff02191690831515021790555050500390506a52b7d2dcc80cd2e4000000600760008381526020019081526020016000208190555061456c60003383613ea9565b5b7fb3b0cf861f168bcdb275c69da97b2543631552ba562628aa3c7317d4a6089ef281893360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156146095780820151818401526020810190506145ee565b50505050905090810190601f1680156146365780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1809250505095945050505050565b600080600080600080600080600080925060009150600090505b600a81101561488857600a8d67ffffffffffffffff1681151561468c57fe5b069550600a8c67ffffffffffffffff168115156146a557fe5b069450600a8d67ffffffffffffffff168115156146be57fe5b049c50600a8c67ffffffffffffffff168115156146d757fe5b049b50612710434082428e8e6040518086600019166000191681526020018581526020018481526020018381526020018281526020019550505050505060405180910390206001900467ffffffffffffffff1681151561473357fe5b0693508467ffffffffffffffff168667ffffffffffffffff1610151561475d578486039650614763565b85850396505b601a8467ffffffffffffffff16101561478157600387039650614837565b6101c78467ffffffffffffffff1610156147a057600287039650614836565b610c658467ffffffffffffffff1610156147bf57600187039650614835565b611aab8467ffffffffffffffff1610156147d857614834565b6125498467ffffffffffffffff1610156147f757600187019650614833565b6126f68467ffffffffffffffff16101561481657600287019650614832565b6103e88467ffffffffffffffff161015614831576003870196505b5b5b5b5b5b5b600c8767ffffffffffffffff16111561484f57600096505b60098767ffffffffffffffff16111561486757600996505b8667ffffffffffffffff1681600a0a0283019250808060010191505061466d565b600060024340600b428f8f6040518086600019166000191681526020018560ff167f01000000000000000000000000000000000000000000000000000000000000000281526001018481526020018381526020018281526020019550505050505060405180910390206001900467ffffffffffffffff1681151561490857fe5b0667ffffffffffffffff16111561491e57600191505b8282985098505050505050505094509492505050565b600080151582151514156149b357600e8381548110151561495157fe5b906000526020600020906004020190506008600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a600084815260200190815260200160002060009055614a56565b600f838154811015156149c257fe5b906000526020600020906004020190506009600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600b6000848152602001908152602001600020600090556006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b8060020160186101000a81549063ffffffff02191690558060030160046101000a81549060ff0219169055505050565b6101a0604051908101604052806060815260200160608152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff1681526020016000151581526020016000151581526020016000151581526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614b6a57805160ff1916838001178555614b98565b82800160010185558215614b98579182015b82811115614b97578251825591602001919060010190614b7c565b5b509050614ba59190614ba9565b5090565b614bcb91905b80821115614bc7576000816000905550600101614baf565b5090565b905600a165627a7a723058203ba28f220433460030c0c085caf3a4e47b356096d75eb32a6954e21b1c928d860029
Swarm Source
bzzr://3ba28f220433460030c0c085caf3a4e47b356096d75eb32a6954e21b1c928d86
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,698.27 | 0.00002746 | $0.074107 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.