ETH Price: $3,337.06 (-0.79%)

Token

Wrapped CryptoKitties (WCK)
 

Overview

Max Total Supply

71,251 WCK

Holders

1,677 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4 WCK

Value
$0.00
0xdd8edaa9d1a65bce1b83c8461a07b8bd5fc1ab23
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Wrapped CryptoKitty (WCK) is an ERC20 token, backed 1:1 by any ERC721 CryptoKitty.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WrappedCK

Compiler Version
v0.5.8+commit.23d335f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-05-31
*/

pragma solidity ^0.5.8;

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}


/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}


/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
 * Originally based on code by FirstBlood:
 * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 *
 * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for
 * all accounts just by listening to said events. Note that this isn't required by the specification, and other
 * compliant implementations may not do it.
 */
contract ERC20 is IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowed;

    uint256 private _totalSupply;

    /**
    * @dev Total number of tokens in existence
    */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
    * @dev Gets the balance of the specified address.
    * @param owner The address to query the balance of.
    * @return An uint256 representing the amount owned by the passed address.
    */
    function balanceOf(address owner) public view returns (uint256) {
        return _balances[owner];
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param owner address The address which owns the funds.
     * @param spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowed[owner][spender];
    }

    /**
    * @dev Transfer token for a specified address
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function transfer(address to, uint256 value) public returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * Beware that changing an allowance with this method brings the risk that someone may use both the old
     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     */
    function approve(address spender, uint256 value) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Transfer tokens from one address to another.
     * Note that while this function emits an Approval event, this is not required as per the specification,
     * and other compliant implementations may not emit the event.
     * @param from address The address which you want to send tokens from
     * @param to address The address which you want to transfer to
     * @param value uint256 the amount of tokens to be transferred
     */
    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
        _transfer(from, to, value);
        emit Approval(from, msg.sender, _allowed[from][msg.sender]);
        return true;
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param addedValue The amount of tokens to increase the allowance by.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue);
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    /**
    * @dev Transfer token for a specified addresses
    * @param from The address to transfer from.
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function _transfer(address from, address to, uint256 value) internal {
        require(to != address(0));

        _balances[from] = _balances[from].sub(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(from, to, value);
    }

    /**
     * @dev Internal function that mints an amount of the token and assigns it to
     * an account. This encapsulates the modification of balances such that the
     * proper events are emitted.
     * @param account The account that will receive the created tokens.
     * @param value The amount that will be created.
     */
    function _mint(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.add(value);
        _balances[account] = _balances[account].add(value);
        emit Transfer(address(0), account, value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account.
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burn(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account, deducting from the sender's allowance for said account. Uses the
     * internal burn function.
     * Emits an Approval event (reflecting the reduced allowance).
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burnFrom(address account, uint256 value) internal {
        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);
        _burn(account, value);
        emit Approval(account, msg.sender, _allowed[account][msg.sender]);
    }
}


/**
 * @title Helps contracts guard against reentrancy attacks.
 * @author Remco Bloemen <remco@2π.com>, Eenae <[email protected]>
 * @dev If you mark a function `nonReentrant`, you should also
 * mark it `external`.
 */
contract ReentrancyGuard {
    /// @dev counter to allow mutex lock with only one SSTORE operation
    uint256 private _guardCounter;

    constructor() public {
        // The counter starts at one to prevent changing it from zero to a non-zero
        // value, which is a more expensive operation.
        _guardCounter = 1;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter);
    }
}


