Overview
Max Total Supply
107,142,857 COIN
Holders
4,448 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
190.3837947 COINValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
CoinvestToken
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-11-04 */ pragma solidity ^0.4.24; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMathLib{ function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } 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; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; address public coinvest; mapping (address => bool) public admins; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; coinvest = msg.sender; admins[owner] = true; admins[coinvest] = true; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyCoinvest() { require(msg.sender == coinvest); _; } modifier onlyAdmin() { require(admins[msg.sender]); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } /** * @dev Changes the Coinvest wallet that will receive funds from investment contract. * @param _newCoinvest The address of the new wallet. **/ function transferCoinvest(address _newCoinvest) external onlyCoinvest { require(_newCoinvest != address(0)); coinvest = _newCoinvest; } /** * @dev Used to add admins who are allowed to add funds to the investment contract. * @param _user The address of the admin to add or remove. * @param _status True to add the user, False to remove the user. **/ function alterAdmin(address _user, bool _status) external onlyCoinvest { require(_user != address(0)); require(_user != coinvest); admins[_user] = _status; } } /** * @dev Abstract contract for approveAndCall. **/ contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } /** * @title Coinvest COIN Token * @dev ERC20 contract utilizing ERC865-ish structure (3esmit's implementation with alterations). * @dev to allow users to pay Ethereum fees in tokens. **/ contract CoinvestToken is Ownable { using SafeMathLib for uint256; string public constant symbol = "COIN"; string public constant name = "Coinvest COIN V3 Token"; uint8 public constant decimals = 18; uint256 private _totalSupply = 107142857 * (10 ** 18); // Function sigs to be used within contract for signature recovery. bytes4 internal constant transferSig = 0xa9059cbb; bytes4 internal constant approveSig = 0x095ea7b3; bytes4 internal constant increaseApprovalSig = 0xd73dd623; bytes4 internal constant decreaseApprovalSig = 0x66188463; bytes4 internal constant approveAndCallSig = 0xcae9ca51; bytes4 internal constant revokeHashSig = 0x70de43f1; // Balances for each account mapping(address => uint256) balances; // Owner of account approves the transfer of an amount to another account mapping(address => mapping (address => uint256)) allowed; // Keeps track of the last nonce sent from user. Used for delegated functions. mapping(address => uint256) nonces; // Mapping of past used hashes: true if already used. mapping(address => mapping (bytes32 => bool)) invalidHashes; event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed from, address indexed spender, uint tokens); event HashRedeemed(bytes32 indexed txHash, address indexed from); /** * @dev Set owner and beginning balance. **/ constructor() public { balances[msg.sender] = _totalSupply; } /** * @dev approveAndCall reception used primarily to pay gas with other tokens. **/ function receiveApproval(address _from, uint256 _amount, address _token, bytes _data) public { require(address(this).delegatecall(_data)); _from; _amount; _token; } /** ******************************** ERC20 ********************************* **/ /** * @dev Transfers coins from one address to another. * @param _to The recipient of the transfer amount. * @param _amount The amount of tokens to transfer. **/ function transfer(address _to, uint256 _amount) public returns (bool success) { require(_transfer(msg.sender, _to, _amount)); return true; } /** * @dev An allowed address can transfer tokens from another's address. * @param _from The owner of the tokens to be transferred. * @param _to The address to which the tokens will be transferred. * @param _amount The amount of tokens to be transferred. **/ function transferFrom(address _from, address _to, uint _amount) public returns (bool success) { require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); require(_transfer(_from, _to, _amount)); return true; } /** * @dev Approves a wallet to transfer tokens on one's behalf. * @param _spender The wallet approved to spend tokens. * @param _amount The amount of tokens approved to spend. **/ function approve(address _spender, uint256 _amount) public returns (bool success) { require(_approve(msg.sender, _spender, _amount)); return true; } /** * @dev Increases the allowed amount for spender from msg.sender. * @param _spender The address to increase allowed amount for. * @param _amount The amount of tokens to increase allowed amount by. **/ function increaseApproval(address _spender, uint256 _amount) public returns (bool success) { require(_increaseApproval(msg.sender, _spender, _amount)); return true; } /** * @dev Decreases the allowed amount for spender from msg.sender. * @param _spender The address to decrease allowed amount for. * @param _amount The amount of tokens to decrease allowed amount by. **/ function decreaseApproval(address _spender, uint256 _amount) public returns (bool success) { require(_decreaseApproval(msg.sender, _spender, _amount)); return true; } /** * @dev Used to approve an address and call a function on it in the same transaction. * @dev _spender The address to be approved to spend COIN. * @dev _amount The amount of COIN to be approved to spend. * @dev _data The data to send to the called contract. **/ function approveAndCall(address _spender, uint256 _amount, bytes _data) public returns (bool success) { require(_approve(msg.sender, _spender, _amount)); ApproveAndCallFallBack(_spender).receiveApproval(msg.sender, _amount, address(this), _data); return true; } /** ****************************** Internal ******************************** **/ /** * @dev Internal transfer for all functions that transfer. * @param _from The address that is transferring coins. * @param _to The receiving address of the coins. * @param _amount The amount of coins being transferred. **/ function _transfer(address _from, address _to, uint256 _amount) internal returns (bool success) { require (_to != address(0), "Invalid transfer recipient address."); require(balances[_from] >= _amount, "Sender does not have enough balance."); balances[_from] = balances[_from].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } /** * @dev Internal approve for all functions that require an approve. * @param _owner The owner who is allowing spender to use their balance. * @param _spender The wallet approved to spend tokens. * @param _amount The amount of tokens approved to spend. **/ function _approve(address _owner, address _spender, uint256 _amount) internal returns (bool success) { allowed[_owner][_spender] = _amount; emit Approval(_owner, _spender, _amount); return true; } /** * @dev Increases the allowed by "_amount" for "_spender" from "owner" * @param _owner The address that tokens may be transferred from. * @param _spender The address that may transfer these tokens. * @param _amount The amount of tokens to transfer. **/ function _increaseApproval(address _owner, address _spender, uint256 _amount) internal returns (bool success) { allowed[_owner][_spender] = allowed[_owner][_spender].add(_amount); emit Approval(_owner, _spender, allowed[_owner][_spender]); return true; } /** * @dev Decreases the allowed by "_amount" for "_spender" from "_owner" * @param _owner The owner of the tokens to decrease allowed for. * @param _spender The spender whose allowed will decrease. * @param _amount The amount of tokens to decrease allowed by. **/ function _decreaseApproval(address _owner, address _spender, uint256 _amount) internal returns (bool success) { if (allowed[_owner][_spender] <= _amount) allowed[_owner][_spender] = 0; else allowed[_owner][_spender] = allowed[_owner][_spender].sub(_amount); emit Approval(_owner, _spender, allowed[_owner][_spender]); return true; } /** ************************ Delegated Functions *************************** **/ /** * @dev Called by delegate with a signed hash of the transaction data to allow a user * @dev to transfer tokens without paying gas in Ether (they pay in COIN instead). * @param _signature Signed hash of data for this transfer. * @param _to The address to transfer COIN to. * @param _value The amount of COIN to transfer. * @param _gasPrice Price (IN COIN) that will be paid per unit of gas by user to "delegate". * @param _nonce Nonce of the user's new transaction. **/ function transferPreSigned( bytes _signature, address _to, uint256 _value, uint256 _gasPrice, uint256 _nonce) public returns (bool) { // Log starting gas left of transaction for later gas price calculations. uint256 gas = gasleft(); // Recover signer address from signature; ensure address is valid. address from = recoverPreSigned(_signature, transferSig, _to, _value, "", _gasPrice, _nonce); require(from != address(0), "Invalid signature provided."); // Require the hash has not been used, declare it used, increment nonce. bytes32 txHash = getPreSignedHash(transferSig, _to, _value, "", _gasPrice, _nonce); require(!invalidHashes[from][txHash], "Transaction has already been executed."); invalidHashes[from][txHash] = true; nonces[from]++; // Internal transfer. require(_transfer(from, _to, _value)); // If the delegate is charging, pay them for gas in COIN. if (_gasPrice > 0) { // 35000 because of base fee of 21000 and ~14000 for the fee transfer. gas = 35000 + gas.sub(gasleft()); require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid."); } emit HashRedeemed(txHash, from); return true; } /** * @dev Called by a delegate with signed hash to approve a transaction for user. * @dev All variables equivalent to transfer except _to: * @param _to The address that will be approved to transfer COIN from user's wallet. **/ function approvePreSigned( bytes _signature, address _to, uint256 _value, uint256 _gasPrice, uint256 _nonce) public returns (bool) { uint256 gas = gasleft(); address from = recoverPreSigned(_signature, approveSig, _to, _value, "", _gasPrice, _nonce); require(from != address(0), "Invalid signature provided."); bytes32 txHash = getPreSignedHash(approveSig, _to, _value, "", _gasPrice, _nonce); require(!invalidHashes[from][txHash], "Transaction has already been executed."); invalidHashes[from][txHash] = true; nonces[from]++; require(_approve(from, _to, _value)); if (_gasPrice > 0) { gas = 35000 + gas.sub(gasleft()); require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid."); } emit HashRedeemed(txHash, from); return true; } /** * @dev Used to increase the amount allowed for "_to" to spend from "from" * @dev A bare approve allows potentially nasty race conditions when using a delegate. **/ function increaseApprovalPreSigned( bytes _signature, address _to, uint256 _value, uint256 _gasPrice, uint256 _nonce) public returns (bool) { uint256 gas = gasleft(); address from = recoverPreSigned(_signature, increaseApprovalSig, _to, _value, "", _gasPrice, _nonce); require(from != address(0), "Invalid signature provided."); bytes32 txHash = getPreSignedHash(increaseApprovalSig, _to, _value, "", _gasPrice, _nonce); require(!invalidHashes[from][txHash], "Transaction has already been executed."); invalidHashes[from][txHash] = true; nonces[from]++; require(_increaseApproval(from, _to, _value)); if (_gasPrice > 0) { gas = 35000 + gas.sub(gasleft()); require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid."); } emit HashRedeemed(txHash, from); return true; } /** * @dev Added for the same reason as increaseApproval. Decreases to 0 if "_value" is greater than allowed. **/ function decreaseApprovalPreSigned( bytes _signature, address _to, uint256 _value, uint256 _gasPrice, uint256 _nonce) public returns (bool) { uint256 gas = gasleft(); address from = recoverPreSigned(_signature, decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce); require(from != address(0), "Invalid signature provided."); bytes32 txHash = getPreSignedHash(decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce); require(!invalidHashes[from][txHash], "Transaction has already been executed."); invalidHashes[from][txHash] = true; nonces[from]++; require(_decreaseApproval(from, _to, _value)); if (_gasPrice > 0) { gas = 35000 + gas.sub(gasleft()); require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid."); } emit HashRedeemed(txHash, from); return true; } /** * @dev approveAndCallPreSigned allows a user to approve a contract and call a function on it * @dev in the same transaction. As with the other presigneds, a delegate calls this with signed data from user. * @dev This function is the big reason we're using gas price and calculating gas use. * @dev Using this with the investment contract can result in varying gas costs. * @param _extraData The data to send to the contract. **/ function approveAndCallPreSigned( bytes _signature, address _to, uint256 _value, bytes _extraData, uint256 _gasPrice, uint256 _nonce) public returns (bool) { uint256 gas = gasleft(); address from = recoverPreSigned(_signature, approveAndCallSig, _to, _value, _extraData, _gasPrice, _nonce); require(from != address(0), "Invalid signature provided."); bytes32 txHash = getPreSignedHash(approveAndCallSig, _to, _value, _extraData, _gasPrice, _nonce); require(!invalidHashes[from][txHash], "Transaction has already been executed."); invalidHashes[from][txHash] = true; nonces[from]++; if (_value > 0) require(_approve(from, _to, _value)); ApproveAndCallFallBack(_to).receiveApproval(from, _value, address(this), _extraData); if (_gasPrice > 0) { gas = 35000 + gas.sub(gasleft()); require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid."); } emit HashRedeemed(txHash, from); return true; } /** *************************** Revoke PreSigned ************************** **/ /** * @dev Revoke hash without going through a delegate. * @param _hashToRevoke The hash that you no longer want to be used. **/ function revokeHash(bytes32 _hashToRevoke) public returns (bool) { invalidHashes[msg.sender][_hashToRevoke] = true; nonces[msg.sender]++; return true; } /** * @dev Revoke hash through a delegate. * @param _signature The signature allowing this revocation. * @param _hashToRevoke The hash that you would like revoked. * @param _gasPrice The amount of token wei to be paid for each uint of gas. **/ function revokeHashPreSigned( bytes _signature, bytes32 _hashToRevoke, uint256 _gasPrice) public returns (bool) { uint256 gas = gasleft(); address from = recoverRevokeHash(_signature, _hashToRevoke, _gasPrice); require(from != address(0), "Invalid signature provided."); bytes32 txHash = getRevokeHash(_hashToRevoke, _gasPrice); require(!invalidHashes[from][txHash], "Transaction has already been executed."); invalidHashes[from][txHash] = true; nonces[from]++; invalidHashes[from][_hashToRevoke] = true; if (_gasPrice > 0) { gas = 35000 + gas.sub(gasleft()); require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid."); } emit HashRedeemed(txHash, from); return true; } /** * @dev Get hash for a revocation. * @param _hashToRevoke The signature to be revoked. * @param _gasPrice The amount to be paid to delegate for sending this tx. **/ function getRevokeHash(bytes32 _hashToRevoke, uint256 _gasPrice) public view returns (bytes32 txHash) { return keccak256(abi.encodePacked(address(this), revokeHashSig, _hashToRevoke, _gasPrice)); } /** * @dev Recover the address from a revocation hash. * @param _hashToRevoke The hash to be revoked. * @param _signature The signature allowing this revocation. * @param _gasPrice The amount of token wei to be paid for each unit of gas. **/ function recoverRevokeHash(bytes _signature, bytes32 _hashToRevoke, uint256 _gasPrice) public view returns (address from) { return ecrecoverFromSig(getSignHash(getRevokeHash(_hashToRevoke, _gasPrice)), _signature); } /** ************************** PreSigned Constants ************************ **/ /** * @dev Used in frontend and contract to get hashed data of any given pre-signed transaction. * @param _to The address to transfer COIN to. * @param _value The amount of COIN to be transferred. * @param _extraData Extra data of tx if needed. Transfers and approves will leave this null. * @param _function Function signature of the pre-signed function being used. * @param _gasPrice The agreed-upon amount of COIN to be paid per unit of gas. * @param _nonce The user's nonce of the new transaction. **/ function getPreSignedHash( bytes4 _function, address _to, uint256 _value, bytes _extraData, uint256 _gasPrice, uint256 _nonce) public view returns (bytes32 txHash) { return keccak256(abi.encodePacked(address(this), _function, _to, _value, _extraData, _gasPrice, _nonce)); } /** * @dev Recover an address from a signed pre-signed hash. * @param _sig The signed hash. * @param _function The function signature for function being called. * @param _to The address to transfer/approve/transferFrom/etc. tokens to. * @param _value The amont of tokens to transfer/approve/etc. * @param _extraData The extra data included in the transaction, if any. * @param _gasPrice The amount of token wei to be paid to the delegate for each unit of gas. * @param _nonce The user's nonce for this transaction. **/ function recoverPreSigned( bytes _sig, bytes4 _function, address _to, uint256 _value, bytes _extraData, uint256 _gasPrice, uint256 _nonce) public view returns (address recovered) { return ecrecoverFromSig(getSignHash(getPreSignedHash(_function, _to, _value, _extraData, _gasPrice, _nonce)), _sig); } /** * @dev Add signature prefix to hash for recovery à la ERC191. * @param _hash The hashed transaction to add signature prefix to. **/ function getSignHash(bytes32 _hash) public pure returns (bytes32 signHash) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _hash)); } /** * @dev Helps to reduce stack depth problems for delegations. Thank you to Bokky for this! * @param hash The hash of signed data for the transaction. * @param sig Contains r, s, and v for recovery of address from the hash. **/ function ecrecoverFromSig(bytes32 hash, bytes sig) public pure returns (address recoveredAddress) { bytes32 r; bytes32 s; uint8 v; if (sig.length != 65) return address(0); assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) // Here we are loading the last 32 bytes. We exploit the fact that 'mload' will pad with zeroes if we overread. // There is no 'mload8' to do this, but that would be nicer. v := byte(0, mload(add(sig, 96))) } // Albeit non-transactional signatures are not specified by the YP, one would expect it to match the YP range of [27, 28] // geth uses [0, 1] and some clients have followed. This might change, see https://github.com/ethereum/go-ethereum/issues/2053 if (v < 27) v += 27; if (v != 27 && v != 28) return address(0); return ecrecover(hash, v, r, s); } /** * @dev Frontend queries to find the next nonce of the user so they can find the new nonce to send. * @param _owner Address that will be sending the COIN. **/ function getNonce(address _owner) external view returns (uint256 nonce) { return nonces[_owner]; } /** ****************************** Constants ******************************* **/ /** * @dev Return total supply of token. **/ function totalSupply() external view returns (uint256) { return _totalSupply; } /** * @dev Return balance of a certain address. * @param _owner The address whose balance we want to check. **/ function balanceOf(address _owner) external view returns (uint256) { return balances[_owner]; } /** * @dev Allowed amount for a user to spend of another's tokens. * @param _owner The owner of the tokens approved to spend. * @param _spender The address of the user allowed to spend the tokens. **/ function allowance(address _owner, address _spender) external view returns (uint256) { return allowed[_owner][_spender]; } /** ****************************** onlyOwner ******************************* **/ /** * @dev Allow the owner to take ERC20 tokens off of this contract if they are accidentally sent. **/ function tokenEscape(address _tokenContract) external onlyOwner { CoinvestToken lostToken = CoinvestToken(_tokenContract); uint256 stuckTokens = lostToken.balanceOf(address(this)); lostToken.transfer(owner, stuckTokens); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"coinvest","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_sig","type":"bytes"},{"name":"_function","type":"bytes4"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"recoverPreSigned","outputs":[{"name":"recovered","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_status","type":"bool"}],"name":"alterAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getNonce","outputs":[{"name":"nonce","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"tokenEscape","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"recoverRevokeHash","outputs":[{"name":"from","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approvePreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_hashToRevoke","type":"bytes32"}],"name":"revokeHash","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"decreaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"revokeHashPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_token","type":"address"},{"name":"_data","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"getRevokeHash","outputs":[{"name":"txHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_function","type":"bytes4"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"getPreSignedHash","outputs":[{"name":"txHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"getSignHash","outputs":[{"name":"signHash","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approveAndCallPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"sig","type":"bytes"}],"name":"ecrecoverFromSig","outputs":[{"name":"recoveredAddress","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCoinvest","type":"address"}],"name":"transferCoinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"txHash","type":"bytes32"},{"indexed":true,"name":"from","type":"address"}],"name":"HashRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60806040526a58a061ea91aa7f2584000060035534801561001f57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160026000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600354600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614904806101e96000396000f3006080604052600436106101ac576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101b15780630958a9f314610241578063095ea7b31461029857806309ea63e3146102fd57806310840303146104535780631296830d146104a257806318160ddd1461056157806323b872dd1461058c5780632d0335ab14610611578063313ce567146106685780633f45440614610699578063429b62e5146106dc578063476e492f14610737578063617b390b146107f857806366188463146108b757806370a082311461091c57806370de43f1146109735780638be52783146109bc5780638da5cb5b14610a7b5780638e421f1614610ad25780638f4ffcb114610b6b57806395d89b4114610c1e578063a59b3d4614610cae578063a9059cbb14610d05578063a9a0b49514610d6a578063adb8249e14610e56578063b15aa5b714610f15578063c8d4b38914610f62578063cae9ca5114611067578063d4acaf6c14611112578063d73dd623146111c9578063dd62ed3e1461122e578063dfb6c468146112a5578063f2fde38b146112e8575b600080fd5b3480156101bd57600080fd5b506101c661132b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102065780820151818401526020810190506101eb565b50505050905090810190601f1680156102335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024d57600080fd5b50610256611364565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102a457600080fd5b506102e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061138a565b604051808215151515815260200191505060405180910390f35b34801561030957600080fd5b50610411600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190803590602001909291905050506113ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045f57600080fd5b506104a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506113da565b005b3480156104ae57600080fd5b50610547600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061152a565b604051808215151515815260200191505060405180910390f35b34801561056d57600080fd5b50610576611942565b6040518082815260200191505060405180910390f35b34801561059857600080fd5b506105f7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061194c565b604051808215151515815260200191505060405180910390f35b34801561061d57600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b54565b6040518082815260200191505060405180910390f35b34801561067457600080fd5b5061067d611b9d565b604051808260ff1660ff16815260200191505060405180910390f35b3480156106a557600080fd5b506106da600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba2565b005b3480156106e857600080fd5b5061071d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de0565b604051808215151515815260200191505060405180910390f35b34801561074357600080fd5b506107b6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560001916906020019092919080359060200190929190505050611e00565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561080457600080fd5b5061089d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611e26565b604051808215151515815260200191505060405180910390f35b3480156108c357600080fd5b50610902600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061223e565b604051808215151515815260200191505060405180910390f35b34801561092857600080fd5b5061095d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612260565b6040518082815260200191505060405180910390f35b34801561097f57600080fd5b506109a260048036038101908080356000191690602001909291905050506122a9565b604051808215151515815260200191505060405180910390f35b3480156109c857600080fd5b50610a61600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612374565b604051808215151515815260200191505060405180910390f35b348015610a8757600080fd5b50610a9061278c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ade57600080fd5b50610b51600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035600019169060200190929190803590602001909291905050506127b1565b604051808215151515815260200191505060405180910390f35b348015610b7757600080fd5b50610c1c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612bb4565b005b348015610c2a57600080fd5b50610c33612c4a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c73578082015181840152602081019050610c58565b50505050905090810190601f168015610ca05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610cba57600080fd5b50610ce7600480360381019080803560001916906020019092919080359060200190929190505050612c83565b60405180826000191660001916815260200191505060405180910390f35b348015610d1157600080fd5b50610d50600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612dcb565b604051808215151515815260200191505060405180910390f35b348015610d7657600080fd5b50610e3860048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919080359060200190929190505050612ded565b60405180826000191660001916815260200191505060405180910390f35b348015610e6257600080fd5b50610efb600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612fae565b604051808215151515815260200191505060405180910390f35b348015610f2157600080fd5b50610f4460048036038101908080356000191690602001909291905050506133c6565b60405180826000191660001916815260200191505060405180910390f35b348015610f6e57600080fd5b5061104d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919080359060200190929190505050613481565b604051808215151515815260200191505060405180910390f35b34801561107357600080fd5b506110f8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506139e0565b604051808215151515815260200191505060405180910390f35b34801561111e57600080fd5b506111876004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b5f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111d557600080fd5b50611214600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613c57565b604051808215151515815260200191505060405180910390f35b34801561123a57600080fd5b5061128f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c79565b6040518082815260200191505060405180910390f35b3480156112b157600080fd5b506112e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d00565b005b3480156112f457600080fd5b50611329600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ddc565b005b6040805190810160405280601681526020017f436f696e7665737420434f494e20563320546f6b656e0000000000000000000081525081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611397338484613f31565b15156113a257600080fd5b6001905092915050565b60006113cd6113c76113c2898989898989612ded565b6133c6565b89613b5f565b9050979650505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561143657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561147257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156114cf57600080fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000806000805a92506115758963a9059cbb7c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b61165d63a9059cbb7c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515611760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555061182b828989614024565b151561183657600080fd5b60008611156118ea576118525a8461436790919063ffffffff16565b6188b80192506118758232611870868a61438090919063ffffffff16565b614024565b15156118e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b6000600354905090565b600081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015611a19575081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1515611a2457600080fd5b611ab382600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b3e848484614024565b1515611b4957600080fd5b600190509392505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601281565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c0057600080fd5b8291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611c9e57600080fd5b505af1158015611cb2573d6000803e3d6000fd5b505050506040513d6020811015611cc857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d9f57600080fd5b505af1158015611db3573d6000803e3d6000fd5b505050506040513d6020811015611dc957600080fd5b810190808051906020019092919050505050505050565b60026020528060005260406000206000915054906101000a900460ff1681565b6000611e1d611e17611e128585612c83565b6133c6565b85613b5f565b90509392505050565b6000806000805a9250611e718963095ea7b37c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b611f5963095ea7b37c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff1615151561205c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550612127828989613f31565b151561213257600080fd5b60008611156121e65761214e5a8461436790919063ffffffff16565b6188b8019250612171823261216c868a61438090919063ffffffff16565b614024565b15156121e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b600061224b3384846143b3565b151561225657600080fd5b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555060019050919050565b6000806000805a92506123bf8963661884637c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6124a763661884637c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff161515156125aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506126758289896143b3565b151561268057600080fd5b60008611156127345761269c5a8461436790919063ffffffff16565b6188b80192506126bf82326126ba868a61438090919063ffffffff16565b614024565b1515612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000805a92506127c5878787611e00565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561286c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6128768686612c83565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515612979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055506000851115612b5e57612ac65a8461436790919063ffffffff16565b6188b8019250612ae98232612ae4868961438090919063ffffffff16565b614024565b1515612b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a3600193505050509392505050565b3073ffffffffffffffffffffffffffffffffffffffff168160405180828051906020019080838360005b83811015612bf9578082015181840152602081019050612bde565b50505050905090810190601f168015612c265780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af49150501515612c4457600080fd5b50505050565b6040805190810160405280600481526020017f434f494e0000000000000000000000000000000000000000000000000000000081525081565b6000306370de43f17c0100000000000000000000000000000000000000000000000000000000028484604051602001808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040183600019166000191681526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083101515612d965780518252602082019150602081019050602083039250612d71565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b6000612dd8338484614024565b1515612de357600080fd5b6001905092915050565b600030878787878787604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184805190602001908083835b602083101515612efa5780518252602082019150602081019050602083039250612ed5565b6001836020036101000a0380198251168184511680821785525050505050509050018381526020018281526020019750505050505050506040516020818303038152906040526040518082805190602001908083835b602083101515612f755780518252602082019150602081019050602083039250612f50565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090509695505050505050565b6000806000805a9250612ff98963d73dd6237c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156130a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6130e163d73dd6237c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff161515156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506132af8289896146bd565b15156132ba57600080fd5b600086111561336e576132d65a8461436790919063ffffffff16565b6188b80192506132f982326132f4868a61438090919063ffffffff16565b614024565b151561336d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310151561344d5780518252602082019150602081019050602083039250613428565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b6000806000805a92506134bc8a63cae9ca517c0100000000000000000000000000000000000000000000000000000000028b8b8b8b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515613563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b61359463cae9ca517c0100000000000000000000000000000000000000000000000000000000028a8a8a8a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515613697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555060008811156137775761376b828a8a613f31565b151561377657600080fd5b5b8873ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1838a308b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561386c578082015181840152602081019050613851565b50505050905090810190601f1680156138995780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138bb57600080fd5b505af11580156138cf573d6000803e3d6000fd5b505050506000861115613987576138ef5a8461436790919063ffffffff16565b6188b8019250613912823261390d868a61438090919063ffffffff16565b614024565b1515613986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a3600193505050509695505050505050565b60006139ed338585613f31565b15156139f857600080fd5b8373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613aed578082015181840152602081019050613ad2565b50505050905090810190601f168015613b1a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b3c57600080fd5b505af1158015613b50573d6000803e3d6000fd5b50505050600190509392505050565b60008060008060418551141515613b795760009350613c4e565b6020850151925060408501519150606085015160001a9050601b8160ff161015613ba457601b810190505b601b8160ff1614158015613bbc5750601c8160ff1614155b15613bca5760009350613c4e565b600186828585604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015613c41573d6000803e3d6000fd5b5050506020604051035193505b50505092915050565b6000613c643384846146bd565b1515613c6f57600080fd5b6001905092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613d5c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613d9857600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613e3757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613e7357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156140f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f496e76616c6964207472616e7366657220726563697069656e7420616464726581526020017f73732e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156141cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f53656e64657220646f6573206e6f74206861766520656e6f7567682062616c6181526020017f6e63652e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61421f82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142b482600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148ba90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600082821115151561437557fe5b818303905092915050565b600080828402905060008414806143a1575082848281151561439e57fe5b04145b15156143a957fe5b8091505092915050565b600081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115156144c1576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145d1565b61455082600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600061474e82600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148ba90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b60008082840190508381101515156148ce57fe5b80915050929150505600a165627a7a7230582007d68a1f18f53f5415f82453c99a6cc161c73a3b065d675f85b492b37322b8070029
Deployed Bytecode
0x6080604052600436106101ac576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101b15780630958a9f314610241578063095ea7b31461029857806309ea63e3146102fd57806310840303146104535780631296830d146104a257806318160ddd1461056157806323b872dd1461058c5780632d0335ab14610611578063313ce567146106685780633f45440614610699578063429b62e5146106dc578063476e492f14610737578063617b390b146107f857806366188463146108b757806370a082311461091c57806370de43f1146109735780638be52783146109bc5780638da5cb5b14610a7b5780638e421f1614610ad25780638f4ffcb114610b6b57806395d89b4114610c1e578063a59b3d4614610cae578063a9059cbb14610d05578063a9a0b49514610d6a578063adb8249e14610e56578063b15aa5b714610f15578063c8d4b38914610f62578063cae9ca5114611067578063d4acaf6c14611112578063d73dd623146111c9578063dd62ed3e1461122e578063dfb6c468146112a5578063f2fde38b146112e8575b600080fd5b3480156101bd57600080fd5b506101c661132b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102065780820151818401526020810190506101eb565b50505050905090810190601f1680156102335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024d57600080fd5b50610256611364565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102a457600080fd5b506102e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061138a565b604051808215151515815260200191505060405180910390f35b34801561030957600080fd5b50610411600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190803590602001909291905050506113ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045f57600080fd5b506104a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506113da565b005b3480156104ae57600080fd5b50610547600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061152a565b604051808215151515815260200191505060405180910390f35b34801561056d57600080fd5b50610576611942565b6040518082815260200191505060405180910390f35b34801561059857600080fd5b506105f7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061194c565b604051808215151515815260200191505060405180910390f35b34801561061d57600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b54565b6040518082815260200191505060405180910390f35b34801561067457600080fd5b5061067d611b9d565b604051808260ff1660ff16815260200191505060405180910390f35b3480156106a557600080fd5b506106da600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba2565b005b3480156106e857600080fd5b5061071d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de0565b604051808215151515815260200191505060405180910390f35b34801561074357600080fd5b506107b6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560001916906020019092919080359060200190929190505050611e00565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561080457600080fd5b5061089d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611e26565b604051808215151515815260200191505060405180910390f35b3480156108c357600080fd5b50610902600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061223e565b604051808215151515815260200191505060405180910390f35b34801561092857600080fd5b5061095d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612260565b6040518082815260200191505060405180910390f35b34801561097f57600080fd5b506109a260048036038101908080356000191690602001909291905050506122a9565b604051808215151515815260200191505060405180910390f35b3480156109c857600080fd5b50610a61600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612374565b604051808215151515815260200191505060405180910390f35b348015610a8757600080fd5b50610a9061278c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ade57600080fd5b50610b51600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035600019169060200190929190803590602001909291905050506127b1565b604051808215151515815260200191505060405180910390f35b348015610b7757600080fd5b50610c1c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612bb4565b005b348015610c2a57600080fd5b50610c33612c4a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c73578082015181840152602081019050610c58565b50505050905090810190601f168015610ca05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610cba57600080fd5b50610ce7600480360381019080803560001916906020019092919080359060200190929190505050612c83565b60405180826000191660001916815260200191505060405180910390f35b348015610d1157600080fd5b50610d50600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612dcb565b604051808215151515815260200191505060405180910390f35b348015610d7657600080fd5b50610e3860048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919080359060200190929190505050612ded565b60405180826000191660001916815260200191505060405180910390f35b348015610e6257600080fd5b50610efb600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612fae565b604051808215151515815260200191505060405180910390f35b348015610f2157600080fd5b50610f4460048036038101908080356000191690602001909291905050506133c6565b60405180826000191660001916815260200191505060405180910390f35b348015610f6e57600080fd5b5061104d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919080359060200190929190505050613481565b604051808215151515815260200191505060405180910390f35b34801561107357600080fd5b506110f8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506139e0565b604051808215151515815260200191505060405180910390f35b34801561111e57600080fd5b506111876004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b5f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111d557600080fd5b50611214600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613c57565b604051808215151515815260200191505060405180910390f35b34801561123a57600080fd5b5061128f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c79565b6040518082815260200191505060405180910390f35b3480156112b157600080fd5b506112e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d00565b005b3480156112f457600080fd5b50611329600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ddc565b005b6040805190810160405280601681526020017f436f696e7665737420434f494e20563320546f6b656e0000000000000000000081525081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611397338484613f31565b15156113a257600080fd5b6001905092915050565b60006113cd6113c76113c2898989898989612ded565b6133c6565b89613b5f565b9050979650505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561143657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561147257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156114cf57600080fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000806000805a92506115758963a9059cbb7c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b61165d63a9059cbb7c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515611760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555061182b828989614024565b151561183657600080fd5b60008611156118ea576118525a8461436790919063ffffffff16565b6188b80192506118758232611870868a61438090919063ffffffff16565b614024565b15156118e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b6000600354905090565b600081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015611a19575081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1515611a2457600080fd5b611ab382600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b3e848484614024565b1515611b4957600080fd5b600190509392505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601281565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c0057600080fd5b8291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611c9e57600080fd5b505af1158015611cb2573d6000803e3d6000fd5b505050506040513d6020811015611cc857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d9f57600080fd5b505af1158015611db3573d6000803e3d6000fd5b505050506040513d6020811015611dc957600080fd5b810190808051906020019092919050505050505050565b60026020528060005260406000206000915054906101000a900460ff1681565b6000611e1d611e17611e128585612c83565b6133c6565b85613b5f565b90509392505050565b6000806000805a9250611e718963095ea7b37c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b611f5963095ea7b37c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff1615151561205c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550612127828989613f31565b151561213257600080fd5b60008611156121e65761214e5a8461436790919063ffffffff16565b6188b8019250612171823261216c868a61438090919063ffffffff16565b614024565b15156121e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b600061224b3384846143b3565b151561225657600080fd5b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555060019050919050565b6000806000805a92506123bf8963661884637c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6124a763661884637c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff161515156125aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506126758289896143b3565b151561268057600080fd5b60008611156127345761269c5a8461436790919063ffffffff16565b6188b80192506126bf82326126ba868a61438090919063ffffffff16565b614024565b1515612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000805a92506127c5878787611e00565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561286c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6128768686612c83565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515612979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055506000851115612b5e57612ac65a8461436790919063ffffffff16565b6188b8019250612ae98232612ae4868961438090919063ffffffff16565b614024565b1515612b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a3600193505050509392505050565b3073ffffffffffffffffffffffffffffffffffffffff168160405180828051906020019080838360005b83811015612bf9578082015181840152602081019050612bde565b50505050905090810190601f168015612c265780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af49150501515612c4457600080fd5b50505050565b6040805190810160405280600481526020017f434f494e0000000000000000000000000000000000000000000000000000000081525081565b6000306370de43f17c0100000000000000000000000000000000000000000000000000000000028484604051602001808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040183600019166000191681526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083101515612d965780518252602082019150602081019050602083039250612d71565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b6000612dd8338484614024565b1515612de357600080fd5b6001905092915050565b600030878787878787604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184805190602001908083835b602083101515612efa5780518252602082019150602081019050602083039250612ed5565b6001836020036101000a0380198251168184511680821785525050505050509050018381526020018281526020019750505050505050506040516020818303038152906040526040518082805190602001908083835b602083101515612f755780518252602082019150602081019050602083039250612f50565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090509695505050505050565b6000806000805a9250612ff98963d73dd6237c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156130a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6130e163d73dd6237c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff161515156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506132af8289896146bd565b15156132ba57600080fd5b600086111561336e576132d65a8461436790919063ffffffff16565b6188b80192506132f982326132f4868a61438090919063ffffffff16565b614024565b151561336d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310151561344d5780518252602082019150602081019050602083039250613428565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b6000806000805a92506134bc8a63cae9ca517c0100000000000000000000000000000000000000000000000000000000028b8b8b8b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515613563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b61359463cae9ca517c0100000000000000000000000000000000000000000000000000000000028a8a8a8a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515613697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555060008811156137775761376b828a8a613f31565b151561377657600080fd5b5b8873ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1838a308b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561386c578082015181840152602081019050613851565b50505050905090810190601f1680156138995780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138bb57600080fd5b505af11580156138cf573d6000803e3d6000fd5b505050506000861115613987576138ef5a8461436790919063ffffffff16565b6188b8019250613912823261390d868a61438090919063ffffffff16565b614024565b1515613986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a3600193505050509695505050505050565b60006139ed338585613f31565b15156139f857600080fd5b8373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613aed578082015181840152602081019050613ad2565b50505050905090810190601f168015613b1a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b3c57600080fd5b505af1158015613b50573d6000803e3d6000fd5b50505050600190509392505050565b60008060008060418551141515613b795760009350613c4e565b6020850151925060408501519150606085015160001a9050601b8160ff161015613ba457601b810190505b601b8160ff1614158015613bbc5750601c8160ff1614155b15613bca5760009350613c4e565b600186828585604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015613c41573d6000803e3d6000fd5b5050506020604051035193505b50505092915050565b6000613c643384846146bd565b1515613c6f57600080fd5b6001905092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613d5c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613d9857600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613e3757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613e7357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156140f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f496e76616c6964207472616e7366657220726563697069656e7420616464726581526020017f73732e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156141cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f53656e64657220646f6573206e6f74206861766520656e6f7567682062616c6181526020017f6e63652e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61421f82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142b482600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148ba90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600082821115151561437557fe5b818303905092915050565b600080828402905060008414806143a1575082848281151561439e57fe5b04145b15156143a957fe5b8091505092915050565b600081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115156144c1576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145d1565b61455082600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600061474e82600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148ba90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b60008082840190508381101515156148ce57fe5b80915050929150505600a165627a7a7230582007d68a1f18f53f5415f82453c99a6cc161c73a3b065d675f85b492b37322b8070029
Swarm Source
bzzr://07d68a1f18f53f5415f82453c99a6cc161c73a3b065d675f85b492b37322b807
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.