ERC-721
NFT
Overview
Max Total Supply
849 TREE
Holders
413
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 TREELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DoomsdayGarden
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: I live in the mountains pragma solidity ^0.8.9; import "./interfaces/IERC721TokenReceiver.sol"; import "./DoomsdayGardenMetadata.sol"; contract DoomsdayGarden { constructor(){ supportsInterface[0x80ac58cd] = true; //ERC721 supportsInterface[0x5b5e139f] = true; //ERC721Metadata supportsInterface[0x01ffc9a7] = true; //ERC165 owner = msg.sender; _mint(1,msg.sender,bytes32(0)); } uint constant BASE_COST = 0.000025 ether; uint constant BASE_DIFFICULTY = type(uint).max/uint(50000 * 300); uint constant DIFFICULTY_RAMP = uint(50000 * 0.1); uint constant CREATOR_FEE = 0.005 ether; bytes32[] tokens; uint public harvested; uint public ownerWithdrawn; address public owner; mapping( uint => uint) public supplyAtMint; event Plant(uint _tokenId, bytes32 _hash, address _planter, uint _newSupply, uint _blockNumber); event Harvest(uint _tokenId, bytes32 _hash, uint _growth, uint _supplyAtMint, uint _newSupply, uint _blockNumber); function plant(uint seed) public payable { uint tokenId = tokens.length + 1; uint supply = totalSupply(); uint difficulty = BASE_DIFFICULTY - (DIFFICULTY_RAMP * supply); uint cost = BASE_COST * supply + CREATOR_FEE; bytes32 hash = keccak256(abi.encodePacked( msg.sender, tokens[tokens.length - 1], seed )); require(uint(hash) < difficulty,"difficulty"); require(msg.value == cost,"cost"); supplyAtMint[tokenId] = supply; hash = keccak256(abi.encodePacked(hash,block.timestamp)); _mint(tokenId,msg.sender,hash); emit Plant(tokenId, hash, msg.sender, totalSupply(), block.number); } function harvest(uint tokenId) public{ require(msg.sender == ownerOf(tokenId),"ownerOf"); uint growth = (tokens.length - tokenId); uint produce = growth * BASE_COST; harvested++; _burn(tokenId); payable(msg.sender).transfer(produce); emit Harvest(tokenId, tokens[tokenId - 1], growth, supplyAtMint[tokenId], totalSupply(), block.number); } function harvestMultiple(uint[] calldata tokenIds) public{ require(tokenIds.length > 0,"tokenIds"); for(uint i = 0; i < tokenIds.length; i++){ harvest(tokenIds[i]); } } function hashOf(uint _tokenId) public view returns(bytes32){ require(isValidToken(_tokenId),"invalid"); return tokens[_tokenId - 1]; } function getEthContained(uint _tokenId) public view returns(uint){ require(isValidToken(_tokenId),"invalid"); return (tokens.length - _tokenId) * BASE_COST; } function getLastHash() public view returns(bytes32){ return tokens[tokens.length - 1]; } function getMiningState() public view returns(bytes32 _hash, uint _supply, uint _harvested, uint blockNumber){ return (tokens[tokens.length - 1], totalSupply(), harvested, block.number); } function treeData(uint _tokenId) public view returns(bytes32 _hash, uint _supplyAtMint, uint _planted){ require(isValidToken(_tokenId),"invalid"); return (tokens[_tokenId - 1],supplyAtMint[_tokenId],tokens.length); } //////===721 Standard event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); //////===721 Implementation mapping(address => uint256) public balanceOf; mapping (uint256 => address) internal allowance; mapping (address => mapping (address => bool)) public isApprovedForAll; mapping(uint256 => address) owners; //Mapping of owners // METADATA VARS string public name = "Doomsday Garden"; string public symbol = "TREE"; address private __metadata; function _mint(uint _tokenId,address _to, bytes32 _hash) private{ owners[_tokenId] = msg.sender; balanceOf[_to]++; tokens.push(_hash); emit Transfer(address(0),_to,_tokenId); } function _burn(uint _tokenId) private{ address _owner = owners[_tokenId]; balanceOf[ _owner ]--; delete owners[_tokenId]; emit Transfer(_owner,address(0),_tokenId); } function isValidToken(uint256 _tokenId) internal view returns(bool){ return owners[_tokenId] != address(0); } function ownerOf(uint256 _tokenId) public view returns(address){ require(isValidToken(_tokenId),"invalid"); return owners[_tokenId]; } function approve(address _approved, uint256 _tokenId) external{ address _owner = ownerOf(_tokenId); require( _owner == msg.sender //Require Sender Owns Token || isApprovedForAll[_owner][msg.sender] // or is approved for all. ,"permission"); emit Approval(_owner, _approved, _tokenId); allowance[_tokenId] = _approved; } function getApproved(uint256 _tokenId) external view returns (address) { require(isValidToken(_tokenId),"invalid"); return allowance[_tokenId]; } function setApprovalForAll(address _operator, bool _approved) external { emit ApprovalForAll(msg.sender,_operator, _approved); isApprovedForAll[msg.sender][_operator] = _approved; } function transferFrom(address _from, address _to, uint256 _tokenId) public { //Check Transferable //There is a token validity check in ownerOf address _owner = ownerOf(_tokenId); require ( _owner == msg.sender //Require sender owns token //Doing the two below manually instead of referring to the external methods saves gas || allowance[_tokenId] == msg.sender //or is approved for this token || isApprovedForAll[_owner][msg.sender] //or is approved for all ,"permission"); require(_owner == _from,"owner"); require(_to != address(0),"zero"); emit Transfer(_from, _to, _tokenId); owners[_tokenId] =_to; balanceOf[_from]--; balanceOf[_to]++; //Reset approved if there is one if(allowance[_tokenId] != address(0)){ delete allowance[_tokenId]; } } function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) public { transferFrom(_from, _to, _tokenId); //Get size of "_to" address, if 0 it's a wallet uint32 size; assembly { size := extcodesize(_to) } if(size > 0){ IERC721TokenReceiver receiver = IERC721TokenReceiver(_to); require(receiver.onERC721Received(msg.sender,_from,_tokenId,data) == bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")),"receiver"); } } function safeTransferFrom(address _from, address _to, uint256 _tokenId) external { safeTransferFrom(_from,_to,_tokenId,""); } function tokenURI(uint256 _tokenId) public view returns (string memory){ require(isValidToken(_tokenId),'tokenId'); return DoomsdayGardenMetadata(__metadata).tokenURI( _tokenId, tokens[_tokenId-1], supplyAtMint[_tokenId], tokens.length); } function totalSupply() public view returns (uint256){ return tokens.length - harvested; } ///////===165 Implementation mapping (bytes4 => bool) public supportsInterface; ///==End 165 //Admin function setOwner(address newOwner) public{ require(msg.sender == owner,"owner"); owner = newOwner; } function setMetadata(address _metadata) public{ require(msg.sender == owner,"owner"); __metadata = _metadata; } function ownerWithdraw() public{ require(msg.sender == owner,"owner"); uint toWithdraw = (tokens.length - ownerWithdrawn - 1) * CREATOR_FEE ; require(toWithdraw > 0,"withdrawn"); ownerWithdrawn = tokens.length - 1; payable(msg.sender).transfer(toWithdraw); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02. interface IERC721TokenReceiver { /// @notice Handle the receipt of an NFT /// @dev The ERC721 smart contract calls this function on the recipient /// after a `transfer`. This function MAY throw to revert and reject the /// transfer. Return of other than the magic value MUST result in the /// transaction being reverted. /// Note: the contract address is always the message sender. /// @param _operator The address which called `safeTransferFrom` function /// @param _from The address which previously owned the token /// @param _tokenId The NFT identifier which is being transferred /// @param _data Additional data with no specified format /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` /// unless throwing function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4); }
// SPDX-License-Identifier: Please may I have some salad pragma solidity ^0.8.9; import "./interfaces/IERC721.sol"; contract DoomsdayGardenMetadata { string __uriBase; string __uriSuffix; address garden; constructor(address _garden,string memory _uriBase, string memory _uriSuffix){ garden = _garden; __uriBase = _uriBase; __uriSuffix = _uriSuffix; } function tokenURI(uint _tokenId,bytes32 _hash, uint _supplyAtMint, uint _planted) public view returns (string memory){ //Validity check IERC721(garden).ownerOf(_tokenId); _hash;_supplyAtMint;_planted; uint _i = _tokenId; uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len; while (_i != 0) { k = k-1; uint8 temp = (48 + uint8(_i - _i / 10 * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(abi.encodePacked(__uriBase,bstr,__uriSuffix)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://eips.ethereum.org/EIPS/eip-721 /// Note: the ERC-165 identifier for this interface is 0x80ac58cd. interface IERC721 /* is ERC165 */ { /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _owner An address for whom to query the balance /// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address _owner) external view returns (uint256); /// @notice Find the owner of an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _tokenId The identifier for an NFT /// @return The address of the owner of the NFT function ownerOf(uint256 _tokenId) external view returns (address); /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external; /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to "". /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external; /// @notice Change or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param _approved The new approved NFT controller /// @param _tokenId The NFT to approve function approve(address _approved, uint256 _tokenId) external; /// @notice Enable or disable approval for a third party ("operator") to manage /// all of `msg.sender`'s assets /// @dev Emits the ApprovalForAll event. The contract MUST allow /// multiple operators per owner. /// @param _operator Address to add to the set of authorized operators /// @param _approved True if the operator is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Get the approved address for a single NFT /// @dev Throws if `_tokenId` is not a valid NFT. /// @param _tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 _tokenId) external view returns (address); /// @notice Query if an address is an authorized operator for another address /// @param _owner The address that owns the NFTs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_growth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_supplyAtMint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_planter","type":"address"},{"indexed":false,"internalType":"uint256","name":"_newSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"Plant","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getEthContained","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningState","outputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_harvested","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"harvestMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"hashOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ownerWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"plant","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_metadata","type":"address"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplyAtMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"treeData","outputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"uint256","name":"_supplyAtMint","type":"uint256"},{"internalType":"uint256","name":"_planted","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600f81526020017f446f6f6d736461792047617264656e0000000000000000000000000000000000815250600990805190602001906200005192919062000335565b506040518060400160405280600481526020017f5452454500000000000000000000000000000000000000000000000000000000815250600a90805190602001906200009f92919062000335565b50348015620000ad57600080fd5b506001600c60006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001fc6001336000801b6200020260201b60201c565b620004d1565b336008600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190620002a6906200041e565b91905055506000819080600181540180825580915050600190039060005260206000200160009091909190915055828273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b82805462000343906200049b565b90600052602060002090601f016020900481019282620003675760008555620003b3565b82601f106200038257805160ff1916838001178555620003b3565b82800160010185558215620003b3579182015b82811115620003b257825182559160200191906001019062000395565b5b509050620003c29190620003c6565b5090565b5b80821115620003e1576000816000905550600101620003c7565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006200042b8262000414565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620004615762000460620003e5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b457607f821691505b60208210811415620004cb57620004ca6200046c565b5b50919050565b61323080620004e16000396000f3fe6080604052600436106101c15760003560e01c80636352211e116100f7578063b88d4fde11610095578063d8c3697311610064578063d8c369731461066c578063ddc632621461069a578063e985e9c5146106c3578063f3cb838514610700576101c1565b8063b88d4fde146105bf578063c20615ed146105e8578063c383e22b14610613578063c87b56dd1461062f576101c1565b80637e551b75116100d15780637e551b75146105035780638da5cb5b1461054057806395d89b411461056b578063a22cb46514610596576101c1565b80636352211e1461044c57806370a08231146104895780637daa11e3146104c6576101c1565b8063218e0f73116101645780633f60bb5d1161013e5780633f60bb5d146103b657806342842e0e146103e15780634311de8f1461040a5780634a91004614610421576101c1565b8063218e0f73146103275780632340c6391461035057806323b872dd1461038d576101c1565b8063081812fc116101a0578063081812fc1461026d578063095ea7b3146102aa57806313af4035146102d357806318160ddd146102fc576101c1565b8062615e72146101c657806301ffc9a71461020557806306fdde0314610242575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190612051565b610729565b6040516101fc939291906120a6565b60405180910390f35b34801561021157600080fd5b5061022c60048036038101906102279190612135565b6107c8565b604051610239919061217d565b60405180910390f35b34801561024e57600080fd5b506102576107e8565b6040516102649190612231565b60405180910390f35b34801561027957600080fd5b50610294600480360381019061028f9190612051565b610876565b6040516102a19190612294565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc91906122db565b6108fb565b005b3480156102df57600080fd5b506102fa60048036038101906102f5919061231b565b610ab9565b005b34801561030857600080fd5b50610311610b8d565b60405161031e9190612348565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906123c8565b610ba7565b005b34801561035c57600080fd5b5061037760048036038101906103729190612051565b610c35565b6040516103849190612348565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190612415565b610c4d565b005b3480156103c257600080fd5b506103cb61109b565b6040516103d89190612348565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190612415565b6110a1565b005b34801561041657600080fd5b5061041f6110c1565b005b34801561042d57600080fd5b5061043661122b565b6040516104439190612468565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e9190612051565b611261565b6040516104809190612294565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061231b565b6112e6565b6040516104bd9190612348565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190612051565b6112fe565b6040516104fa9190612348565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190612051565b611371565b6040516105379190612468565b60405180910390f35b34801561054c57600080fd5b506105556113ed565b6040516105629190612294565b60405180910390f35b34801561057757600080fd5b50610580611413565b60405161058d9190612231565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b891906124af565b6114a1565b005b3480156105cb57600080fd5b506105e660048036038101906105e1919061261f565b61159e565b005b3480156105f457600080fd5b506105fd6116fc565b60405161060a9190612348565b60405180910390f35b61062d60048036038101906106289190612051565b611702565b005b34801561063b57600080fd5b5061065660048036038101906106519190612051565b611918565b6040516106639190612231565b60405180910390f35b34801561067857600080fd5b50610681611a61565b60405161069194939291906126a2565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190612051565b611ab1565b005b3480156106cf57600080fd5b506106ea60048036038101906106e591906126e7565b611c44565b6040516106f7919061217d565b60405180910390f35b34801561070c57600080fd5b506107276004803603810190610722919061231b565b611c73565b005b600080600061073784611d47565b610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076d90612773565b60405180910390fd5b600060018561078591906127c2565b81548110610796576107956127f6565b5b906000526020600020015460046000868152602001908152602001600020546000805490509250925092509193909250565b600c6020528060005260406000206000915054906101000a900460ff1681565b600980546107f590612854565b80601f016020809104026020016040519081016040528092919081815260200182805461082190612854565b801561086e5780601f106108435761010080835404028352916020019161086e565b820191906000526020600020905b81548152906001019060200180831161085157829003601f168201915b505050505081565b600061088182611d47565b6108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790612773565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090682611261565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806109c85750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906128d2565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b409061293e565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600154600080549050610ba291906127c2565b905090565b60008282905011610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be4906129aa565b60405180910390fd5b60005b82829050811015610c3057610c1d838383818110610c1157610c106127f6565b5b90506020020135611ab1565b8080610c28906129ca565b915050610bf0565b505050565b60046020528060005260406000206000915090505481565b6000610c5882611261565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610cf257503373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610d835750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db9906128d2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e279061293e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790612a5f565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f9d90612a7f565b9190505550600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610ff2906129ca565b9190505550600073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611095576006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b60015481565b6110bc8383836040518060200160405280600081525061159e565b505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111489061293e565b60405180910390fd5b60006611c37937e08000600160025460008054905061117091906127c2565b61117a91906127c2565b6111849190612aa9565b9050600081116111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090612b4f565b60405180910390fd5b60016000805490506111db91906127c2565b6002819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611227573d6000803e3d6000fd5b5050565b600080600160008054905061124091906127c2565b81548110611251576112506127f6565b5b9060005260206000200154905090565b600061126c82611d47565b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290612773565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60056020528060005260406000206000915090505481565b600061130982611d47565b611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f90612773565b60405180910390fd5b6516bcc41e90008260008054905061136091906127c2565b61136a9190612aa9565b9050919050565b600061137c82611d47565b6113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290612773565b60405180910390fd5b60006001836113ca91906127c2565b815481106113db576113da6127f6565b5b90600052602060002001549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a805461142090612854565b80601f016020809104026020016040519081016040528092919081815260200182805461144c90612854565b80156114995780601f1061146e57610100808354040283529160200191611499565b820191906000526020600020905b81548152906001019060200180831161147c57829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114fe919061217d565b60405180910390a380600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115a9848484610c4d565b6000833b905060008163ffffffff1611156116f55760008490507f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b81526004016116429493929190612bc4565b602060405180830381600087803b15801561165c57600080fd5b505af1158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116949190612c25565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90612c9e565b60405180910390fd5b505b5050505050565b60025481565b600060016000805490506117169190612cbe565b90506000611722610b8d565b90506000816113886117349190612aa9565b62e4e1c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117639190612d43565b61176d91906127c2565b905060006611c37937e08000836516bcc41e900061178b9190612aa9565b6117959190612cbe565b9050600033600060016000805490506117ae91906127c2565b815481106117bf576117be6127f6565b5b9060005260206000200154876040516020016117dd93929190612dfe565b604051602081830303815290604052805190602001209050828160001c1061183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190612e87565b60405180910390fd5b81341461187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390612ef3565b60405180910390fd5b83600460008781526020019081526020016000208190555080426040516020016118a7929190612f13565b6040516020818303038152906040528051906020012090506118ca853383611db3565b7ff5f58f382f1f118117f43fff04f628fa40f28606dae96f4201f4d7ef1b570bc18582336118f6610b8d565b43604051611908959493929190612f3f565b60405180910390a1505050505050565b606061192382611d47565b611962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195990612fde565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631600e3488360006001866119b091906127c2565b815481106119c1576119c06127f6565b5b906000526020600020015460046000878152602001908152602001600020546000805490506040518563ffffffff1660e01b8152600401611a059493929190612ffe565b60006040518083038186803b158015611a1d57600080fd5b505afa158015611a31573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a5a91906130e4565b9050919050565b60008060008060006001600080549050611a7b91906127c2565b81548110611a8c57611a8b6127f6565b5b9060005260206000200154611a9f610b8d565b60015443935093509350935090919293565b611aba81611261565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90613179565b60405180910390fd5b600081600080549050611b3a91906127c2565b905060006516bcc41e900082611b509190612aa9565b905060016000815480929190611b65906129ca565b9190505550611b7383611ee4565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611bb9573d6000803e3d6000fd5b507ffbbffffeabef452ab6027d4de83615fa3e483405824c5abdabab23133ac5878a836000600186611beb91906127c2565b81548110611bfc57611bfb6127f6565b5b9060005260206000200154846004600088815260200190815260200160002054611c24610b8d565b43604051611c3796959493929190613199565b60405180910390a1505050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa9061293e565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b336008600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611e55906129ca565b91905055506000819080600181540180825580915050600190039060005260206000200160009091909190915055828273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f6c90612a7f565b91905055506008600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61202e8161201b565b811461203957600080fd5b50565b60008135905061204b81612025565b92915050565b60006020828403121561206757612066612011565b5b60006120758482850161203c565b91505092915050565b6000819050919050565b6120918161207e565b82525050565b6120a08161201b565b82525050565b60006060820190506120bb6000830186612088565b6120c86020830185612097565b6120d56040830184612097565b949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612112816120dd565b811461211d57600080fd5b50565b60008135905061212f81612109565b92915050565b60006020828403121561214b5761214a612011565b5b600061215984828501612120565b91505092915050565b60008115159050919050565b61217781612162565b82525050565b6000602082019050612192600083018461216e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121d25780820151818401526020810190506121b7565b838111156121e1576000848401525b50505050565b6000601f19601f8301169050919050565b600061220382612198565b61220d81856121a3565b935061221d8185602086016121b4565b612226816121e7565b840191505092915050565b6000602082019050818103600083015261224b81846121f8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061227e82612253565b9050919050565b61228e81612273565b82525050565b60006020820190506122a96000830184612285565b92915050565b6122b881612273565b81146122c357600080fd5b50565b6000813590506122d5816122af565b92915050565b600080604083850312156122f2576122f1612011565b5b6000612300858286016122c6565b92505060206123118582860161203c565b9150509250929050565b60006020828403121561233157612330612011565b5b600061233f848285016122c6565b91505092915050565b600060208201905061235d6000830184612097565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261238857612387612363565b5b8235905067ffffffffffffffff8111156123a5576123a4612368565b5b6020830191508360208202830111156123c1576123c061236d565b5b9250929050565b600080602083850312156123df576123de612011565b5b600083013567ffffffffffffffff8111156123fd576123fc612016565b5b61240985828601612372565b92509250509250929050565b60008060006060848603121561242e5761242d612011565b5b600061243c868287016122c6565b935050602061244d868287016122c6565b925050604061245e8682870161203c565b9150509250925092565b600060208201905061247d6000830184612088565b92915050565b61248c81612162565b811461249757600080fd5b50565b6000813590506124a981612483565b92915050565b600080604083850312156124c6576124c5612011565b5b60006124d4858286016122c6565b92505060206124e58582860161249a565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61252c826121e7565b810181811067ffffffffffffffff8211171561254b5761254a6124f4565b5b80604052505050565b600061255e612007565b905061256a8282612523565b919050565b600067ffffffffffffffff82111561258a576125896124f4565b5b612593826121e7565b9050602081019050919050565b82818337600083830152505050565b60006125c26125bd8461256f565b612554565b9050828152602081018484840111156125de576125dd6124ef565b5b6125e98482856125a0565b509392505050565b600082601f83011261260657612605612363565b5b81356126168482602086016125af565b91505092915050565b6000806000806080858703121561263957612638612011565b5b6000612647878288016122c6565b9450506020612658878288016122c6565b93505060406126698782880161203c565b925050606085013567ffffffffffffffff81111561268a57612689612016565b5b612696878288016125f1565b91505092959194509250565b60006080820190506126b76000830187612088565b6126c46020830186612097565b6126d16040830185612097565b6126de6060830184612097565b95945050505050565b600080604083850312156126fe576126fd612011565b5b600061270c858286016122c6565b925050602061271d858286016122c6565b9150509250929050565b7f696e76616c696400000000000000000000000000000000000000000000000000600082015250565b600061275d6007836121a3565b915061276882612727565b602082019050919050565b6000602082019050818103600083015261278c81612750565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127cd8261201b565b91506127d88361201b565b9250828210156127eb576127ea612793565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061286c57607f821691505b602082108114156128805761287f612825565b5b50919050565b7f7065726d697373696f6e00000000000000000000000000000000000000000000600082015250565b60006128bc600a836121a3565b91506128c782612886565b602082019050919050565b600060208201905081810360008301526128eb816128af565b9050919050565b7f6f776e6572000000000000000000000000000000000000000000000000000000600082015250565b60006129286005836121a3565b9150612933826128f2565b602082019050919050565b600060208201905081810360008301526129578161291b565b9050919050565b7f746f6b656e496473000000000000000000000000000000000000000000000000600082015250565b60006129946008836121a3565b915061299f8261295e565b602082019050919050565b600060208201905081810360008301526129c381612987565b9050919050565b60006129d58261201b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a0857612a07612793565b5b600182019050919050565b7f7a65726f00000000000000000000000000000000000000000000000000000000600082015250565b6000612a496004836121a3565b9150612a5482612a13565b602082019050919050565b60006020820190508181036000830152612a7881612a3c565b9050919050565b6000612a8a8261201b565b91506000821415612a9e57612a9d612793565b5b600182039050919050565b6000612ab48261201b565b9150612abf8361201b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612af857612af7612793565b5b828202905092915050565b7f77697468647261776e0000000000000000000000000000000000000000000000600082015250565b6000612b396009836121a3565b9150612b4482612b03565b602082019050919050565b60006020820190508181036000830152612b6881612b2c565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612b9682612b6f565b612ba08185612b7a565b9350612bb08185602086016121b4565b612bb9816121e7565b840191505092915050565b6000608082019050612bd96000830187612285565b612be66020830186612285565b612bf36040830185612097565b8181036060830152612c058184612b8b565b905095945050505050565b600081519050612c1f81612109565b92915050565b600060208284031215612c3b57612c3a612011565b5b6000612c4984828501612c10565b91505092915050565b7f7265636569766572000000000000000000000000000000000000000000000000600082015250565b6000612c886008836121a3565b9150612c9382612c52565b602082019050919050565b60006020820190508181036000830152612cb781612c7b565b9050919050565b6000612cc98261201b565b9150612cd48361201b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d0957612d08612793565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d4e8261201b565b9150612d598361201b565b925082612d6957612d68612d14565b5b828204905092915050565b60008160601b9050919050565b6000612d8c82612d74565b9050919050565b6000612d9e82612d81565b9050919050565b612db6612db182612273565b612d93565b82525050565b6000819050919050565b612dd7612dd28261207e565b612dbc565b82525050565b6000819050919050565b612df8612df38261201b565b612ddd565b82525050565b6000612e0a8286612da5565b601482019150612e1a8285612dc6565b602082019150612e2a8284612de7565b602082019150819050949350505050565b7f646966666963756c747900000000000000000000000000000000000000000000600082015250565b6000612e71600a836121a3565b9150612e7c82612e3b565b602082019050919050565b60006020820190508181036000830152612ea081612e64565b9050919050565b7f636f737400000000000000000000000000000000000000000000000000000000600082015250565b6000612edd6004836121a3565b9150612ee882612ea7565b602082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b6000612f1f8285612dc6565b602082019150612f2f8284612de7565b6020820191508190509392505050565b600060a082019050612f546000830188612097565b612f616020830187612088565b612f6e6040830186612285565b612f7b6060830185612097565b612f886080830184612097565b9695505050505050565b7f746f6b656e496400000000000000000000000000000000000000000000000000600082015250565b6000612fc86007836121a3565b9150612fd382612f92565b602082019050919050565b60006020820190508181036000830152612ff781612fbb565b9050919050565b60006080820190506130136000830187612097565b6130206020830186612088565b61302d6040830185612097565b61303a6060830184612097565b95945050505050565b600067ffffffffffffffff82111561305e5761305d6124f4565b5b613067826121e7565b9050602081019050919050565b600061308761308284613043565b612554565b9050828152602081018484840111156130a3576130a26124ef565b5b6130ae8482856121b4565b509392505050565b600082601f8301126130cb576130ca612363565b5b81516130db848260208601613074565b91505092915050565b6000602082840312156130fa576130f9612011565b5b600082015167ffffffffffffffff81111561311857613117612016565b5b613124848285016130b6565b91505092915050565b7f6f776e65724f6600000000000000000000000000000000000000000000000000600082015250565b60006131636007836121a3565b915061316e8261312d565b602082019050919050565b6000602082019050818103600083015261319281613156565b9050919050565b600060c0820190506131ae6000830189612097565b6131bb6020830188612088565b6131c86040830187612097565b6131d56060830186612097565b6131e26080830185612097565b6131ef60a0830184612097565b97965050505050505056fea26469706673582212206117c15a8beb9478e2013127b4e205d211a8f31c7e596e5d9533f43fe964ede564736f6c63430008090033
Deployed Bytecode
0x6080604052600436106101c15760003560e01c80636352211e116100f7578063b88d4fde11610095578063d8c3697311610064578063d8c369731461066c578063ddc632621461069a578063e985e9c5146106c3578063f3cb838514610700576101c1565b8063b88d4fde146105bf578063c20615ed146105e8578063c383e22b14610613578063c87b56dd1461062f576101c1565b80637e551b75116100d15780637e551b75146105035780638da5cb5b1461054057806395d89b411461056b578063a22cb46514610596576101c1565b80636352211e1461044c57806370a08231146104895780637daa11e3146104c6576101c1565b8063218e0f73116101645780633f60bb5d1161013e5780633f60bb5d146103b657806342842e0e146103e15780634311de8f1461040a5780634a91004614610421576101c1565b8063218e0f73146103275780632340c6391461035057806323b872dd1461038d576101c1565b8063081812fc116101a0578063081812fc1461026d578063095ea7b3146102aa57806313af4035146102d357806318160ddd146102fc576101c1565b8062615e72146101c657806301ffc9a71461020557806306fdde0314610242575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190612051565b610729565b6040516101fc939291906120a6565b60405180910390f35b34801561021157600080fd5b5061022c60048036038101906102279190612135565b6107c8565b604051610239919061217d565b60405180910390f35b34801561024e57600080fd5b506102576107e8565b6040516102649190612231565b60405180910390f35b34801561027957600080fd5b50610294600480360381019061028f9190612051565b610876565b6040516102a19190612294565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc91906122db565b6108fb565b005b3480156102df57600080fd5b506102fa60048036038101906102f5919061231b565b610ab9565b005b34801561030857600080fd5b50610311610b8d565b60405161031e9190612348565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906123c8565b610ba7565b005b34801561035c57600080fd5b5061037760048036038101906103729190612051565b610c35565b6040516103849190612348565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190612415565b610c4d565b005b3480156103c257600080fd5b506103cb61109b565b6040516103d89190612348565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190612415565b6110a1565b005b34801561041657600080fd5b5061041f6110c1565b005b34801561042d57600080fd5b5061043661122b565b6040516104439190612468565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e9190612051565b611261565b6040516104809190612294565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061231b565b6112e6565b6040516104bd9190612348565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190612051565b6112fe565b6040516104fa9190612348565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190612051565b611371565b6040516105379190612468565b60405180910390f35b34801561054c57600080fd5b506105556113ed565b6040516105629190612294565b60405180910390f35b34801561057757600080fd5b50610580611413565b60405161058d9190612231565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b891906124af565b6114a1565b005b3480156105cb57600080fd5b506105e660048036038101906105e1919061261f565b61159e565b005b3480156105f457600080fd5b506105fd6116fc565b60405161060a9190612348565b60405180910390f35b61062d60048036038101906106289190612051565b611702565b005b34801561063b57600080fd5b5061065660048036038101906106519190612051565b611918565b6040516106639190612231565b60405180910390f35b34801561067857600080fd5b50610681611a61565b60405161069194939291906126a2565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190612051565b611ab1565b005b3480156106cf57600080fd5b506106ea60048036038101906106e591906126e7565b611c44565b6040516106f7919061217d565b60405180910390f35b34801561070c57600080fd5b506107276004803603810190610722919061231b565b611c73565b005b600080600061073784611d47565b610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076d90612773565b60405180910390fd5b600060018561078591906127c2565b81548110610796576107956127f6565b5b906000526020600020015460046000868152602001908152602001600020546000805490509250925092509193909250565b600c6020528060005260406000206000915054906101000a900460ff1681565b600980546107f590612854565b80601f016020809104026020016040519081016040528092919081815260200182805461082190612854565b801561086e5780601f106108435761010080835404028352916020019161086e565b820191906000526020600020905b81548152906001019060200180831161085157829003601f168201915b505050505081565b600061088182611d47565b6108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790612773565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090682611261565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806109c85750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906128d2565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b409061293e565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600154600080549050610ba291906127c2565b905090565b60008282905011610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be4906129aa565b60405180910390fd5b60005b82829050811015610c3057610c1d838383818110610c1157610c106127f6565b5b90506020020135611ab1565b8080610c28906129ca565b915050610bf0565b505050565b60046020528060005260406000206000915090505481565b6000610c5882611261565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610cf257503373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610d835750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db9906128d2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e279061293e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790612a5f565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f9d90612a7f565b9190505550600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610ff2906129ca565b9190505550600073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611095576006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b60015481565b6110bc8383836040518060200160405280600081525061159e565b505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111489061293e565b60405180910390fd5b60006611c37937e08000600160025460008054905061117091906127c2565b61117a91906127c2565b6111849190612aa9565b9050600081116111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090612b4f565b60405180910390fd5b60016000805490506111db91906127c2565b6002819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611227573d6000803e3d6000fd5b5050565b600080600160008054905061124091906127c2565b81548110611251576112506127f6565b5b9060005260206000200154905090565b600061126c82611d47565b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290612773565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60056020528060005260406000206000915090505481565b600061130982611d47565b611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f90612773565b60405180910390fd5b6516bcc41e90008260008054905061136091906127c2565b61136a9190612aa9565b9050919050565b600061137c82611d47565b6113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290612773565b60405180910390fd5b60006001836113ca91906127c2565b815481106113db576113da6127f6565b5b90600052602060002001549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a805461142090612854565b80601f016020809104026020016040519081016040528092919081815260200182805461144c90612854565b80156114995780601f1061146e57610100808354040283529160200191611499565b820191906000526020600020905b81548152906001019060200180831161147c57829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114fe919061217d565b60405180910390a380600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115a9848484610c4d565b6000833b905060008163ffffffff1611156116f55760008490507f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b81526004016116429493929190612bc4565b602060405180830381600087803b15801561165c57600080fd5b505af1158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116949190612c25565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90612c9e565b60405180910390fd5b505b5050505050565b60025481565b600060016000805490506117169190612cbe565b90506000611722610b8d565b90506000816113886117349190612aa9565b62e4e1c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117639190612d43565b61176d91906127c2565b905060006611c37937e08000836516bcc41e900061178b9190612aa9565b6117959190612cbe565b9050600033600060016000805490506117ae91906127c2565b815481106117bf576117be6127f6565b5b9060005260206000200154876040516020016117dd93929190612dfe565b604051602081830303815290604052805190602001209050828160001c1061183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190612e87565b60405180910390fd5b81341461187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390612ef3565b60405180910390fd5b83600460008781526020019081526020016000208190555080426040516020016118a7929190612f13565b6040516020818303038152906040528051906020012090506118ca853383611db3565b7ff5f58f382f1f118117f43fff04f628fa40f28606dae96f4201f4d7ef1b570bc18582336118f6610b8d565b43604051611908959493929190612f3f565b60405180910390a1505050505050565b606061192382611d47565b611962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195990612fde565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631600e3488360006001866119b091906127c2565b815481106119c1576119c06127f6565b5b906000526020600020015460046000878152602001908152602001600020546000805490506040518563ffffffff1660e01b8152600401611a059493929190612ffe565b60006040518083038186803b158015611a1d57600080fd5b505afa158015611a31573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a5a91906130e4565b9050919050565b60008060008060006001600080549050611a7b91906127c2565b81548110611a8c57611a8b6127f6565b5b9060005260206000200154611a9f610b8d565b60015443935093509350935090919293565b611aba81611261565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90613179565b60405180910390fd5b600081600080549050611b3a91906127c2565b905060006516bcc41e900082611b509190612aa9565b905060016000815480929190611b65906129ca565b9190505550611b7383611ee4565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611bb9573d6000803e3d6000fd5b507ffbbffffeabef452ab6027d4de83615fa3e483405824c5abdabab23133ac5878a836000600186611beb91906127c2565b81548110611bfc57611bfb6127f6565b5b9060005260206000200154846004600088815260200190815260200160002054611c24610b8d565b43604051611c3796959493929190613199565b60405180910390a1505050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa9061293e565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b336008600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611e55906129ca565b91905055506000819080600181540180825580915050600190039060005260206000200160009091909190915055828273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f6c90612a7f565b91905055506008600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61202e8161201b565b811461203957600080fd5b50565b60008135905061204b81612025565b92915050565b60006020828403121561206757612066612011565b5b60006120758482850161203c565b91505092915050565b6000819050919050565b6120918161207e565b82525050565b6120a08161201b565b82525050565b60006060820190506120bb6000830186612088565b6120c86020830185612097565b6120d56040830184612097565b949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612112816120dd565b811461211d57600080fd5b50565b60008135905061212f81612109565b92915050565b60006020828403121561214b5761214a612011565b5b600061215984828501612120565b91505092915050565b60008115159050919050565b61217781612162565b82525050565b6000602082019050612192600083018461216e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121d25780820151818401526020810190506121b7565b838111156121e1576000848401525b50505050565b6000601f19601f8301169050919050565b600061220382612198565b61220d81856121a3565b935061221d8185602086016121b4565b612226816121e7565b840191505092915050565b6000602082019050818103600083015261224b81846121f8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061227e82612253565b9050919050565b61228e81612273565b82525050565b60006020820190506122a96000830184612285565b92915050565b6122b881612273565b81146122c357600080fd5b50565b6000813590506122d5816122af565b92915050565b600080604083850312156122f2576122f1612011565b5b6000612300858286016122c6565b92505060206123118582860161203c565b9150509250929050565b60006020828403121561233157612330612011565b5b600061233f848285016122c6565b91505092915050565b600060208201905061235d6000830184612097565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261238857612387612363565b5b8235905067ffffffffffffffff8111156123a5576123a4612368565b5b6020830191508360208202830111156123c1576123c061236d565b5b9250929050565b600080602083850312156123df576123de612011565b5b600083013567ffffffffffffffff8111156123fd576123fc612016565b5b61240985828601612372565b92509250509250929050565b60008060006060848603121561242e5761242d612011565b5b600061243c868287016122c6565b935050602061244d868287016122c6565b925050604061245e8682870161203c565b9150509250925092565b600060208201905061247d6000830184612088565b92915050565b61248c81612162565b811461249757600080fd5b50565b6000813590506124a981612483565b92915050565b600080604083850312156124c6576124c5612011565b5b60006124d4858286016122c6565b92505060206124e58582860161249a565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61252c826121e7565b810181811067ffffffffffffffff8211171561254b5761254a6124f4565b5b80604052505050565b600061255e612007565b905061256a8282612523565b919050565b600067ffffffffffffffff82111561258a576125896124f4565b5b612593826121e7565b9050602081019050919050565b82818337600083830152505050565b60006125c26125bd8461256f565b612554565b9050828152602081018484840111156125de576125dd6124ef565b5b6125e98482856125a0565b509392505050565b600082601f83011261260657612605612363565b5b81356126168482602086016125af565b91505092915050565b6000806000806080858703121561263957612638612011565b5b6000612647878288016122c6565b9450506020612658878288016122c6565b93505060406126698782880161203c565b925050606085013567ffffffffffffffff81111561268a57612689612016565b5b612696878288016125f1565b91505092959194509250565b60006080820190506126b76000830187612088565b6126c46020830186612097565b6126d16040830185612097565b6126de6060830184612097565b95945050505050565b600080604083850312156126fe576126fd612011565b5b600061270c858286016122c6565b925050602061271d858286016122c6565b9150509250929050565b7f696e76616c696400000000000000000000000000000000000000000000000000600082015250565b600061275d6007836121a3565b915061276882612727565b602082019050919050565b6000602082019050818103600083015261278c81612750565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127cd8261201b565b91506127d88361201b565b9250828210156127eb576127ea612793565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061286c57607f821691505b602082108114156128805761287f612825565b5b50919050565b7f7065726d697373696f6e00000000000000000000000000000000000000000000600082015250565b60006128bc600a836121a3565b91506128c782612886565b602082019050919050565b600060208201905081810360008301526128eb816128af565b9050919050565b7f6f776e6572000000000000000000000000000000000000000000000000000000600082015250565b60006129286005836121a3565b9150612933826128f2565b602082019050919050565b600060208201905081810360008301526129578161291b565b9050919050565b7f746f6b656e496473000000000000000000000000000000000000000000000000600082015250565b60006129946008836121a3565b915061299f8261295e565b602082019050919050565b600060208201905081810360008301526129c381612987565b9050919050565b60006129d58261201b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a0857612a07612793565b5b600182019050919050565b7f7a65726f00000000000000000000000000000000000000000000000000000000600082015250565b6000612a496004836121a3565b9150612a5482612a13565b602082019050919050565b60006020820190508181036000830152612a7881612a3c565b9050919050565b6000612a8a8261201b565b91506000821415612a9e57612a9d612793565b5b600182039050919050565b6000612ab48261201b565b9150612abf8361201b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612af857612af7612793565b5b828202905092915050565b7f77697468647261776e0000000000000000000000000000000000000000000000600082015250565b6000612b396009836121a3565b9150612b4482612b03565b602082019050919050565b60006020820190508181036000830152612b6881612b2c565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612b9682612b6f565b612ba08185612b7a565b9350612bb08185602086016121b4565b612bb9816121e7565b840191505092915050565b6000608082019050612bd96000830187612285565b612be66020830186612285565b612bf36040830185612097565b8181036060830152612c058184612b8b565b905095945050505050565b600081519050612c1f81612109565b92915050565b600060208284031215612c3b57612c3a612011565b5b6000612c4984828501612c10565b91505092915050565b7f7265636569766572000000000000000000000000000000000000000000000000600082015250565b6000612c886008836121a3565b9150612c9382612c52565b602082019050919050565b60006020820190508181036000830152612cb781612c7b565b9050919050565b6000612cc98261201b565b9150612cd48361201b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d0957612d08612793565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d4e8261201b565b9150612d598361201b565b925082612d6957612d68612d14565b5b828204905092915050565b60008160601b9050919050565b6000612d8c82612d74565b9050919050565b6000612d9e82612d81565b9050919050565b612db6612db182612273565b612d93565b82525050565b6000819050919050565b612dd7612dd28261207e565b612dbc565b82525050565b6000819050919050565b612df8612df38261201b565b612ddd565b82525050565b6000612e0a8286612da5565b601482019150612e1a8285612dc6565b602082019150612e2a8284612de7565b602082019150819050949350505050565b7f646966666963756c747900000000000000000000000000000000000000000000600082015250565b6000612e71600a836121a3565b9150612e7c82612e3b565b602082019050919050565b60006020820190508181036000830152612ea081612e64565b9050919050565b7f636f737400000000000000000000000000000000000000000000000000000000600082015250565b6000612edd6004836121a3565b9150612ee882612ea7565b602082019050919050565b60006020820190508181036000830152612f0c81612ed0565b9050919050565b6000612f1f8285612dc6565b602082019150612f2f8284612de7565b6020820191508190509392505050565b600060a082019050612f546000830188612097565b612f616020830187612088565b612f6e6040830186612285565b612f7b6060830185612097565b612f886080830184612097565b9695505050505050565b7f746f6b656e496400000000000000000000000000000000000000000000000000600082015250565b6000612fc86007836121a3565b9150612fd382612f92565b602082019050919050565b60006020820190508181036000830152612ff781612fbb565b9050919050565b60006080820190506130136000830187612097565b6130206020830186612088565b61302d6040830185612097565b61303a6060830184612097565b95945050505050565b600067ffffffffffffffff82111561305e5761305d6124f4565b5b613067826121e7565b9050602081019050919050565b600061308761308284613043565b612554565b9050828152602081018484840111156130a3576130a26124ef565b5b6130ae8482856121b4565b509392505050565b600082601f8301126130cb576130ca612363565b5b81516130db848260208601613074565b91505092915050565b6000602082840312156130fa576130f9612011565b5b600082015167ffffffffffffffff81111561311857613117612016565b5b613124848285016130b6565b91505092915050565b7f6f776e65724f6600000000000000000000000000000000000000000000000000600082015250565b60006131636007836121a3565b915061316e8261312d565b602082019050919050565b6000602082019050818103600083015261319281613156565b9050919050565b600060c0820190506131ae6000830189612097565b6131bb6020830188612088565b6131c86040830187612097565b6131d56060830186612097565b6131e26080830185612097565b6131ef60a0830184612097565b97965050505050505056fea26469706673582212206117c15a8beb9478e2013127b4e205d211a8f31c7e596e5d9533f43fe964ede564736f6c63430008090033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.