/// @title Main contract for WrappedCK. This contract converts Cryptokitties between the ERC721 standard and the
///  ERC20 standard by locking cryptokitties into the contract and minting 1:1 backed ERC20 tokens, that
///  can then be redeemed for cryptokitties when desired.
/// @notice When wrapping a cryptokitty, you get a generic WCK token. Since the WCK token is generic, it has no
///  no information about what cryptokitty you submitted, so you will most likely not receive the same kitty
///  back when redeeming the token unless you specify that kitty's ID. The token only entitles you to receive 
///  *a* cryptokitty in return, not necessarily the *same* cryptokitty in return. A different user can submit
///  their own WCK tokens to the contract and withdraw the kitty that you originally deposited. WCK tokens have
///  no information about which kitty was originally deposited to mint WCK - this is due to the very nature of 
///  the ERC20 standard being fungible, and the ERC721 standard being nonfungible.
contract WrappedCK is ERC20, ReentrancyGuard {

    // OpenZeppelin's SafeMath library is used for all arithmetic operations to avoid overflows/underflows.
    using SafeMath for uint256;

    /* ****** */
    /* EVENTS */
    /* ****** */

    /// @dev This event is fired when a user deposits cryptokitties into the contract in exchange
    ///  for an equal number of WCK ERC20 tokens.
    /// @param kittyId  The cryptokitty id of the kitty that was deposited into the contract.
    event DepositKittyAndMintToken(
        uint256 kittyId
    );

    /// @dev This event is fired when a user deposits WCK ERC20 tokens into the contract in exchange
    ///  for an equal number of locked cryptokitties.
    /// @param kittyId  The cryptokitty id of the kitty that was withdrawn from the contract.
    event BurnTokenAndWithdrawKitty(
        uint256 kittyId
    );

    /* ******* */
    /* STORAGE */
    /* ******* */

    /// @dev An Array containing all of the cryptokitties that are locked in the contract, backing
    ///  WCK ERC20 tokens 1:1
    /// @notice Some of the kitties in this array were indeed deposited to the contract, but they
    ///  are no longer held by the contract. This is because withdrawSpecificKitty() allows a 
    ///  user to withdraw a kitty "out of order". Since it would be prohibitively expensive to 
    ///  shift the entire array once we've withdrawn a single element, we instead maintain this 
    ///  mapping to determine whether an element is still contained in the contract or not. 
    uint256[] private depositedKittiesArray;

    /// @dev A mapping keeping track of which kittyIDs are currently contained within the contract.
    /// @notice We cannot rely on depositedKittiesArray as the source of truth as to which cats are
    ///  deposited in the contract. This is because burnTokensAndWithdrawKitties() allows a user to 
    ///  withdraw a kitty "out of order" of the order that they are stored in the array. Since it 
    ///  would be prohibitively expensive to shift the entire array once we've withdrawn a single 
    ///  element, we instead maintain this mapping to determine whether an element is still contained 
    ///  in the contract or not. 
    mapping (uint256 => bool) private kittyIsDepositedInContract;

    /* ********* */
    /* CONSTANTS */
    /* ********* */

    /// @dev The metadata details about the "Wrapped CryptoKitties" WCK ERC20 token.
    uint8 constant public decimals = 18;
    string constant public name = "Wrapped CryptoKitties";
    string constant public symbol = "WCK";

    /// @dev The address of official CryptoKitties contract that stores the metadata about each cat.
    /// @notice The owner is not capable of changing the address of the CryptoKitties Core contract
    ///  once the contract has been deployed.
    address public kittyCoreAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d;
    KittyCore kittyCore;

    /* ********* */
    /* FUNCTIONS */
    /* ********* */

    /// @notice Allows a user to lock cryptokitties in the contract in exchange for an equal number
    ///  of WCK ERC20 tokens.
    /// @param _kittyIds  The ids of the cryptokitties that will be locked into the contract.
    /// @notice The user must first call approve() in the Cryptokitties Core contract on each kitty
    ///  that thye wish to deposit before calling depositKittiesAndMintTokens(). There is no danger 
    ///  of this contract overreaching its approval, since the CryptoKitties Core contract's approve() 
    ///  function only approves this contract for a single Cryptokitty. Calling approve() allows this 
    ///  contract to transfer the specified kitty in the depositKittiesAndMintTokens() function.
    function depositKittiesAndMintTokens(uint256[] calldata _kittyIds) external nonReentrant {
        require(_kittyIds.length > 0, 'you must submit an array with at least one element');
        for(uint i = 0; i < _kittyIds.length; i++){
            uint256 kittyToDeposit = _kittyIds[i];
            require(msg.sender == kittyCore.ownerOf(kittyToDeposit), 'you do not own this cat');
            require(kittyCore.kittyIndexToApproved(kittyToDeposit) == address(this), 'you must approve() this contract to give it permission to withdraw this cat before you can deposit a cat');
            kittyCore.transferFrom(msg.sender, address(this), kittyToDeposit);
            _pushKitty(kittyToDeposit);
            emit DepositKittyAndMintToken(kittyToDeposit);
        }
        _mint(msg.sender, (_kittyIds.length).mul(10**18));
    }

    /// @notice Allows a user to burn WCK ERC20 tokens in exchange for an equal number of locked 
    ///  cryptokitties.
    /// @param _kittyIds  The IDs of the kitties that the user wishes to withdraw. If the user submits 0 
    ///  as the ID for any kitty, the contract uses the last kitty in the array for that kitty.
    /// @param _destinationAddresses  The addresses that the withdrawn kitties will be sent to (this allows 
    ///  anyone to "airdrop" kitties to addresses that they do not own in a single transaction).
    function burnTokensAndWithdrawKitties(uint256[] calldata _kittyIds, address[] calldata _destinationAddresses) external nonReentrant {
        require(_kittyIds.length == _destinationAddresses.length, 'you did not provide a destination address for each of the cats you wish to withdraw');
        require(_kittyIds.length > 0, 'you must submit an array with at least one element');

        uint256 numTokensToBurn = _kittyIds.length;
        require(balanceOf(msg.sender) >= numTokensToBurn.mul(10**18), 'you do not own enough tokens to withdraw this many ERC721 cats');
        _burn(msg.sender, numTokensToBurn.mul(10**18));
        
        for(uint i = 0; i < numTokensToBurn; i++){
            uint256 kittyToWithdraw = _kittyIds[i];
            if(kittyToWithdraw == 0){
                kittyToWithdraw = _popKitty();
            } else {
                require(kittyIsDepositedInContract[kittyToWithdraw] == true, 'this kitty has already been withdrawn');
                require(address(this) == kittyCore.ownerOf(kittyToWithdraw), 'the contract does not own this cat');
                kittyIsDepositedInContract[kittyToWithdraw] = false;
            }
            kittyCore.transfer(_destinationAddresses[i], kittyToWithdraw);
            emit BurnTokenAndWithdrawKitty(kittyToWithdraw);
        }
    }

    /// @notice Adds a locked cryptokitty to the end of the array
    /// @param _kittyId  The id of the cryptokitty that will be locked into the contract.
    function _pushKitty(uint256 _kittyId) internal {
        depositedKittiesArray.push(_kittyId);
        kittyIsDepositedInContract[_kittyId] = true;
    }

    /// @notice Removes an unlocked cryptokitty from the end of the array
    /// @notice The reason that this function must check if the kittyIsDepositedInContract
    ///  is that the withdrawSpecificKitty() function allows a user to withdraw a kitty
    ///  from the array out of order.
    /// @return  The id of the cryptokitty that will be unlocked from the contract.
    function _popKitty() internal returns(uint256){
        require(depositedKittiesArray.length > 0, 'there are no cats in the array');
        uint256 kittyId = depositedKittiesArray[depositedKittiesArray.length - 1];
        depositedKittiesArray.length--;
        while(kittyIsDepositedInContract[kittyId] == false){
            kittyId = depositedKittiesArray[depositedKittiesArray.length - 1];
            depositedKittiesArray.length--;
        }
        kittyIsDepositedInContract[kittyId] = false;
        return kittyId;
    }

    /// @notice Removes any kitties that exist in the array but are no longer held in the
    ///  contract, which happens if the first few kitties have previously been withdrawn 
    ///  out of order using the withdrawSpecificKitty() function.
    /// @notice This function exists to prevent a griefing attack where a malicious attacker
    ///  could call withdrawSpecificKitty() on a large number of kitties at the front of the
    ///  array, causing the while-loop in _popKitty to always run out of gas.
    /// @param _numSlotsToCheck  The number of slots to check in the array.
    function batchRemoveWithdrawnKittiesFromStorage(uint256 _numSlotsToCheck) external {
        require(_numSlotsToCheck <= depositedKittiesArray.length, 'you are trying to batch remove more slots than exist in the array');
        uint256 arrayIndex = depositedKittiesArray.length;
        for(uint i = 0; i < _numSlotsToCheck; i++){
            arrayIndex = arrayIndex.sub(1);
            uint256 kittyId = depositedKittiesArray[arrayIndex];
            if(kittyIsDepositedInContract[kittyId] == false){
                depositedKittiesArray.length--;
            } else {
                return;
            }
        }
    }

    /// @notice The owner is not capable of changing the address of the CryptoKitties Core
    ///  contract once the contract has been deployed.
    constructor() public {
        kittyCore = KittyCore(kittyCoreAddress);
    }

    /// @dev We leave the fallback function payable in case the current State Rent proposals require
    ///  us to send funds to this contract to keep it alive on mainnet.
    /// @notice There is no function that allows the contract creator to withdraw any funds sent
    ///  to this contract, so any funds sent directly to the fallback function that are not used for 
    ///  State Rent are lost forever.
    function() external payable {}
}

/// @title Interface for interacting with the CryptoKitties Core contract created by Dapper Labs Inc.
contract KittyCore {
    function ownerOf(uint256 _tokenId) public view returns (address owner);
    function transferFrom(address _from, address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    mapping (uint256 => address) public kittyIndexToApproved;
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kittyIds","type":"uint256[]"},{"name":"_destinationAddresses","type":"address[]"}],"name":"burnTokensAndWithdrawKitties","outputs":[],"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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kittyCoreAddress","outputs":[{"name":"","type":"address"}],"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":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","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":"_numSlotsToCheck","type":"uint256"}],"name":"batchRemoveWithdrawnKittiesFromStorage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kittyIds","type":"uint256[]"}],"name":"depositKittiesAndMintTokens","outputs":[],"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"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"kittyId","type":"uint256"}],"name":"DepositKittyAndMintToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"kittyId","type":"uint256"}],"name":"BurnTokenAndWithdrawKitty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040527306012c8cf97bead5deae237070f9587f8e7a266d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006557600080fd5b506001600381905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061240d806100e06000396000f3fe6080604052600436106100e85760003560e01c8063395093511161008a578063a457c2d711610059578063a457c2d7146105b1578063a9059cbb14610624578063b38de03014610697578063dd62ed3e1461071d576100e8565b8063395093511461040e57806370a08231146104815780638a8d413e146104e657806395d89b4114610521576100e8565b806318160ddd116100c657806318160ddd146102c857806323b872dd146102f35780632c2ccdfb14610386578063313ce567146103dd576100e8565b806306fdde03146100ea578063095ea7b31461017a57806317a09fb7146101ed575b005b3480156100f657600080fd5b506100ff6107a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013f578082015181840152602081019050610124565b50505050905090810190601f16801561016c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018657600080fd5b506101d36004803603604081101561019d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107db565b604051808215151515815260200191505060405180910390f35b3480156101f957600080fd5b506102c66004803603604081101561021057600080fd5b810190808035906020019064010000000081111561022d57600080fd5b82018360208201111561023f57600080fd5b8035906020019184602083028401116401000000008311171561026157600080fd5b90919293919293908035906020019064010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b9091929391929390505050610906565b005b3480156102d457600080fd5b506102dd610ddc565b6040518082815260200191505060405180910390f35b3480156102ff57600080fd5b5061036c6004803603606081101561031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de6565b604051808215151515815260200191505060405180910390f35b34801561039257600080fd5b5061039b610fee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e957600080fd5b506103f2611014565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041a57600080fd5b506104676004803603604081101561043157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611019565b604051808215151515815260200191505060405180910390f35b34801561048d57600080fd5b506104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124e565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b5061051f6004803603602081101561050957600080fd5b8101908080359060200190929190505050611296565b005b34801561052d57600080fd5b506105366113a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057657808201518184015260208101905061055b565b50505050905090810190601f1680156105a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105bd57600080fd5b5061060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113db565b604051808215151515815260200191505060405180910390f35b34801561063057600080fd5b5061067d6004803603604081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611610565b604051808215151515815260200191505060405180910390f35b3480156106a357600080fd5b5061071b600480360360208110156106ba57600080fd5b81019080803590602001906401000000008111156106d757600080fd5b8201836020820111156106e957600080fd5b8035906020019184602083028401116401000000008311171561070b57600080fd5b9091929391929390505050611627565b005b34801561072957600080fd5b5061078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ac0565b6040518082815260200191505060405180910390f35b6040518060400160405280601581526020017f577261707065642043727970746f4b697474696573000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561081657600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60016003600082825401925050819055506000600354905082829050858590501461097c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605381526020018061232f6053913960600191505060405180910390fd5b600085859050116109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806122fd6032913960400191505060405180910390fd5b60008585905090506109fb670de0b6b3a764000082611b4790919063ffffffff16565b610a043361124e565b1015610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612382603e913960400191505060405180910390fd5b610a7f33610a7a670de0b6b3a764000084611b4790919063ffffffff16565b611b81565b60008090505b81811015610dc5576000878783818110610a9b57fe5b9050602002013590506000811415610abc57610ab5611cd3565b9050610c97565b600115156005600083815260200190815260200160002060009054906101000a900460ff16151514610b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061222f6025913960400191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610bac57600080fd5b505afa158015610bc0573d6000803e3d6000fd5b505050506040513d6020811015610bd657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610c6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123c06022913960400191505060405180910390fd5b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb878785818110610ce157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b505050507f2f467b677a4a63395bce26e8731fa49a02cd892ddeaf266650b403f140ba4590816040518082815260200191505060405180910390a1508080600101915050610a85565b50506003548114610dd557600080fd5b5050505050565b6000600254905090565b6000610e7782600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f02848484611e47565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105457600080fd5b6110e382600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201190919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6004805490508111156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806122bc6041913960600191505060405180910390fd5b6000600480549050905060008090505b8281101561139c57611320600183611e2790919063ffffffff16565b915060006004838154811061133157fe5b90600052602060002001549050600015156005600083815260200190815260200160002060009054906101000a900460ff161515141561138657600480548091906001900361138091906121dd565b5061138e565b50505061139f565b508080600101915050611304565b50505b50565b6040518060400160405280600381526020017f57434b000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141657600080fd5b6114a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2790919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600061161d338484611e47565b6001905092915050565b6001600360008282540192505081905550600060035490506000838390501161169b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806122fd6032913960400191505060405180910390fd5b60008090505b83839050811015611a855760008484838181106116ba57fe5b905060200201359050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561173657600080fd5b505afa15801561174a573d6000803e3d6000fd5b505050506040513d602081101561176057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f7520646f206e6f74206f776e20746869732063617400000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663481af3d3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561189b57600080fd5b505afa1580156118af573d6000803e3d6000fd5b505050506040513d60208110156118c557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260688152602001806122546068913960800191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611a1f57600080fd5b505af1158015611a33573d6000803e3d6000fd5b50505050611a4081612030565b7f999fa95b06ad12b3436bab902713e383705707923f9d7c75f5432b28a6487010816040518082815260200191505060405180910390a15080806001019150506116a1565b50611aad33611aa8670de0b6b3a764000086869050611b4790919063ffffffff16565b61208b565b6003548114611abb57600080fd5b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415611b5a5760009050611b7b565b6000828402905082848281611b6b57fe5b0414611b7657600080fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbb57600080fd5b611bd081600254611e2790919063ffffffff16565b600281905550611c27816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008060048054905011611d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746865726520617265206e6f206361747320696e20746865206172726179000081525060200191505060405180910390fd5b6000600460016004805490500381548110611d6657fe5b906000526020600020015490506004805480919060019003611d8891906121dd565b505b600015156005600083815260200190815260200160002060009054906101000a900460ff1615151415611df457600460016004805490500381548110611dcc57fe5b906000526020600020015490506004805480919060019003611dee91906121dd565b50611d8a565b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508091505090565b600082821115611e3657600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e8157600080fd5b611ed2816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f65816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008082840190508381101561202657600080fd5b8091505092915050565b600481908060018154018082558091505090600182039060005260206000200160009091929091909150555060016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120c557600080fd5b6120da8160025461201190919063ffffffff16565b600281905550612131816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b815481835581811115612204578183600052602060002091820191016122039190612209565b5b505050565b61222b91905b8082111561222757600081600090555060010161220f565b5090565b9056fe74686973206b697474792068617320616c7265616479206265656e2077697468647261776e796f75206d75737420617070726f76652829207468697320636f6e747261637420746f2067697665206974207065726d697373696f6e20746f207769746864726177207468697320636174206265666f726520796f752063616e206465706f736974206120636174796f752061726520747279696e6720746f2062617463682072656d6f7665206d6f726520736c6f7473207468616e20657869737420696e20746865206172726179796f75206d757374207375626d697420616e2061727261792077697468206174206c65617374206f6e6520656c656d656e74796f7520646964206e6f742070726f7669646520612064657374696e6174696f6e206164647265737320666f722065616368206f6620746865206361747320796f75207769736820746f207769746864726177796f7520646f206e6f74206f776e20656e6f75676820746f6b656e7320746f2077697468647261772074686973206d616e7920455243373231206361747374686520636f6e747261637420646f6573206e6f74206f776e207468697320636174a165627a7a72305820d363973b5673f94e494be90b2ab90cee20544398819174d7024fdd5c61c862e40029

Deployed Bytecode

0x6080604052600436106100e85760003560e01c8063395093511161008a578063a457c2d711610059578063a457c2d7146105b1578063a9059cbb14610624578063b38de03014610697578063dd62ed3e1461071d576100e8565b8063395093511461040e57806370a08231146104815780638a8d413e146104e657806395d89b4114610521576100e8565b806318160ddd116100c657806318160ddd146102c857806323b872dd146102f35780632c2ccdfb14610386578063313ce567146103dd576100e8565b806306fdde03146100ea578063095ea7b31461017a57806317a09fb7146101ed575b005b3480156100f657600080fd5b506100ff6107a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013f578082015181840152602081019050610124565b50505050905090810190601f16801561016c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018657600080fd5b506101d36004803603604081101561019d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107db565b604051808215151515815260200191505060405180910390f35b3480156101f957600080fd5b506102c66004803603604081101561021057600080fd5b810190808035906020019064010000000081111561022d57600080fd5b82018360208201111561023f57600080fd5b8035906020019184602083028401116401000000008311171561026157600080fd5b90919293919293908035906020019064010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b9091929391929390505050610906565b005b3480156102d457600080fd5b506102dd610ddc565b6040518082815260200191505060405180910390f35b3480156102ff57600080fd5b5061036c6004803603606081101561031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de6565b604051808215151515815260200191505060405180910390f35b34801561039257600080fd5b5061039b610fee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e957600080fd5b506103f2611014565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041a57600080fd5b506104676004803603604081101561043157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611019565b604051808215151515815260200191505060405180910390f35b34801561048d57600080fd5b506104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124e565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b5061051f6004803603602081101561050957600080fd5b8101908080359060200190929190505050611296565b005b34801561052d57600080fd5b506105366113a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057657808201518184015260208101905061055b565b50505050905090810190601f1680156105a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105bd57600080fd5b5061060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113db565b604051808215151515815260200191505060405180910390f35b34801561063057600080fd5b5061067d6004803603604081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611610565b604051808215151515815260200191505060405180910390f35b3480156106a357600080fd5b5061071b600480360360208110156106ba57600080fd5b81019080803590602001906401000000008111156106d757600080fd5b8201836020820111156106e957600080fd5b8035906020019184602083028401116401000000008311171561070b57600080fd5b9091929391929390505050611627565b005b34801561072957600080fd5b5061078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ac0565b6040518082815260200191505060405180910390f35b6040518060400160405280601581526020017f577261707065642043727970746f4b697474696573000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561081657600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60016003600082825401925050819055506000600354905082829050858590501461097c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605381526020018061232f6053913960600191505060405180910390fd5b600085859050116109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806122fd6032913960400191505060405180910390fd5b60008585905090506109fb670de0b6b3a764000082611b4790919063ffffffff16565b610a043361124e565b1015610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612382603e913960400191505060405180910390fd5b610a7f33610a7a670de0b6b3a764000084611b4790919063ffffffff16565b611b81565b60008090505b81811015610dc5576000878783818110610a9b57fe5b9050602002013590506000811415610abc57610ab5611cd3565b9050610c97565b600115156005600083815260200190815260200160002060009054906101000a900460ff16151514610b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061222f6025913960400191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610bac57600080fd5b505afa158015610bc0573d6000803e3d6000fd5b505050506040513d6020811015610bd657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610c6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123c06022913960400191505060405180910390fd5b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb878785818110610ce157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b505050507f2f467b677a4a63395bce26e8731fa49a02cd892ddeaf266650b403f140ba4590816040518082815260200191505060405180910390a1508080600101915050610a85565b50506003548114610dd557600080fd5b5050505050565b6000600254905090565b6000610e7782600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f02848484611e47565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105457600080fd5b6110e382600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201190919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6004805490508111156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806122bc6041913960600191505060405180910390fd5b6000600480549050905060008090505b8281101561139c57611320600183611e2790919063ffffffff16565b915060006004838154811061133157fe5b90600052602060002001549050600015156005600083815260200190815260200160002060009054906101000a900460ff161515141561138657600480548091906001900361138091906121dd565b5061138e565b50505061139f565b508080600101915050611304565b50505b50565b6040518060400160405280600381526020017f57434b000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141657600080fd5b6114a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2790919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600061161d338484611e47565b6001905092915050565b6001600360008282540192505081905550600060035490506000838390501161169b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806122fd6032913960400191505060405180910390fd5b60008090505b83839050811015611a855760008484838181106116ba57fe5b905060200201359050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561173657600080fd5b505afa15801561174a573d6000803e3d6000fd5b505050506040513d602081101561176057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f7520646f206e6f74206f776e20746869732063617400000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663481af3d3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561189b57600080fd5b505afa1580156118af573d6000803e3d6000fd5b505050506040513d60208110156118c557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260688152602001806122546068913960800191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611a1f57600080fd5b505af1158015611a33573d6000803e3d6000fd5b50505050611a4081612030565b7f999fa95b06ad12b3436bab902713e383705707923f9d7c75f5432b28a6487010816040518082815260200191505060405180910390a15080806001019150506116a1565b50611aad33611aa8670de0b6b3a764000086869050611b4790919063ffffffff16565b61208b565b6003548114611abb57600080fd5b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415611b5a5760009050611b7b565b6000828402905082848281611b6b57fe5b0414611b7657600080fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbb57600080fd5b611bd081600254611e2790919063ffffffff16565b600281905550611c27816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008060048054905011611d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746865726520617265206e6f206361747320696e20746865206172726179000081525060200191505060405180910390fd5b6000600460016004805490500381548110611d6657fe5b906000526020600020015490506004805480919060019003611d8891906121dd565b505b600015156005600083815260200190815260200160002060009054906101000a900460ff1615151415611df457600460016004805490500381548110611dcc57fe5b906000526020600020015490506004805480919060019003611dee91906121dd565b50611d8a565b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508091505090565b600082821115611e3657600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e8157600080fd5b611ed2816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f65816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008082840190508381101561202657600080fd5b8091505092915050565b600481908060018154018082558091505090600182039060005260206000200160009091929091909150555060016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120c557600080fd5b6120da8160025461201190919063ffffffff16565b600281905550612131816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b815481835581811115612204578183600052602060002091820191016122039190612209565b5b505050565b61222b91905b8082111561222757600081600090555060010161220f565b5090565b9056fe74686973206b697474792068617320616c7265616479206265656e2077697468647261776e796f75206d75737420617070726f76652829207468697320636f6e747261637420746f2067697665206974207065726d697373696f6e20746f207769746864726177207468697320636174206265666f726520796f752063616e206465706f736974206120636174796f752061726520747279696e6720746f2062617463682072656d6f7665206d6f726520736c6f7473207468616e20657869737420696e20746865206172726179796f75206d757374207375626d697420616e2061727261792077697468206174206c65617374206f6e6520656c656d656e74796f7520646964206e6f742070726f7669646520612064657374696e6174696f6e206164647265737320666f722065616368206f6620746865206361747320796f75207769736820746f207769746864726177796f7520646f206e6f74206f776e20656e6f75676820746f6b656e7320746f2077697468647261772074686973206d616e7920455243373231206361747374686520636f6e747261637420646f6573206e6f74206f776e207468697320636174a165627a7a72305820d363973b5673f94e494be90b2ab90cee20544398819174d7024fdd5c61c862e40029

Deployed Bytecode Sourcemap

12551:9692:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15074:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15074:53:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15074:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5402:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5402:244:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5402:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17728:1334;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17728:1334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17728:1334:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;17728:1334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17728:1334:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;17728:1334:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;17728:1334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17728:1334:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;17728:1334:0;;;;;;;;;;;;:::i;:::-;;3561:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3561:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6119:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6119:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6119:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15430:76;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15430:76:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15032:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15032:35:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6933:323;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6933:323:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6933:323:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3868:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3868:106:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3868:106:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20915:637;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20915:637:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20915:637:0;;;;;;;;;;;;;;;;;:::i;:::-;;15134:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15134:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15134:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7776:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7776:333:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7776:333:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4615:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4615:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4615:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16343:841;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16343:841:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16343:841:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16343:841:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16343:841:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16343:841:0;;;;;;;;;;;;:::i;:::-;;4313:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4313:131:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4313:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15074:53;;;;;;;;;;;;;;;;;;;:::o;5402:244::-;5467:4;5511:1;5492:21;;:7;:21;;;;5484:30;;;;;;5559:5;5527:8;:20;5536:10;5527:20;;;;;;;;;;;;;;;:29;5548:7;5527:29;;;;;;;;;;;;;;;:37;;;;5601:7;5580:36;;5589:10;5580:36;;;5610:5;5580:36;;;;;;;;;;;;;;;;;;5634:4;5627:11;;5402:244;;;;:::o;17728:1334::-;11390:1;11373:13;;:18;;;;;;;;;;;11402:20;11425:13;;11402:36;;17899:21;;:28;;17879:9;;:16;;:48;17871:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18053:1;18034:9;;:16;;:20;18026:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18122:23;18148:9;;:16;;18122:42;;18208:27;18228:6;18208:15;:19;;:27;;;;:::i;:::-;18183:21;18193:10;18183:9;:21::i;:::-;:52;;18175:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18313:46;18319:10;18331:27;18351:6;18331:15;:19;;:27;;;;:::i;:::-;18313:5;:46::i;:::-;18384:6;18393:1;18384:10;;18380:675;18400:15;18396:1;:19;18380:675;;;18436:23;18462:9;;18472:1;18462:12;;;;;;;;;;;;;18436:38;;18511:1;18492:15;:20;18489:417;;;18550:11;:9;:11::i;:::-;18532:29;;18489:417;;;18657:4;18610:51;;:26;:43;18637:15;18610:43;;;;;;;;;;;;;;;;;;;;;:51;;;18602:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18747:9;;;;;;;;;;;:17;;;18765:15;18747:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18747:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18747:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18747:34:0;;;;;;;;;;;;;;;;18730:51;;18738:4;18730:51;;;18722:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18885:5;18839:26;:43;18866:15;18839:43;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;18489:417;18920:9;;;;;;;;;;;:18;;;18939:21;;18961:1;18939:24;;;;;;;;;;;;;;;18965:15;18920:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18920:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18920:61:0;;;;19001:42;19027:15;19001:42;;;;;;;;;;;;;;;;;;18380:675;18417:3;;;;;;;18380:675;;;;11449:1;11485:13;;11469:12;:29;11461:38;;;;;;17728:1334;;;;;:::o;3561:91::-;3605:7;3632:12;;3625:19;;3561:91;:::o;6119:299::-;6198:4;6244:37;6275:5;6244:8;:14;6253:4;6244:14;;;;;;;;;;;;;;;:26;6259:10;6244:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;6215:8;:14;6224:4;6215:14;;;;;;;;;;;;;;;:26;6230:10;6215:26;;;;;;;;;;;;;;;:66;;;;6292:26;6302:4;6308:2;6312:5;6292:9;:26::i;:::-;6349:10;6334:54;;6343:4;6334:54;;;6361:8;:14;6370:4;6361:14;;;;;;;;;;;;;;;:26;6376:10;6361:26;;;;;;;;;;;;;;;;6334:54;;;;;;;;;;;;;;;;;;6406:4;6399:11;;6119:299;;;;;:::o;15430:76::-;;;;;;;;;;;;;:::o;15032:35::-;15065:2;15032:35;:::o;6933:323::-;7013:4;7057:1;7038:21;;:7;:21;;;;7030:30;;;;;;7105:45;7139:10;7105:8;:20;7114:10;7105:20;;;;;;;;;;;;;;;:29;7126:7;7105:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;7073:8;:20;7082:10;7073:20;;;;;;;;;;;;;;;:29;7094:7;7073:29;;;;;;;;;;;;;;;:77;;;;7187:7;7166:60;;7175:10;7166:60;;;7196:8;:20;7205:10;7196:20;;;;;;;;;;;;;;;:29;7217:7;7196:29;;;;;;;;;;;;;;;;7166:60;;;;;;;;;;;;;;;;;;7244:4;7237:11;;6933:323;;;;:::o;3868:106::-;3923:7;3950:9;:16;3960:5;3950:16;;;;;;;;;;;;;;;;3943:23;;3868:106;;;:::o;20915:637::-;21037:21;:28;;;;21017:16;:48;;21009:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21146:18;21167:21;:28;;;;21146:49;;21210:6;21219:1;21210:10;;21206:339;21226:16;21222:1;:20;21206:339;;;21276:17;21291:1;21276:10;:14;;:17;;;;:::i;:::-;21263:30;;21308:15;21326:21;21348:10;21326:33;;;;;;;;;;;;;;;;21308:51;;21416:5;21377:44;;:26;:35;21404:7;21377:35;;;;;;;;;;;;;;;;;;;;;:44;;;21374:160;;;21441:21;:30;;;;;;;;;;;;:::i;:::-;;21374:160;;;21512:7;;;;;21374:160;21206:339;21244:3;;;;;;;21206:339;;;;20915:637;;;:::o;15134:37::-;;;;;;;;;;;;;;;;;;;:::o;7776:333::-;7861:4;7905:1;7886:21;;:7;:21;;;;7878:30;;;;;;7953:50;7987:15;7953:8;:20;7962:10;7953:20;;;;;;;;;;;;;;;:29;7974:7;7953:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;7921:8;:20;7930:10;7921:20;;;;;;;;;;;;;;;:29;7942:7;7921:29;;;;;;;;;;;;;;;:82;;;;8040:7;8019:60;;8028:10;8019:60;;;8049:8;:20;8058:10;8049:20;;;;;;;;;;;;;;;:29;8070:7;8049:29;;;;;;;;;;;;;;;;8019:60;;;;;;;;;;;;;;;;;;8097:4;8090:11;;7776:333;;;;:::o;4615:140::-;4676:4;4693:32;4703:10;4715:2;4719:5;4693:9;:32::i;:::-;4743:4;4736:11;;4615:140;;;;:::o;16343:841::-;11390:1;11373:13;;:18;;;;;;;;;;;11402:20;11425:13;;11402:36;;16470:1;16451:9;;:16;;:20;16443:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16541:6;16550:1;16541:10;;16537:580;16557:9;;:16;;16553:1;:20;16537:580;;;16594:22;16619:9;;16629:1;16619:12;;;;;;;;;;;;;16594:37;;16668:9;;;;;;;;;;;:17;;;16686:14;16668:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16668:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16668:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16668:33:0;;;;;;;;;;;;;;;;16654:47;;:10;:47;;;16646:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16810:4;16752:63;;:9;;;;;;;;;;;:30;;;16783:14;16752:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16752:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16752:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16752:46:0;;;;;;;;;;;;;;;;:63;;;16744:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16939:9;;;;;;;;;;;:22;;;16962:10;16982:4;16989:14;16939:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16939:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16939:65:0;;;;17019:26;17030:14;17019:10;:26::i;:::-;17065:40;17090:14;17065:40;;;;;;;;;;;;;;;;;;16537:580;16575:3;;;;;;;16537:580;;;;17127:49;17133:10;17145:30;17168:6;17146:9;;:16;;17145:22;;:30;;;;:::i;:::-;17127:5;:49::i;:::-;11485:13;;11469:12;:29;11461:38;;;;;;16343:841;;;:::o;4313:131::-;4385:7;4412:8;:15;4421:5;4412:15;;;;;;;;;;;;;;;:24;4428:7;4412:24;;;;;;;;;;;;;;;;4405:31;;4313:131;;;;:::o;1002:433::-;1060:7;1309:1;1304;:6;1300:47;;;1334:1;1327:8;;;;1300:47;1359:9;1375:1;1371;:5;1359:17;;1404:1;1399;1395;:5;;;;;;:10;1387:19;;;;;;1426:1;1419:8;;;1002:433;;;;;:::o;9448:269::-;9542:1;9523:21;;:7;:21;;;;9515:30;;;;;;9573:23;9590:5;9573:12;;:16;;:23;;;;:::i;:::-;9558:12;:38;;;;9628:29;9651:5;9628:9;:18;9638:7;9628:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;9607:9;:18;9617:7;9607:18;;;;;;;;;;;;;;;:50;;;;9699:1;9673:36;;9682:7;9673:36;;;9703:5;9673:36;;;;;;;;;;;;;;;;;;9448:269;;:::o;19772:542::-;19810:7;19868:1;19837:21;:28;;;;:32;19829:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19915:15;19933:21;19986:1;19955:21;:28;;;;:32;19933:55;;;;;;;;;;;;;;;;19915:73;;19999:21;:30;;;;;;;;;;;;:::i;:::-;;20040:188;20085:5;20046:44;;:26;:35;20073:7;20046:35;;;;;;;;;;;;;;;;;;;;;:44;;;20040:188;;;20116:21;20169:1;20138:21;:28;;;;:32;20116:55;;;;;;;;;;;;;;;;20106:65;;20186:21;:30;;;;;;;;;;;;:::i;:::-;;20040:188;;;20276:5;20238:26;:35;20265:7;20238:35;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;20299:7;20292:14;;;19772:542;:::o;2007:150::-;2065:7;2098:1;2093;:6;;2085:15;;;;;;2111:9;2127:1;2123;:5;2111:17;;2148:1;2141:8;;;2007:150;;;;:::o;8331:262::-;8433:1;8419:16;;:2;:16;;;;8411:25;;;;;;8467:26;8487:5;8467:9;:15;8477:4;8467:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;8449:9;:15;8459:4;8449:15;;;;;;;;;;;;;;;:44;;;;8520:24;8538:5;8520:9;:13;8530:2;8520:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;8504:9;:13;8514:2;8504:13;;;;;;;;;;;;;;;:40;;;;8575:2;8560:25;;8569:4;8560:25;;;8579:5;8560:25;;;;;;;;;;;;;;;;;;8331:262;;;:::o;2243:150::-;2301:7;2321:9;2337:1;2333;:5;2321:17;;2362:1;2357;:6;;2349:15;;;;;;2384:1;2377:8;;;2243:150;;;;:::o;19228:156::-;19286:21;19313:8;19286:36;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;19286:36:0;;;;;;;;;;;;;;;;;;;;;;19372:4;19333:26;:36;19360:8;19333:36;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;19228:156;:::o;8945:269::-;9039:1;9020:21;;:7;:21;;;;9012:30;;;;;;9070:23;9087:5;9070:12;;:16;;:23;;;;:::i;:::-;9055:12;:38;;;;9125:29;9148:5;9125:9;:18;9135:7;9125:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;9104:9;:18;9114:7;9104:18;;;;;;;;;;;;;;;:50;;;;9191:7;9170:36;;9187:1;9170:36;;;9200:5;9170:36;;;;;;;;;;;;;;;;;;8945:269;;:::o;12551:9692::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://d363973b5673f94e494be90b2ab90cee20544398819174d7024fdd5c61c862e4
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.