ETH Price: $3,170.84 (+2.15%)

Token

HashKittens (MEOWW)
 

Overview

Max Total Supply

21,000,000 MEOWW

Holders

40

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Filtered by Token Holder
catoshi.eth
Balance
13,621.41684698 MEOWW

Value
$0.00
0xf9a06b93b75f4ea39998378c7f03eca15d5bc300
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HashKittens

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-05
*/

/**
 *Submitted for verification at Etherscan.io on 2018-02-06
*/
pragma solidity ^0.8.6;



// ----------------------------------------------------------------------------

// 'Hashkittens' ERC20 contract

// Mineable ERC20 Token using Proof Of Work

//

// Symbol      : MEOWW

// Name        : Hashkittens

// Total supply: 21,000,000.00

// Decimals    : 8

//


// ----------------------------------------------------------------------------

 







// ----------------------------------------------------------------------------

// ERC Token Standard #20 Interface

// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md

// ----------------------------------------------------------------------------

abstract contract ERC20Interface {

    function totalSupply() external virtual view returns (uint);

    function balanceOf(address tokenOwner) external virtual view returns (uint balance);

    function allowance(address tokenOwner, address spender) external virtual view returns (uint remaining);

    function transfer(address to, uint tokens) external virtual returns (bool success);

    function approve(address spender, uint tokens) external virtual returns (bool success);

    function transferFrom(address from, address to, uint tokens) external virtual returns (bool success);

    function _approve(address owner, address spender, uint tokens) internal virtual returns (bool success);

    function _transfer(address from, address to, uint tokens) internal virtual returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);

    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

}

contract ERC20Standard is ERC20Interface {
 
    string public symbol;
    string public name;

    uint8 public decimals;

    mapping(address => uint) balances;   
    mapping(address => mapping(address => uint)) allowed;
 
    uint public override totalSupply; 

    constructor(string memory _symbol, string memory _name, uint8 _decimals){
        symbol = _symbol;
        name = _name;
        decimals = _decimals;
    }

    function _transfer(address from, address to, uint tokens) internal override returns (bool success) {

        balances[from] = balances[from] - (tokens);

        balances[to] = balances[to] + (tokens);

        emit Transfer(from, to, tokens);

        return true;
    }



    // ------------------------------------------------------------------------

    // Get the token balance for account `tokenOwner`

    // ------------------------------------------------------------------------

    function balanceOf(address tokenOwner) public override view returns (uint balance) {

        return balances[tokenOwner];

    }



    // ------------------------------------------------------------------------

    // Transfer the balance from token owner's account to `to` account

    // - Owner's account must have sufficient balance to transfer

    // - 0 value transfers are allowed

    // ------------------------------------------------------------------------

    function transfer(address to, uint tokens) public override returns (bool success) {

        return _transfer(msg.sender, to, tokens);

    }

  


    // ------------------------------------------------------------------------

    // Token owner can approve for `spender` to transferFrom(...) `tokens`

    // from the token owner's account

    //

    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md

    // recommends that there are no checks for the approval double-spend attack

    // as this should be implemented in user interfaces

    // ------------------------------------------------------------------------

    function approve(address spender, uint tokens) public override returns (bool success) {

        return _approve(msg.sender, spender,tokens);

    }

    function _approve(address owner, address spender, uint tokens) internal override returns (bool success) {

        allowed[owner][spender] = tokens;

        emit Approval(owner, spender, tokens);

        return true;

    } 


    // ------------------------------------------------------------------------

    // Transfer `tokens` from the `from` account to the `to` account

    //

    // The calling account must already have sufficient tokens approve(...)-d

    // for spending from the `from` account and

    // - From account must have sufficient balance to transfer

    // - Spender must have sufficient allowance to transfer

    // - 0 value transfers are allowed

    // ------------------------------------------------------------------------

    function transferFrom(address from, address to, uint tokens) public override returns (bool success) {
        
        allowed[from][msg.sender] = allowed[from][msg.sender] - (tokens);

        return _transfer(from,to,tokens);

    }


    // ------------------------------------------------------------------------

    // Returns the amount of tokens approved by the owner that can be

    // transferred to the spender's account

    // ------------------------------------------------------------------------

    function allowance(address tokenOwner, address spender) public override view returns (uint remaining) {

        return allowed[tokenOwner][spender];

    }


}




abstract contract EIP918Interface {

  function challengeNumber() virtual external returns (bytes32);
  function tokensMinted() virtual external returns (uint256);
  function miningTarget() virtual external returns (uint256);
  function maxSupplyForEra() virtual external returns (uint256);  
  function latestDifficultyPeriodStarted() virtual external returns (uint256);
  function rewardEra() virtual external returns (uint256);
  function epochCount() virtual external returns (uint256); 
  function getMiningReward() virtual external returns (uint256);

}


library ECRecover {
    /**
     * @notice Recover signer's address from a signed message
     * @dev Adapted from: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/65e4ffde586ec89af3b7e9140bdc9235d1254853/contracts/cryptography/ECDSA.sol
     * Modifications: Accept v, r, and s as separate arguments
     * @param digest    Keccak-256 hash digest of the signed message
     * @param v         v of the signature
     * @param r         r of the signature
     * @param s         s of the signature
     * @return Signer address
     */
    function recover(
        bytes32 digest,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (
            uint256(s) >
            0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0
        ) {
            revert("ECRecover: invalid signature 's' value");
        }

        if (v != 27 && v != 28) {
            revert("ECRecover: invalid signature 'v' value");
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(digest, v, r, s);
        require(signer != address(0), "ECRecover: invalid signature");

        return signer;
    }
}



contract EIP712Domain {
    /**
     * @dev EIP712 Domain Separator
     */
    bytes32 public DOMAIN_SEPARATOR;
}



/**
 * @title EIP712
 * @notice A library that provides EIP712 helper functions
 */
library EIP712 {
    /**
     * @notice Make EIP712 domain separator
     * @param name      Contract name
     * @param version   Contract version
     * @return Domain separator
     */
    function makeDomainSeparator(string memory name, string memory version)
        internal
        view
        returns (bytes32)
    {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        return
            keccak256(
                abi.encode(
                    // keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")
                    0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f,
                    keccak256(bytes(name)),
                    keccak256(bytes(version)),
                    chainId,
                    address(this)
                )
            );
    }

    /**
     * @notice Recover signer's address from a EIP712 signature
     * @param domainSeparator   Domain separator
     * @param v                 v of the signature
     * @param r                 r of the signature
     * @param s                 s of the signature
     * @param typeHashAndData   Type hash concatenated with data
     * @return Signer's address
     */
    function recover(
        bytes32 domainSeparator,
        uint8 v,
        bytes32 r,
        bytes32 s,
        bytes memory typeHashAndData
    ) internal pure returns (address) {
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator,
                keccak256(typeHashAndData)
            )
        );
        return ECRecover.recover(digest, v, r, s);
    }
 
}


/**
 * @title EIP-2612
 * @notice Provide internal implementation for gas-abstracted approvals
 */
abstract contract EIP2612 is EIP712Domain,ERC20Interface {
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)")
    bytes32
        public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

    mapping(address => uint256) private _permitNonces;

    /**
     * @notice Nonces for permit
     * @param owner Token owner's address (Authorizer)
     * @return Next nonce
     */
    function nonces(address owner) external view returns (uint256) {
        return _permitNonces[owner];
    }

    /**
     * @notice Verify a signed approval permit and execute if valid
     * @param owner     Token owner's address (Authorizer)
     * @param spender   Spender's address
     * @param value     Amount of allowance
     * @param deadline  The time at which this expires (unix time)
     * @param v         v of the signature
     * @param r         r of the signature
     * @param s         s of the signature
     */
    function _permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        require(deadline >= block.timestamp, "Permit is expired");

        bytes memory data = abi.encode(
            PERMIT_TYPEHASH,
            owner,
            spender,
            value,
            _permitNonces[owner]++,
            deadline
        );
        require(
            EIP712.recover(DOMAIN_SEPARATOR, v, r, s, data) == owner,
            "EIP2612: invalid signature"
        );

        _approve(owner, spender, value);
    }

 
}





library ExtendedMath {


    //return the smaller of the two inputs (a or b)
    function limitLessThan(uint a, uint b) internal pure returns (uint c) {

        if(a > b) return b;

        return a;

    }
}






// ----------------------------------------------------------------------------

// ERC20 Token, with the addition of symbol, name and decimals and an

// initial fixed supply

// ----------------------------------------------------------------------------

contract HashKittens is ERC20Standard("MEOWW","HashKittens",8), EIP2612 {

     
    using ExtendedMath for uint;


    

     uint public latestDifficultyPeriodStarted;



    uint public epochCount;//number of 'blocks' mined


    uint public _BLOCKS_PER_READJUSTMENT = 1024;


    //a little number
    uint public  _MINIMUM_TARGET = 2**16;


      //a big number is easier ; just find a solution that is smaller
    //uint public  _MAXIMUM_TARGET = 2**224;  bitcoin uses 224
    uint public  _MAXIMUM_TARGET = 2**234;


    uint public miningTarget;

    bytes32 public challengeNumber;   //generate a new one when a new reward is minted
    uint public currentMiningReward;


    uint public rewardEra;
    uint public maxSupplyForEra;


    address public lastRewardTo;
    uint public lastRewardAmount;
    uint public lastRewardEthBlockNumber;

    

    

    uint public tokensMinted;

   // mapping(address => uint) balances;


   // mapping(address => mapping(address => uint)) allowed;


    event Mint(address indexed from, uint reward_amount, uint epochCount, bytes32 newChallengeNumber);

    // ------------------------------------------------------------------------

    // Constructor

    // ------------------------------------------------------------------------

    constructor() {

        DOMAIN_SEPARATOR = EIP712.makeDomainSeparator(name, "1");

        totalSupply = 21000000 * 10**uint(decimals);

        

        tokensMinted = 0;

        rewardEra = 0;
        currentMiningReward = getMiningReward() ;

        maxSupplyForEra = totalSupply - (totalSupply / ( 2**(rewardEra + 1)));

        miningTarget = _MAXIMUM_TARGET;

        latestDifficultyPeriodStarted = block.number;
 

        _startNewMiningEpoch();


        //The owner gets nothing! You must mine this ERC20 token
        //balances[owner] = _totalSupply;
        //Transfer(address(0), owner, _totalSupply);

    }

    function mint(uint256 nonce, bytes32) public returns (bool success) {

        return mintTo(nonce,msg.sender);

    }

    function mintTo(uint256 nonce, address minter) public returns (bool success) {
    
        //the PoW must contain work that includes a recent ethereum block hash (challenge number) and the msg.sender's address to prevent MITM attacks
        bytes32 digest = keccak256(abi.encodePacked(challengeNumber, minter, nonce ));

        
        //the digest must be smaller than the target
        if(uint256(digest) > miningTarget) revert();

        //only allow one reward for each block
        require(lastRewardEthBlockNumber != block.number);

        balances[minter] = balances[minter] + (currentMiningReward);
        emit Transfer(address(this), minter, currentMiningReward);

        tokensMinted = tokensMinted + currentMiningReward;

        //Cannot mint more tokens than there are
        require(tokensMinted <= maxSupplyForEra);

        //set readonly diagnostics data
        lastRewardTo = minter;
        lastRewardAmount = currentMiningReward;
        lastRewardEthBlockNumber = block.number;

        _startNewMiningEpoch();

        emit Mint(minter, currentMiningReward, epochCount, challengeNumber );        

        return true;

    }

     

    //a new 'block' to be mined
    function _startNewMiningEpoch() internal {

      //if max supply for the era will be exceeded next reward round then enter the new era before that happens

      //32 is the final reward era, almost all tokens minted
      //once the final era is reached, more tokens will not be given out because the assert function
      if(tokensMinted + (currentMiningReward) > maxSupplyForEra && rewardEra < 31)
      {
        rewardEra = rewardEra + 1;
        currentMiningReward = getMiningReward() ;
      }

      //set the next minted supply at which the era will change
      //total supply is 2100000000000000  because of 8 decimal places
      maxSupplyForEra = totalSupply - (totalSupply / ( 2**(rewardEra + 1)));

      epochCount = epochCount + 1;

      //every so often, readjust difficulty. Dont readjust when deploying
      if(epochCount % _BLOCKS_PER_READJUSTMENT == 0)
      {
        uint ethBlocksSinceLastDifficultyPeriod = block.number - latestDifficultyPeriodStarted;

        _reAdjustDifficulty(ethBlocksSinceLastDifficultyPeriod);
      }


      //make the latest ethereum block hash a part of the next challenge for PoW to prevent pre-mining future blocks
     challengeNumber = blockhash(block.number - 1);      



    }




    //https://en.bitcoin.it/wiki/Difficulty#What_is_the_formula_for_difficulty.3F
    //as of 2017 the bitcoin difficulty was up to 17 zeroes, it was only 8 in the early days

    //readjust the target by 5 percent
    function _reAdjustDifficulty(uint ethBlocksSinceLastDifficultyPeriod) internal {
 
        //assume 360 ethereum blocks per hour

        //target miners to spend 10 minutes to mine each 'block', about 60 ethereum blocks = one mining epoch
        
        uint targetEthBlocksPerDiffPeriod = _BLOCKS_PER_READJUSTMENT * 60; //should be 60 times slower than ethereum

        //if there were less eth blocks passed in time than expected
         if( ethBlocksSinceLastDifficultyPeriod < targetEthBlocksPerDiffPeriod )
        {
          uint excess_block_pct = (targetEthBlocksPerDiffPeriod * (100)) / ( ethBlocksSinceLastDifficultyPeriod );

          uint excess_block_pct_extra = (excess_block_pct - 100).limitLessThan(1000);
          // If there were 5% more blocks mined than expected then this is 5.  If there were 100% more blocks mined than expected then this is 100.

          //make it harder
          miningTarget = miningTarget - ((miningTarget / 2000) * excess_block_pct_extra);   //by up to 50 %
        }else{
          uint shortage_block_pct = (ethBlocksSinceLastDifficultyPeriod * (100)) / ( targetEthBlocksPerDiffPeriod );

          uint shortage_block_pct_extra = (shortage_block_pct - 100).limitLessThan(1000); //always between 0 and 1000

          //make it easier
          miningTarget = miningTarget + ((miningTarget / 2000) * shortage_block_pct_extra);   //by up to 50 %
        }



        latestDifficultyPeriodStarted = block.number;

        if(miningTarget < _MINIMUM_TARGET) //very difficult
        {
          miningTarget = _MINIMUM_TARGET;
        }

        if(miningTarget > _MAXIMUM_TARGET) //very easy
        {
          miningTarget = _MAXIMUM_TARGET;
        }
    }


    //this is a recent ethereum block hash, used to prevent pre-mining future blocks
    function getChallengeNumber() public view returns (bytes32) {
        return challengeNumber;
    }

    //the number of zeroes the digest of the PoW solution requires.  Auto adjusts
     function getMiningDifficulty() public view returns (uint) {
        return _MAXIMUM_TARGET / (miningTarget);
    }

    function getMiningTarget() public view returns (uint) {
       return miningTarget;
   }


    function minedSupply() public view returns (uint) {

        return tokensMinted;

    }


    //21m coins total
    //reward begins at 50 and is cut in half every reward era (as tokens are mined)
    function getMiningReward() public view returns (uint) {
        //once we get half way thru the coins, only get 25 per block

         //every reward era, the reward amount halves.

         return (50 * 10**uint(decimals) ) / ( 2**rewardEra ) ;

    }

    //help debug mining software
    function getMintDigest(uint256 nonce, address minter, bytes32 challenge_digest, bytes32 challenge_number) public view returns (bytes32 digesttest) {

      

        bytes32 digest  = keccak256(abi.encodePacked(challenge_number, minter, nonce ));

        return digest;

      }

        //help debug mining software
      function checkMintSolution(uint256 nonce, address minter, bytes32 challenge_digest, bytes32 challenge_number, uint testTarget) public view returns (bool success) {

          bytes32 digest  = keccak256(abi.encodePacked(challenge_number, minter, nonce ));
        
          if(uint256(digest) > testTarget) revert();

          return (digest == challenge_digest);

        }

   


  
  /**
     * @notice Update allowance with a signed permit
     * @param owner       Token owner's address (Authorizer)
     * @param spender     Spender's address
     * @param value       Amount of allowance
     * @param deadline    Expiration time, seconds since the epoch
     * @param v           v of the signature
     * @param r           r of the signature
     * @param s           s of the signature
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        _permit(owner, spender, value, deadline, v, r, s);
    }

      
  


    // ------------------------------------------------------------------------

    // Don't accept ETH

    // ------------------------------------------------------------------------

      receive() external payable virtual {

        revert();

    }


 
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epochCount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"newChallengeNumber","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BLOCKS_PER_READJUSTMENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_MAXIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_MINIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"challengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"bytes32","name":"challenge_number","type":"bytes32"},{"internalType":"uint256","name":"testTarget","type":"uint256"}],"name":"checkMintSolution","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMiningReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChallengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningDifficulty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"bytes32","name":"challenge_number","type":"bytes32"}],"name":"getMintDigest","outputs":[{"internalType":"bytes32","name":"digesttest","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardEthBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestDifficultyPeriodStarted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyForEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"minter","type":"address"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610400600a5562010000600b557d040000000000000000000000000000000000000000000000000000000000600c5534801561003e575f80fd5b506040518060400160405280600581526020017f4d454f57570000000000000000000000000000000000000000000000000000008152506040518060400160405280600b81526020017f486173684b697474656e73000000000000000000000000000000000000000000815250600882600190816100bc919061079c565b5081600290816100cc919061079c565b508060035f6101000a81548160ff021916908360ff1602179055505050506101b7600280546100fa906105c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610126906105c6565b80156101715780601f1061014857610100808354040283529160200191610171565b820191905f5260205f20905b81548152906001019060200180831161015457829003601f168201915b50505050506040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525061026f60201b60201c565b5f8190555060035f9054906101000a900460ff1660ff16600a6101da91906109c7565b6301406f406101e99190610a11565b6006819055505f6015819055505f60108190555061020b6102da60201b60201c565b600f8190555060016010546102209190610a52565b600261022c91906109c7565b6006546102399190610ab2565b6006546102469190610ae2565b601181905550600c54600d819055504360088190555061026a61032360201b60201c565b610c35565b5f804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8480519060200120848051906020012083306040516020016102bb959493929190610bb4565b6040516020818303038152906040528051906020012091505092915050565b5f60105460026102ea91906109c7565b60035f9054906101000a900460ff1660ff16600a61030891906109c7565b60326103149190610a11565b61031e9190610ab2565b905090565b601154600f546015546103369190610a52565b1180156103455750601f601054105b156103745760016010546103599190610a52565b60108190555061036d6102da60201b60201c565b600f819055505b60016010546103839190610a52565b600261038f91906109c7565b60065461039c9190610ab2565b6006546103a99190610ae2565b60118190555060016009546103be9190610a52565b6009819055505f600a546009546103d59190610c05565b036103fc575f600854436103e99190610ae2565b90506103fa8161041260201b60201c565b505b6001436104099190610ae2565b40600e81905550565b5f603c600a546104229190610a11565b9050808210156104a0575f8260648361043b9190610a11565b6104459190610ab2565b90505f6104696103e860648461045b9190610ae2565b61054760201b90919060201c565b9050806107d0600d5461047c9190610ab2565b6104869190610a11565b600d546104939190610ae2565b600d819055505050610510565b5f816064846104af9190610a11565b6104b99190610ab2565b90505f6104dd6103e86064846104cf9190610ae2565b61054760201b90919060201c565b9050806107d0600d546104f09190610ab2565b6104fa9190610a11565b600d546105079190610a52565b600d8190555050505b43600881905550600b54600d54101561052d57600b54600d819055505b600c54600d54111561054357600c54600d819055505b5050565b5f818311156105585781905061055c565b8290505b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806105dd57607f821691505b6020821081036105f0576105ef610599565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610617565b61065c8683610617565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6106a061069b61069684610674565b61067d565b610674565b9050919050565b5f819050919050565b6106b983610686565b6106cd6106c5826106a7565b848454610623565b825550505050565b5f90565b6106e16106d5565b6106ec8184846106b0565b505050565b5b8181101561070f576107045f826106d9565b6001810190506106f2565b5050565b601f82111561075457610725816105f6565b61072e84610608565b8101602085101561073d578190505b61075161074985610608565b8301826106f1565b50505b505050565b5f82821c905092915050565b5f6107745f1984600802610759565b1980831691505092915050565b5f61078c8383610765565b9150826002028217905092915050565b6107a582610562565b67ffffffffffffffff8111156107be576107bd61056c565b5b6107c882546105c6565b6107d3828285610713565b5f60209050601f831160018114610804575f84156107f2578287015190505b6107fc8582610781565b865550610863565b601f198416610812866105f6565b5f5b8281101561083957848901518255600182019150602085019450602081019050610814565b868310156108565784890151610852601f891682610765565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156108ed578086048111156108c9576108c861086b565b5b60018516156108d85780820291505b80810290506108e685610898565b94506108ad565b94509492505050565b5f8261090557600190506109c0565b81610912575f90506109c0565b8160018114610928576002811461093257610961565b60019150506109c0565b60ff8411156109445761094361086b565b5b8360020a91508482111561095b5761095a61086b565b5b506109c0565b5060208310610133831016604e8410600b84101617156109965782820a9050838111156109915761099061086b565b5b6109c0565b6109a384848460016108a4565b925090508184048111156109ba576109b961086b565b5b81810290505b9392505050565b5f6109d182610674565b91506109dc83610674565b9250610a097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846108f6565b905092915050565b5f610a1b82610674565b9150610a2683610674565b9250828202610a3481610674565b91508282048414831517610a4b57610a4a61086b565b5b5092915050565b5f610a5c82610674565b9150610a6783610674565b9250828201905080821115610a7f57610a7e61086b565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610abc82610674565b9150610ac783610674565b925082610ad757610ad6610a85565b5b828204905092915050565b5f610aec82610674565b9150610af783610674565b9250828203905081811115610b0f57610b0e61086b565b5b92915050565b5f819050919050565b5f610b38610b33610b2e84610b15565b61067d565b610674565b9050919050565b610b4881610b1e565b82525050565b5f819050919050565b610b6081610b4e565b82525050565b610b6f81610674565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b9e82610b75565b9050919050565b610bae81610b94565b82525050565b5f60a082019050610bc75f830188610b3f565b610bd46020830187610b57565b610be16040830186610b57565b610bee6060830185610b66565b610bfb6080830184610ba5565b9695505050505050565b5f610c0f82610674565b9150610c1a83610674565b925082610c2a57610c29610a85565b5b828206905092915050565b61257e80610c425f395ff3fe608060405260043610610212575f3560e01c80636fd396d611610117578063b5ade81b1161009f578063caa7a1581161006e578063caa7a158146107d7578063cb9ae70714610801578063d505accf1461082b578063dc6e9cf914610853578063dd62ed3e1461087d5761021b565b8063b5ade81b1461070b578063b723b34e14610735578063bafedcaa14610771578063bb6b888d1461079b5761021b565b806387a2a9d6116100e657806387a2a9d6146106275780638a769d35146106515780638ae0368b1461067b57806395d89b41146106a5578063a9059cbb146106cf5761021b565b80636fd396d61461055b57806370a08231146105855780637ecebe00146105c1578063829965cc146105fd5761021b565b8063313ce5671161019a5780634ef37628116101695780634ef37628146104775780634fa972e1146104a15780636386d2ac146104cb5780636b05e103146104f55780636de9f32b146105315761021b565b8063313ce567146103cf57806332e99708146103f95780633644e51514610423578063490203a71461044d5761021b565b80631801fbe5116101e15780631801fbe5146102d957806318160ddd1461031557806323b872dd1461033f5780632d38bf7a1461037b57806330adf81f146103a55761021b565b806306fdde031461021f578063095ea7b314610249578063163aa00d1461028557806317da485f146102af5761021b565b3661021b575f80fd5b5f80fd5b34801561022a575f80fd5b506102336108b9565b604051610240919061187c565b60405180910390f35b348015610254575f80fd5b5061026f600480360381019061026a919061192d565b610945565b60405161027c9190611985565b60405180910390f35b348015610290575f80fd5b50610299610959565b6040516102a691906119ad565b60405180910390f35b3480156102ba575f80fd5b506102c361095f565b6040516102d091906119ad565b60405180910390f35b3480156102e4575f80fd5b506102ff60048036038101906102fa91906119f9565b610975565b60405161030c9190611985565b60405180910390f35b348015610320575f80fd5b50610329610988565b60405161033691906119ad565b60405180910390f35b34801561034a575f80fd5b5061036560048036038101906103609190611a37565b61098e565b6040516103729190611985565b60405180910390f35b348015610386575f80fd5b5061038f610aa3565b60405161039c91906119ad565b60405180910390f35b3480156103b0575f80fd5b506103b9610aa9565b6040516103c69190611a96565b60405180910390f35b3480156103da575f80fd5b506103e3610acf565b6040516103f09190611aca565b60405180910390f35b348015610404575f80fd5b5061040d610ae1565b60405161041a91906119ad565b60405180910390f35b34801561042e575f80fd5b50610437610aea565b6040516104449190611a96565b60405180910390f35b348015610458575f80fd5b50610461610aef565b60405161046e91906119ad565b60405180910390f35b348015610482575f80fd5b5061048b610b38565b6040516104989190611a96565b60405180910390f35b3480156104ac575f80fd5b506104b5610b41565b6040516104c291906119ad565b60405180910390f35b3480156104d6575f80fd5b506104df610b47565b6040516104ec91906119ad565b60405180910390f35b348015610500575f80fd5b5061051b60048036038101906105169190611ae3565b610b50565b6040516105289190611985565b60405180910390f35b34801561053c575f80fd5b50610545610b9c565b60405161055291906119ad565b60405180910390f35b348015610566575f80fd5b5061056f610ba2565b60405161057c9190611b69565b60405180910390f35b348015610590575f80fd5b506105ab60048036038101906105a69190611b82565b610bc7565b6040516105b891906119ad565b60405180910390f35b3480156105cc575f80fd5b506105e760048036038101906105e29190611b82565b610c0d565b6040516105f491906119ad565b60405180910390f35b348015610608575f80fd5b50610611610c53565b60405161061e91906119ad565b60405180910390f35b348015610632575f80fd5b5061063b610c59565b60405161064891906119ad565b60405180910390f35b34801561065c575f80fd5b50610665610c5f565b60405161067291906119ad565b60405180910390f35b348015610686575f80fd5b5061068f610c65565b60405161069c9190611a96565b60405180910390f35b3480156106b0575f80fd5b506106b9610c6b565b6040516106c6919061187c565b60405180910390f35b3480156106da575f80fd5b506106f560048036038101906106f0919061192d565b610cf7565b6040516107029190611985565b60405180910390f35b348015610716575f80fd5b5061071f610d0b565b60405161072c91906119ad565b60405180910390f35b348015610740575f80fd5b5061075b60048036038101906107569190611bad565b610d11565b6040516107689190611985565b60405180910390f35b34801561077c575f80fd5b50610785610f33565b60405161079291906119ad565b60405180910390f35b3480156107a6575f80fd5b506107c160048036038101906107bc9190611beb565b610f39565b6040516107ce9190611a96565b60405180910390f35b3480156107e2575f80fd5b506107eb610f74565b6040516107f891906119ad565b60405180910390f35b34801561080c575f80fd5b50610815610f7a565b60405161082291906119ad565b60405180910390f35b348015610836575f80fd5b50610851600480360381019061084c9190611c79565b610f80565b005b34801561085e575f80fd5b50610867610f98565b60405161087491906119ad565b60405180910390f35b348015610888575f80fd5b506108a3600480360381019061089e9190611d16565b610f9e565b6040516108b091906119ad565b60405180910390f35b600280546108c690611d81565b80601f01602080910402602001604051908101604052809291908181526020018280546108f290611d81565b801561093d5780601f106109145761010080835404028352916020019161093d565b820191905f5260205f20905b81548152906001019060200180831161092057829003601f168201915b505050505081565b5f610951338484611020565b905092915050565b60145481565b5f600d54600c546109709190611e0b565b905090565b5f6109808333610d11565b905092915050565b60065481565b5f8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a139190611e3b565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610a9a84848461110e565b90509392505050565b60105481565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c95f1b81565b60035f9054906101000a900460ff1681565b5f600d54905090565b5f5481565b5f6010546002610aff9190611f9d565b60035f9054906101000a900460ff1660ff16600a610b1d9190611f9d565b6032610b299190611fe7565b610b339190611e0b565b905090565b5f600e54905090565b60115481565b5f601554905090565b5f80838688604051602001610b67939291906120ad565b60405160208183030381529060405280519060200120905082815f1c1115610b8d575f80fd5b84811491505095945050505050565b60155481565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60095481565b600c5481565b600d5481565b600e5481565b60018054610c7890611d81565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca490611d81565b8015610cef5780601f10610cc657610100808354040283529160200191610cef565b820191905f5260205f20905b815481529060010190602001808311610cd257829003601f168201915b505050505081565b5f610d0333848461110e565b905092915050565b600a5481565b5f80600e548385604051602001610d2a939291906120ad565b604051602081830303815290604052805190602001209050600d54815f1c1115610d52575f80fd5b4360145403610d5f575f80fd5b600f5460045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610daa91906120e9565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f54604051610e4a91906119ad565b60405180910390a3600f54601554610e6291906120e9565b6015819055506011546015541115610e78575f80fd5b8260125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5460138190555043601481905550610ed0611293565b8273ffffffffffffffffffffffffffffffffffffffff167fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d600f54600954600e54604051610f209392919061211c565b60405180910390a2600191505092915050565b60135481565b5f80828587604051602001610f50939291906120ad565b60405160208183030381529060405280519060200120905080915050949350505050565b600f5481565b60085481565b610f8f87878787878787611376565b50505050505050565b600b5481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110fb91906119ad565b60405180910390a3600190509392505050565b5f8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111589190611e3b565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111e291906120e9565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161128091906119ad565b60405180910390a3600190509392505050565b601154600f546015546112a691906120e9565b1180156112b55750601f601054105b156112de5760016010546112c991906120e9565b6010819055506112d7610aef565b600f819055505b60016010546112ed91906120e9565b60026112f99190611f9d565b6006546113069190611e0b565b6006546113139190611e3b565b601181905550600160095461132891906120e9565b6009819055505f600a5460095461133f9190612151565b03611360575f600854436113539190611e3b565b905061135e816114e9565b505b60014361136d9190611e3b565b40600e81905550565b428410156113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906121cb565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c95f1b88888860075f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061142d906121e9565b919050558960405160200161144796959493929190612230565b60405160208183030381529060405290508773ffffffffffffffffffffffffffffffffffffffff1661147d5f548686868661161e565b73ffffffffffffffffffffffffffffffffffffffff16146114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca906122d9565b60405180910390fd5b6114de888888611020565b505050505050505050565b5f603c600a546114f99190611fe7565b905080821015611577575f826064836115129190611fe7565b61151c9190611e0b565b90505f6115406103e86064846115329190611e3b565b61166a90919063ffffffff16565b9050806107d0600d546115539190611e0b565b61155d9190611fe7565b600d5461156a9190611e3b565b600d8190555050506115e7565b5f816064846115869190611fe7565b6115909190611e0b565b90505f6115b46103e86064846115a69190611e3b565b61166a90919063ffffffff16565b9050806107d0600d546115c79190611e0b565b6115d19190611fe7565b600d546115de91906120e9565b600d8190555050505b43600881905550600b54600d54101561160457600b54600d819055505b600c54600d54111561161a57600c54600d819055505b5050565b5f8086838051906020012060405160200161163a92919061234b565b60405160208183030381529060405280519060200120905061165e81878787611685565b91505095945050505050565b5f8183111561167b5781905061167f565b8290505b92915050565b5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0825f1c11156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906123f1565b60405180910390fd5b601b8460ff16141580156117035750601c8460ff1614155b15611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9061247f565b60405180910390fd5b5f6001868686866040515f8152602001604052604051611766949392919061249d565b6020604051602081039080840390855afa158015611786573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f79061252a565b60405180910390fd5b80915050949350505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61184e8261180c565b6118588185611816565b9350611868818560208601611826565b61187181611834565b840191505092915050565b5f6020820190508181035f8301526118948184611844565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118c9826118a0565b9050919050565b6118d9816118bf565b81146118e3575f80fd5b50565b5f813590506118f4816118d0565b92915050565b5f819050919050565b61190c816118fa565b8114611916575f80fd5b50565b5f8135905061192781611903565b92915050565b5f80604083850312156119435761194261189c565b5b5f611950858286016118e6565b925050602061196185828601611919565b9150509250929050565b5f8115159050919050565b61197f8161196b565b82525050565b5f6020820190506119985f830184611976565b92915050565b6119a7816118fa565b82525050565b5f6020820190506119c05f83018461199e565b92915050565b5f819050919050565b6119d8816119c6565b81146119e2575f80fd5b50565b5f813590506119f3816119cf565b92915050565b5f8060408385031215611a0f57611a0e61189c565b5b5f611a1c85828601611919565b9250506020611a2d858286016119e5565b9150509250929050565b5f805f60608486031215611a4e57611a4d61189c565b5b5f611a5b868287016118e6565b9350506020611a6c868287016118e6565b9250506040611a7d86828701611919565b9150509250925092565b611a90816119c6565b82525050565b5f602082019050611aa95f830184611a87565b92915050565b5f60ff82169050919050565b611ac481611aaf565b82525050565b5f602082019050611add5f830184611abb565b92915050565b5f805f805f60a08688031215611afc57611afb61189c565b5b5f611b0988828901611919565b9550506020611b1a888289016118e6565b9450506040611b2b888289016119e5565b9350506060611b3c888289016119e5565b9250506080611b4d88828901611919565b9150509295509295909350565b611b63816118bf565b82525050565b5f602082019050611b7c5f830184611b5a565b92915050565b5f60208284031215611b9757611b9661189c565b5b5f611ba4848285016118e6565b91505092915050565b5f8060408385031215611bc357611bc261189c565b5b5f611bd085828601611919565b9250506020611be1858286016118e6565b9150509250929050565b5f805f8060808587031215611c0357611c0261189c565b5b5f611c1087828801611919565b9450506020611c21878288016118e6565b9350506040611c32878288016119e5565b9250506060611c43878288016119e5565b91505092959194509250565b611c5881611aaf565b8114611c62575f80fd5b50565b5f81359050611c7381611c4f565b92915050565b5f805f805f805f60e0888a031215611c9457611c9361189c565b5b5f611ca18a828b016118e6565b9750506020611cb28a828b016118e6565b9650506040611cc38a828b01611919565b9550506060611cd48a828b01611919565b9450506080611ce58a828b01611c65565b93505060a0611cf68a828b016119e5565b92505060c0611d078a828b016119e5565b91505092959891949750929550565b5f8060408385031215611d2c57611d2b61189c565b5b5f611d39858286016118e6565b9250506020611d4a858286016118e6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611d9857607f821691505b602082108103611dab57611daa611d54565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e15826118fa565b9150611e20836118fa565b925082611e3057611e2f611db1565b5b828204905092915050565b5f611e45826118fa565b9150611e50836118fa565b9250828203905081811115611e6857611e67611dde565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115611ec357808604811115611e9f57611e9e611dde565b5b6001851615611eae5780820291505b8081029050611ebc85611e6e565b9450611e83565b94509492505050565b5f82611edb5760019050611f96565b81611ee8575f9050611f96565b8160018114611efe5760028114611f0857611f37565b6001915050611f96565b60ff841115611f1a57611f19611dde565b5b8360020a915084821115611f3157611f30611dde565b5b50611f96565b5060208310610133831016604e8410600b8410161715611f6c5782820a905083811115611f6757611f66611dde565b5b611f96565b611f798484846001611e7a565b92509050818404811115611f9057611f8f611dde565b5b81810290505b9392505050565b5f611fa7826118fa565b9150611fb2836118fa565b9250611fdf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611ecc565b905092915050565b5f611ff1826118fa565b9150611ffc836118fa565b925082820261200a816118fa565b9150828204841483151761202157612020611dde565b5b5092915050565b5f819050919050565b61204261203d826119c6565b612028565b82525050565b5f8160601b9050919050565b5f61205e82612048565b9050919050565b5f61206f82612054565b9050919050565b612087612082826118bf565b612065565b82525050565b5f819050919050565b6120a76120a2826118fa565b61208d565b82525050565b5f6120b88286612031565b6020820191506120c88285612076565b6014820191506120d88284612096565b602082019150819050949350505050565b5f6120f3826118fa565b91506120fe836118fa565b925082820190508082111561211657612115611dde565b5b92915050565b5f60608201905061212f5f83018661199e565b61213c602083018561199e565b6121496040830184611a87565b949350505050565b5f61215b826118fa565b9150612166836118fa565b92508261217657612175611db1565b5b828206905092915050565b7f5065726d697420697320657870697265640000000000000000000000000000005f82015250565b5f6121b5601183611816565b91506121c082612181565b602082019050919050565b5f6020820190508181035f8301526121e2816121a9565b9050919050565b5f6121f3826118fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361222557612224611dde565b5b600182019050919050565b5f60c0820190506122435f830189611a87565b6122506020830188611b5a565b61225d6040830187611b5a565b61226a606083018661199e565b612277608083018561199e565b61228460a083018461199e565b979650505050505050565b7f454950323631323a20696e76616c6964207369676e61747572650000000000005f82015250565b5f6122c3601a83611816565b91506122ce8261228f565b602082019050919050565b5f6020820190508181035f8301526122f0816122b7565b9050919050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f6123356002836122f7565b915061234082612301565b600282019050919050565b5f61235582612329565b91506123618285612031565b6020820191506123718284612031565b6020820191508190509392505050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265202773275f8201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b5f6123db602683611816565b91506123e682612381565b604082019050919050565b5f6020820190508181035f830152612408816123cf565b9050919050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265202776275f8201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b5f612469602683611816565b91506124748261240f565b604082019050919050565b5f6020820190508181035f8301526124968161245d565b9050919050565b5f6080820190506124b05f830187611a87565b6124bd6020830186611abb565b6124ca6040830185611a87565b6124d76060830184611a87565b95945050505050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265000000005f82015250565b5f612514601c83611816565b915061251f826124e0565b602082019050919050565b5f6020820190508181035f83015261254181612508565b905091905056fea264697066735822122079fd5812cd026289b10138c798028719c694cc1ed79fad95434cf4ed93c323a664736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610212575f3560e01c80636fd396d611610117578063b5ade81b1161009f578063caa7a1581161006e578063caa7a158146107d7578063cb9ae70714610801578063d505accf1461082b578063dc6e9cf914610853578063dd62ed3e1461087d5761021b565b8063b5ade81b1461070b578063b723b34e14610735578063bafedcaa14610771578063bb6b888d1461079b5761021b565b806387a2a9d6116100e657806387a2a9d6146106275780638a769d35146106515780638ae0368b1461067b57806395d89b41146106a5578063a9059cbb146106cf5761021b565b80636fd396d61461055b57806370a08231146105855780637ecebe00146105c1578063829965cc146105fd5761021b565b8063313ce5671161019a5780634ef37628116101695780634ef37628146104775780634fa972e1146104a15780636386d2ac146104cb5780636b05e103146104f55780636de9f32b146105315761021b565b8063313ce567146103cf57806332e99708146103f95780633644e51514610423578063490203a71461044d5761021b565b80631801fbe5116101e15780631801fbe5146102d957806318160ddd1461031557806323b872dd1461033f5780632d38bf7a1461037b57806330adf81f146103a55761021b565b806306fdde031461021f578063095ea7b314610249578063163aa00d1461028557806317da485f146102af5761021b565b3661021b575f80fd5b5f80fd5b34801561022a575f80fd5b506102336108b9565b604051610240919061187c565b60405180910390f35b348015610254575f80fd5b5061026f600480360381019061026a919061192d565b610945565b60405161027c9190611985565b60405180910390f35b348015610290575f80fd5b50610299610959565b6040516102a691906119ad565b60405180910390f35b3480156102ba575f80fd5b506102c361095f565b6040516102d091906119ad565b60405180910390f35b3480156102e4575f80fd5b506102ff60048036038101906102fa91906119f9565b610975565b60405161030c9190611985565b60405180910390f35b348015610320575f80fd5b50610329610988565b60405161033691906119ad565b60405180910390f35b34801561034a575f80fd5b5061036560048036038101906103609190611a37565b61098e565b6040516103729190611985565b60405180910390f35b348015610386575f80fd5b5061038f610aa3565b60405161039c91906119ad565b60405180910390f35b3480156103b0575f80fd5b506103b9610aa9565b6040516103c69190611a96565b60405180910390f35b3480156103da575f80fd5b506103e3610acf565b6040516103f09190611aca565b60405180910390f35b348015610404575f80fd5b5061040d610ae1565b60405161041a91906119ad565b60405180910390f35b34801561042e575f80fd5b50610437610aea565b6040516104449190611a96565b60405180910390f35b348015610458575f80fd5b50610461610aef565b60405161046e91906119ad565b60405180910390f35b348015610482575f80fd5b5061048b610b38565b6040516104989190611a96565b60405180910390f35b3480156104ac575f80fd5b506104b5610b41565b6040516104c291906119ad565b60405180910390f35b3480156104d6575f80fd5b506104df610b47565b6040516104ec91906119ad565b60405180910390f35b348015610500575f80fd5b5061051b60048036038101906105169190611ae3565b610b50565b6040516105289190611985565b60405180910390f35b34801561053c575f80fd5b50610545610b9c565b60405161055291906119ad565b60405180910390f35b348015610566575f80fd5b5061056f610ba2565b60405161057c9190611b69565b60405180910390f35b348015610590575f80fd5b506105ab60048036038101906105a69190611b82565b610bc7565b6040516105b891906119ad565b60405180910390f35b3480156105cc575f80fd5b506105e760048036038101906105e29190611b82565b610c0d565b6040516105f491906119ad565b60405180910390f35b348015610608575f80fd5b50610611610c53565b60405161061e91906119ad565b60405180910390f35b348015610632575f80fd5b5061063b610c59565b60405161064891906119ad565b60405180910390f35b34801561065c575f80fd5b50610665610c5f565b60405161067291906119ad565b60405180910390f35b348015610686575f80fd5b5061068f610c65565b60405161069c9190611a96565b60405180910390f35b3480156106b0575f80fd5b506106b9610c6b565b6040516106c6919061187c565b60405180910390f35b3480156106da575f80fd5b506106f560048036038101906106f0919061192d565b610cf7565b6040516107029190611985565b60405180910390f35b348015610716575f80fd5b5061071f610d0b565b60405161072c91906119ad565b60405180910390f35b348015610740575f80fd5b5061075b60048036038101906107569190611bad565b610d11565b6040516107689190611985565b60405180910390f35b34801561077c575f80fd5b50610785610f33565b60405161079291906119ad565b60405180910390f35b3480156107a6575f80fd5b506107c160048036038101906107bc9190611beb565b610f39565b6040516107ce9190611a96565b60405180910390f35b3480156107e2575f80fd5b506107eb610f74565b6040516107f891906119ad565b60405180910390f35b34801561080c575f80fd5b50610815610f7a565b60405161082291906119ad565b60405180910390f35b348015610836575f80fd5b50610851600480360381019061084c9190611c79565b610f80565b005b34801561085e575f80fd5b50610867610f98565b60405161087491906119ad565b60405180910390f35b348015610888575f80fd5b506108a3600480360381019061089e9190611d16565b610f9e565b6040516108b091906119ad565b60405180910390f35b600280546108c690611d81565b80601f01602080910402602001604051908101604052809291908181526020018280546108f290611d81565b801561093d5780601f106109145761010080835404028352916020019161093d565b820191905f5260205f20905b81548152906001019060200180831161092057829003601f168201915b505050505081565b5f610951338484611020565b905092915050565b60145481565b5f600d54600c546109709190611e0b565b905090565b5f6109808333610d11565b905092915050565b60065481565b5f8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a139190611e3b565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610a9a84848461110e565b90509392505050565b60105481565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c95f1b81565b60035f9054906101000a900460ff1681565b5f600d54905090565b5f5481565b5f6010546002610aff9190611f9d565b60035f9054906101000a900460ff1660ff16600a610b1d9190611f9d565b6032610b299190611fe7565b610b339190611e0b565b905090565b5f600e54905090565b60115481565b5f601554905090565b5f80838688604051602001610b67939291906120ad565b60405160208183030381529060405280519060200120905082815f1c1115610b8d575f80fd5b84811491505095945050505050565b60155481565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60095481565b600c5481565b600d5481565b600e5481565b60018054610c7890611d81565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca490611d81565b8015610cef5780601f10610cc657610100808354040283529160200191610cef565b820191905f5260205f20905b815481529060010190602001808311610cd257829003601f168201915b505050505081565b5f610d0333848461110e565b905092915050565b600a5481565b5f80600e548385604051602001610d2a939291906120ad565b604051602081830303815290604052805190602001209050600d54815f1c1115610d52575f80fd5b4360145403610d5f575f80fd5b600f5460045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610daa91906120e9565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f54604051610e4a91906119ad565b60405180910390a3600f54601554610e6291906120e9565b6015819055506011546015541115610e78575f80fd5b8260125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5460138190555043601481905550610ed0611293565b8273ffffffffffffffffffffffffffffffffffffffff167fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d600f54600954600e54604051610f209392919061211c565b60405180910390a2600191505092915050565b60135481565b5f80828587604051602001610f50939291906120ad565b60405160208183030381529060405280519060200120905080915050949350505050565b600f5481565b60085481565b610f8f87878787878787611376565b50505050505050565b600b5481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110fb91906119ad565b60405180910390a3600190509392505050565b5f8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111589190611e3b565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111e291906120e9565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161128091906119ad565b60405180910390a3600190509392505050565b601154600f546015546112a691906120e9565b1180156112b55750601f601054105b156112de5760016010546112c991906120e9565b6010819055506112d7610aef565b600f819055505b60016010546112ed91906120e9565b60026112f99190611f9d565b6006546113069190611e0b565b6006546113139190611e3b565b601181905550600160095461132891906120e9565b6009819055505f600a5460095461133f9190612151565b03611360575f600854436113539190611e3b565b905061135e816114e9565b505b60014361136d9190611e3b565b40600e81905550565b428410156113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906121cb565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c95f1b88888860075f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061142d906121e9565b919050558960405160200161144796959493929190612230565b60405160208183030381529060405290508773ffffffffffffffffffffffffffffffffffffffff1661147d5f548686868661161e565b73ffffffffffffffffffffffffffffffffffffffff16146114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca906122d9565b60405180910390fd5b6114de888888611020565b505050505050505050565b5f603c600a546114f99190611fe7565b905080821015611577575f826064836115129190611fe7565b61151c9190611e0b565b90505f6115406103e86064846115329190611e3b565b61166a90919063ffffffff16565b9050806107d0600d546115539190611e0b565b61155d9190611fe7565b600d5461156a9190611e3b565b600d8190555050506115e7565b5f816064846115869190611fe7565b6115909190611e0b565b90505f6115b46103e86064846115a69190611e3b565b61166a90919063ffffffff16565b9050806107d0600d546115c79190611e0b565b6115d19190611fe7565b600d546115de91906120e9565b600d8190555050505b43600881905550600b54600d54101561160457600b54600d819055505b600c54600d54111561161a57600c54600d819055505b5050565b5f8086838051906020012060405160200161163a92919061234b565b60405160208183030381529060405280519060200120905061165e81878787611685565b91505095945050505050565b5f8183111561167b5781905061167f565b8290505b92915050565b5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0825f1c11156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906123f1565b60405180910390fd5b601b8460ff16141580156117035750601c8460ff1614155b15611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9061247f565b60405180910390fd5b5f6001868686866040515f8152602001604052604051611766949392919061249d565b6020604051602081039080840390855afa158015611786573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f79061252a565b60405180910390fd5b80915050949350505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61184e8261180c565b6118588185611816565b9350611868818560208601611826565b61187181611834565b840191505092915050565b5f6020820190508181035f8301526118948184611844565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118c9826118a0565b9050919050565b6118d9816118bf565b81146118e3575f80fd5b50565b5f813590506118f4816118d0565b92915050565b5f819050919050565b61190c816118fa565b8114611916575f80fd5b50565b5f8135905061192781611903565b92915050565b5f80604083850312156119435761194261189c565b5b5f611950858286016118e6565b925050602061196185828601611919565b9150509250929050565b5f8115159050919050565b61197f8161196b565b82525050565b5f6020820190506119985f830184611976565b92915050565b6119a7816118fa565b82525050565b5f6020820190506119c05f83018461199e565b92915050565b5f819050919050565b6119d8816119c6565b81146119e2575f80fd5b50565b5f813590506119f3816119cf565b92915050565b5f8060408385031215611a0f57611a0e61189c565b5b5f611a1c85828601611919565b9250506020611a2d858286016119e5565b9150509250929050565b5f805f60608486031215611a4e57611a4d61189c565b5b5f611a5b868287016118e6565b9350506020611a6c868287016118e6565b9250506040611a7d86828701611919565b9150509250925092565b611a90816119c6565b82525050565b5f602082019050611aa95f830184611a87565b92915050565b5f60ff82169050919050565b611ac481611aaf565b82525050565b5f602082019050611add5f830184611abb565b92915050565b5f805f805f60a08688031215611afc57611afb61189c565b5b5f611b0988828901611919565b9550506020611b1a888289016118e6565b9450506040611b2b888289016119e5565b9350506060611b3c888289016119e5565b9250506080611b4d88828901611919565b9150509295509295909350565b611b63816118bf565b82525050565b5f602082019050611b7c5f830184611b5a565b92915050565b5f60208284031215611b9757611b9661189c565b5b5f611ba4848285016118e6565b91505092915050565b5f8060408385031215611bc357611bc261189c565b5b5f611bd085828601611919565b9250506020611be1858286016118e6565b9150509250929050565b5f805f8060808587031215611c0357611c0261189c565b5b5f611c1087828801611919565b9450506020611c21878288016118e6565b9350506040611c32878288016119e5565b9250506060611c43878288016119e5565b91505092959194509250565b611c5881611aaf565b8114611c62575f80fd5b50565b5f81359050611c7381611c4f565b92915050565b5f805f805f805f60e0888a031215611c9457611c9361189c565b5b5f611ca18a828b016118e6565b9750506020611cb28a828b016118e6565b9650506040611cc38a828b01611919565b9550506060611cd48a828b01611919565b9450506080611ce58a828b01611c65565b93505060a0611cf68a828b016119e5565b92505060c0611d078a828b016119e5565b91505092959891949750929550565b5f8060408385031215611d2c57611d2b61189c565b5b5f611d39858286016118e6565b9250506020611d4a858286016118e6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611d9857607f821691505b602082108103611dab57611daa611d54565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e15826118fa565b9150611e20836118fa565b925082611e3057611e2f611db1565b5b828204905092915050565b5f611e45826118fa565b9150611e50836118fa565b9250828203905081811115611e6857611e67611dde565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115611ec357808604811115611e9f57611e9e611dde565b5b6001851615611eae5780820291505b8081029050611ebc85611e6e565b9450611e83565b94509492505050565b5f82611edb5760019050611f96565b81611ee8575f9050611f96565b8160018114611efe5760028114611f0857611f37565b6001915050611f96565b60ff841115611f1a57611f19611dde565b5b8360020a915084821115611f3157611f30611dde565b5b50611f96565b5060208310610133831016604e8410600b8410161715611f6c5782820a905083811115611f6757611f66611dde565b5b611f96565b611f798484846001611e7a565b92509050818404811115611f9057611f8f611dde565b5b81810290505b9392505050565b5f611fa7826118fa565b9150611fb2836118fa565b9250611fdf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611ecc565b905092915050565b5f611ff1826118fa565b9150611ffc836118fa565b925082820261200a816118fa565b9150828204841483151761202157612020611dde565b5b5092915050565b5f819050919050565b61204261203d826119c6565b612028565b82525050565b5f8160601b9050919050565b5f61205e82612048565b9050919050565b5f61206f82612054565b9050919050565b612087612082826118bf565b612065565b82525050565b5f819050919050565b6120a76120a2826118fa565b61208d565b82525050565b5f6120b88286612031565b6020820191506120c88285612076565b6014820191506120d88284612096565b602082019150819050949350505050565b5f6120f3826118fa565b91506120fe836118fa565b925082820190508082111561211657612115611dde565b5b92915050565b5f60608201905061212f5f83018661199e565b61213c602083018561199e565b6121496040830184611a87565b949350505050565b5f61215b826118fa565b9150612166836118fa565b92508261217657612175611db1565b5b828206905092915050565b7f5065726d697420697320657870697265640000000000000000000000000000005f82015250565b5f6121b5601183611816565b91506121c082612181565b602082019050919050565b5f6020820190508181035f8301526121e2816121a9565b9050919050565b5f6121f3826118fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361222557612224611dde565b5b600182019050919050565b5f60c0820190506122435f830189611a87565b6122506020830188611b5a565b61225d6040830187611b5a565b61226a606083018661199e565b612277608083018561199e565b61228460a083018461199e565b979650505050505050565b7f454950323631323a20696e76616c6964207369676e61747572650000000000005f82015250565b5f6122c3601a83611816565b91506122ce8261228f565b602082019050919050565b5f6020820190508181035f8301526122f0816122b7565b9050919050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f6123356002836122f7565b915061234082612301565b600282019050919050565b5f61235582612329565b91506123618285612031565b6020820191506123718284612031565b6020820191508190509392505050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265202773275f8201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b5f6123db602683611816565b91506123e682612381565b604082019050919050565b5f6020820190508181035f830152612408816123cf565b9050919050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265202776275f8201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b5f612469602683611816565b91506124748261240f565b604082019050919050565b5f6020820190508181035f8301526124968161245d565b9050919050565b5f6080820190506124b05f830187611a87565b6124bd6020830186611abb565b6124ca6040830185611a87565b6124d76060830184611a87565b95945050505050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265000000005f82015250565b5f612514601c83611816565b915061251f826124e0565b602082019050919050565b5f6020820190508181035f83015261254181612508565b905091905056fea264697066735822122079fd5812cd026289b10138c798028719c694cc1ed79fad95434cf4ed93c323a664736f6c634300081a0033

Deployed Bytecode Sourcemap

12624:9394:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21990:8;;;12624:9394;;;;1850:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3918:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13477:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19559:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14638:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2012:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4873:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13342:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10572:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1877:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19683:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8408:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19993:259;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19366:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13370:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19783:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20629:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13538:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13408:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2739:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10891:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12813:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13131:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13179:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13212:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1823:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3235:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12872:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14768:1190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13442:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20294:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13300:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12759:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21464:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12949:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5409:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1850:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3918:152::-;3990:12;4024:36;4033:10;4045:7;4053:6;4024:8;:36::i;:::-;4017:43;;3918:152;;;;:::o;13477:36::-;;;;:::o;19559:116::-;19611:4;19654:12;;19635:15;;:32;;;;:::i;:::-;19628:39;;19559:116;:::o;14638:122::-;14692:12;14726:24;14733:5;14739:10;14726:6;:24::i;:::-;14719:31;;14638:122;;;;:::o;2012:32::-;;;;:::o;4873:240::-;4959:12;5051:6;5022:7;:13;5030:4;5022:13;;;;;;;;;;;;;;;:25;5036:10;5022:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;4994:7;:13;5002:4;4994:13;;;;;;;;;;;;;;;:25;5008:10;4994:25;;;;;;;;;;;;;;;:64;;;;5078:25;5088:4;5093:2;5096:6;5078:9;:25::i;:::-;5071:32;;4873:240;;;;;:::o;13342:21::-;;;;:::o;10572:117::-;10623:66;10572:117;;;:::o;1877:21::-;;;;;;;;;;;;;:::o;19683:90::-;19731:4;19754:12;;19747:19;;19683:90;:::o;8408:31::-;;;;:::o;19993:259::-;20041:4;20230:9;;20227:1;:12;;;;:::i;:::-;20211:8;;;;;;;;;;;20206:14;;20202:2;:18;;;;:::i;:::-;20197:2;:23;;;;:::i;:::-;20196:45;;;;:::i;:::-;20189:52;;19993:259;:::o;19366:101::-;19417:7;19444:15;;19437:22;;19366:101;:::o;13370:27::-;;;;:::o;19783:92::-;19827:4;19853:12;;19846:19;;19783:92;:::o;20629:384::-;20777:12;20806:14;20851:16;20869:6;20877:5;20834:50;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20824:61;;;;;;20806:79;;20929:10;20919:6;20911:15;;:28;20908:41;;;20941:8;;;20908:41;20982:16;20972:6;:26;20964:35;;;20629:384;;;;;;;:::o;13538:24::-;;;;:::o;13408:27::-;;;;;;;;;;;;;:::o;2739:133::-;2808:12;2842:8;:20;2851:10;2842:20;;;;;;;;;;;;;;;;2835:27;;2739:133;;;:::o;10891:109::-;10945:7;10972:13;:20;10986:5;10972:20;;;;;;;;;;;;;;;;10965:27;;10891:109;;;:::o;12813:22::-;;;;:::o;13131:37::-;;;;:::o;13179:24::-;;;;:::o;13212:30::-;;;;:::o;1823:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3235:145::-;3303:12;3337:33;3347:10;3359:2;3363:6;3337:9;:33::i;:::-;3330:40;;3235:145;;;;:::o;12872:43::-;;;;:::o;14768:1190::-;14831:12;15014:14;15058:15;;15075:6;15083:5;15041:49;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15031:60;;;;;;15014:77;;15189:12;;15179:6;15171:15;;:30;15168:43;;;15203:8;;;15168:43;15308:12;15280:24;;:40;15272:49;;;;;;15373:19;;15353:8;:16;15362:6;15353:16;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;15334:8;:16;15343:6;15334:16;;;;;;;;;;;;;;;:59;;;;15433:6;15409:52;;15426:4;15409:52;;;15441:19;;15409:52;;;;;;:::i;:::-;;;;;;;;15504:19;;15489:12;;:34;;;;:::i;:::-;15474:12;:49;;;;15610:15;;15594:12;;:31;;15586:40;;;;;;15695:6;15680:12;;:21;;;;;;;;;;;;;;;;;;15731:19;;15712:16;:38;;;;15788:12;15761:24;:39;;;;15813:22;:20;:22::i;:::-;15858:6;15853:63;;;15866:19;;15887:10;;15899:15;;15853:63;;;;;;;;:::i;:::-;;;;;;;;15944:4;15937:11;;;14768:1190;;;;:::o;13442:28::-;;;;:::o;20294:287::-;20421:18;20464:14;20509:16;20527:6;20535:5;20492:50;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20482:61;;;;;;20464:79;;20563:6;20556:13;;;20294:287;;;;;;:::o;13300:31::-;;;;:::o;12759:41::-;;;;:::o;21464:259::-;21666:49;21674:5;21681:7;21690:5;21697:8;21707:1;21710;21713;21666:7;:49::i;:::-;21464:259;;;;;;;:::o;12949:36::-;;;;:::o;5409:160::-;5495:14;5531:7;:19;5539:10;5531:19;;;;;;;;;;;;;;;:28;5551:7;5531:28;;;;;;;;;;;;;;;;5524:35;;5409:160;;;;:::o;4078:233::-;4168:12;4221:6;4195:7;:14;4203:5;4195:14;;;;;;;;;;;;;;;:23;4210:7;4195:23;;;;;;;;;;;;;;;:32;;;;4261:7;4245:32;;4254:5;4245:32;;;4270:6;4245:32;;;;;;:::i;:::-;;;;;;;;4297:4;4290:11;;4078:233;;;;;:::o;2223:281::-;2308:12;2370:6;2352:8;:14;2361:4;2352:14;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;2335:8;:14;2344:4;2335:14;;;;;;;;;;;;;;;:42;;;;2421:6;2405:8;:12;2414:2;2405:12;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;2390:8;:12;2399:2;2390:12;;;;;;;;;;;;;;;:38;;;;2461:2;2446:26;;2455:4;2446:26;;;2465:6;2446:26;;;;;;:::i;:::-;;;;;;;;2492:4;2485:11;;2223:281;;;;;:::o;16008:1274::-;16381:15;;16358:19;;16342:12;;:36;;;;:::i;:::-;:54;:72;;;;;16412:2;16400:9;;:14;16342:72;16339:181;;;16458:1;16446:9;;:13;;;;:::i;:::-;16434:9;:25;;;;16492:17;:15;:17::i;:::-;16470:19;:39;;;;16339:181;16731:1;16719:9;;:13;;;;:::i;:::-;16715:1;:18;;;;:::i;:::-;16699:11;;:35;;;;:::i;:::-;16684:11;;:51;;;;:::i;:::-;16666:15;:69;;;;16772:1;16759:10;;:14;;;;:::i;:::-;16746:10;:27;;;;16903:1;16875:24;;16862:10;;:37;;;;:::i;:::-;:42;16859:229;;16924:39;16981:29;;16966:12;:44;;;;:::i;:::-;16924:86;;17023:55;17043:34;17023:19;:55::i;:::-;16913:175;16859:229;17260:1;17245:12;:16;;;;:::i;:::-;17235:27;17217:15;:45;;;;16008:1274::o;11443:661::-;11666:15;11654:8;:27;;11646:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11716:17;10623:66;11761:15;;11791:5;11811:7;11833:5;11853:13;:20;11867:5;11853:20;;;;;;;;;;;;;;;;:22;;;;;;;;;:::i;:::-;;;;;11890:8;11736:173;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11716:193;;11993:5;11942:56;;:47;11957:16;;11975:1;11978;11981;11984:4;11942:14;:47::i;:::-;:56;;;11920:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;12065:31;12074:5;12081:7;12090:5;12065:8;:31::i;:::-;;11635:469;11443:661;;;;;;;:::o;17515:1755::-;17778:33;17841:2;17814:24;;:29;;;;:::i;:::-;17778:65;;18010:28;17973:34;:65;17969:982;;;18063:21;18130:34;18120:3;18088:28;:36;;;;:::i;:::-;18087:79;;;;:::i;:::-;18063:103;;18181:27;18211:44;18250:4;18231:3;18212:16;:22;;;;:::i;:::-;18211:38;;:44;;;;:::i;:::-;18181:74;;18502:22;18494:4;18479:12;;:19;;;;:::i;:::-;18478:46;;;;:::i;:::-;18462:12;;:63;;;;:::i;:::-;18447:12;:78;;;;18050:505;;17969:982;;;18572:23;18647:28;18637:3;18599:34;:42;;;;:::i;:::-;18598:79;;;;:::i;:::-;18572:105;;18692:29;18724:46;18765:4;18746:3;18725:18;:24;;;;:::i;:::-;18724:40;;:46;;;;:::i;:::-;18692:78;;18896:24;18888:4;18873:12;;:19;;;;:::i;:::-;18872:48;;;;:::i;:::-;18856:12;;:65;;;;:::i;:::-;18841:12;:80;;;;18559:392;;17969:982;18999:12;18967:29;:44;;;;19042:15;;19027:12;;:30;19024:116;;;19113:15;;19098:12;:30;;;;19024:116;19170:15;;19155:12;;:30;19152:111;;;19236:15;;19221:12;:30;;;;19152:111;17594:1676;17515:1755;:::o;9840:449::-;10018:7;10038:14;10143:15;10187;10177:26;;;;;;10079:139;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10055:174;;;;;;10038:191;;10247:34;10265:6;10273:1;10276;10279;10247:17;:34::i;:::-;10240:41;;;9840:449;;;;;;;:::o;12209:132::-;12271:6;12299:1;12295;:5;12292:18;;;12309:1;12302:8;;;;12292:18;12330:1;12323:8;;12209:132;;;;;:::o;6726:1587::-;6856:7;7803:66;7785:1;7777:10;;:92;7759:197;;;7896:48;;;;;;;;;;:::i;:::-;;;;;;;;7759:197;7977:2;7972:1;:7;;;;:18;;;;;7988:2;7983:1;:7;;;;7972:18;7968:99;;;8007:48;;;;;;;;;;:::i;:::-;;;;;;;;7968:99;8164:14;8181:26;8191:6;8199:1;8202;8205;8181:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8164:43;;8244:1;8226:20;;:6;:20;;;8218:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;8299:6;8292:13;;;6726:1587;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:77::-;3728:7;3757:5;3746:16;;3691:77;;;:::o;3774:122::-;3847:24;3865:5;3847:24;:::i;:::-;3840:5;3837:35;3827:63;;3886:1;3883;3876:12;3827:63;3774:122;:::o;3902:139::-;3948:5;3986:6;3973:20;3964:29;;4002:33;4029:5;4002:33;:::i;:::-;3902:139;;;;:::o;4047:474::-;4115:6;4123;4172:2;4160:9;4151:7;4147:23;4143:32;4140:119;;;4178:79;;:::i;:::-;4140:119;4298:1;4323:53;4368:7;4359:6;4348:9;4344:22;4323:53;:::i;:::-;4313:63;;4269:117;4425:2;4451:53;4496:7;4487:6;4476:9;4472:22;4451:53;:::i;:::-;4441:63;;4396:118;4047:474;;;;;:::o;4527:619::-;4604:6;4612;4620;4669:2;4657:9;4648:7;4644:23;4640:32;4637:119;;;4675:79;;:::i;:::-;4637:119;4795:1;4820:53;4865:7;4856:6;4845:9;4841:22;4820:53;:::i;:::-;4810:63;;4766:117;4922:2;4948:53;4993:7;4984:6;4973:9;4969:22;4948:53;:::i;:::-;4938:63;;4893:118;5050:2;5076:53;5121:7;5112:6;5101:9;5097:22;5076:53;:::i;:::-;5066:63;;5021:118;4527:619;;;;;:::o;5152:118::-;5239:24;5257:5;5239:24;:::i;:::-;5234:3;5227:37;5152:118;;:::o;5276:222::-;5369:4;5407:2;5396:9;5392:18;5384:26;;5420:71;5488:1;5477:9;5473:17;5464:6;5420:71;:::i;:::-;5276:222;;;;:::o;5504:86::-;5539:7;5579:4;5572:5;5568:16;5557:27;;5504:86;;;:::o;5596:112::-;5679:22;5695:5;5679:22;:::i;:::-;5674:3;5667:35;5596:112;;:::o;5714:214::-;5803:4;5841:2;5830:9;5826:18;5818:26;;5854:67;5918:1;5907:9;5903:17;5894:6;5854:67;:::i;:::-;5714:214;;;;:::o;5934:911::-;6029:6;6037;6045;6053;6061;6110:3;6098:9;6089:7;6085:23;6081:33;6078:120;;;6117:79;;:::i;:::-;6078:120;6237:1;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6208:117;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;6492:2;6518:53;6563:7;6554:6;6543:9;6539:22;6518:53;:::i;:::-;6508:63;;6463:118;6620:2;6646:53;6691:7;6682:6;6671:9;6667:22;6646:53;:::i;:::-;6636:63;;6591:118;6748:3;6775:53;6820:7;6811:6;6800:9;6796:22;6775:53;:::i;:::-;6765:63;;6719:119;5934:911;;;;;;;;:::o;6851:118::-;6938:24;6956:5;6938:24;:::i;:::-;6933:3;6926:37;6851:118;;:::o;6975:222::-;7068:4;7106:2;7095:9;7091:18;7083:26;;7119:71;7187:1;7176:9;7172:17;7163:6;7119:71;:::i;:::-;6975:222;;;;:::o;7203:329::-;7262:6;7311:2;7299:9;7290:7;7286:23;7282:32;7279:119;;;7317:79;;:::i;:::-;7279:119;7437:1;7462:53;7507:7;7498:6;7487:9;7483:22;7462:53;:::i;:::-;7452:63;;7408:117;7203:329;;;;:::o;7538:474::-;7606:6;7614;7663:2;7651:9;7642:7;7638:23;7634:32;7631:119;;;7669:79;;:::i;:::-;7631:119;7789:1;7814:53;7859:7;7850:6;7839:9;7835:22;7814:53;:::i;:::-;7804:63;;7760:117;7916:2;7942:53;7987:7;7978:6;7967:9;7963:22;7942:53;:::i;:::-;7932:63;;7887:118;7538:474;;;;;:::o;8018:765::-;8104:6;8112;8120;8128;8177:3;8165:9;8156:7;8152:23;8148:33;8145:120;;;8184:79;;:::i;:::-;8145:120;8304:1;8329:53;8374:7;8365:6;8354:9;8350:22;8329:53;:::i;:::-;8319:63;;8275:117;8431:2;8457:53;8502:7;8493:6;8482:9;8478:22;8457:53;:::i;:::-;8447:63;;8402:118;8559:2;8585:53;8630:7;8621:6;8610:9;8606:22;8585:53;:::i;:::-;8575:63;;8530:118;8687:2;8713:53;8758:7;8749:6;8738:9;8734:22;8713:53;:::i;:::-;8703:63;;8658:118;8018:765;;;;;;;:::o;8789:118::-;8860:22;8876:5;8860:22;:::i;:::-;8853:5;8850:33;8840:61;;8897:1;8894;8887:12;8840:61;8789:118;:::o;8913:135::-;8957:5;8995:6;8982:20;8973:29;;9011:31;9036:5;9011:31;:::i;:::-;8913:135;;;;:::o;9054:1199::-;9165:6;9173;9181;9189;9197;9205;9213;9262:3;9250:9;9241:7;9237:23;9233:33;9230:120;;;9269:79;;:::i;:::-;9230:120;9389:1;9414:53;9459:7;9450:6;9439:9;9435:22;9414:53;:::i;:::-;9404:63;;9360:117;9516:2;9542:53;9587:7;9578:6;9567:9;9563:22;9542:53;:::i;:::-;9532:63;;9487:118;9644:2;9670:53;9715:7;9706:6;9695:9;9691:22;9670:53;:::i;:::-;9660:63;;9615:118;9772:2;9798:53;9843:7;9834:6;9823:9;9819:22;9798:53;:::i;:::-;9788:63;;9743:118;9900:3;9927:51;9970:7;9961:6;9950:9;9946:22;9927:51;:::i;:::-;9917:61;;9871:117;10027:3;10054:53;10099:7;10090:6;10079:9;10075:22;10054:53;:::i;:::-;10044:63;;9998:119;10156:3;10183:53;10228:7;10219:6;10208:9;10204:22;10183:53;:::i;:::-;10173:63;;10127:119;9054:1199;;;;;;;;;;:::o;10259:474::-;10327:6;10335;10384:2;10372:9;10363:7;10359:23;10355:32;10352:119;;;10390:79;;:::i;:::-;10352:119;10510:1;10535:53;10580:7;10571:6;10560:9;10556:22;10535:53;:::i;:::-;10525:63;;10481:117;10637:2;10663:53;10708:7;10699:6;10688:9;10684:22;10663:53;:::i;:::-;10653:63;;10608:118;10259:474;;;;;:::o;10739:180::-;10787:77;10784:1;10777:88;10884:4;10881:1;10874:15;10908:4;10905:1;10898:15;10925:320;10969:6;11006:1;11000:4;10996:12;10986:22;;11053:1;11047:4;11043:12;11074:18;11064:81;;11130:4;11122:6;11118:17;11108:27;;11064:81;11192:2;11184:6;11181:14;11161:18;11158:38;11155:84;;11211:18;;:::i;:::-;11155:84;10976:269;10925:320;;;:::o;11251:180::-;11299:77;11296:1;11289:88;11396:4;11393:1;11386:15;11420:4;11417:1;11410:15;11437:180;11485:77;11482:1;11475:88;11582:4;11579:1;11572:15;11606:4;11603:1;11596:15;11623:185;11663:1;11680:20;11698:1;11680:20;:::i;:::-;11675:25;;11714:20;11732:1;11714:20;:::i;:::-;11709:25;;11753:1;11743:35;;11758:18;;:::i;:::-;11743:35;11800:1;11797;11793:9;11788:14;;11623:185;;;;:::o;11814:194::-;11854:4;11874:20;11892:1;11874:20;:::i;:::-;11869:25;;11908:20;11926:1;11908:20;:::i;:::-;11903:25;;11952:1;11949;11945:9;11937:17;;11976:1;11970:4;11967:11;11964:37;;;11981:18;;:::i;:::-;11964:37;11814:194;;;;:::o;12014:102::-;12056:8;12103:5;12100:1;12096:13;12075:34;;12014:102;;;:::o;12122:848::-;12183:5;12190:4;12214:6;12205:15;;12238:5;12229:14;;12252:712;12273:1;12263:8;12260:15;12252:712;;;12368:4;12363:3;12359:14;12353:4;12350:24;12347:50;;;12377:18;;:::i;:::-;12347:50;12427:1;12417:8;12413:16;12410:451;;;12842:4;12835:5;12831:16;12822:25;;12410:451;12892:4;12886;12882:15;12874:23;;12922:32;12945:8;12922:32;:::i;:::-;12910:44;;12252:712;;;12122:848;;;;;;;:::o;12976:1073::-;13030:5;13221:8;13211:40;;13242:1;13233:10;;13244:5;;13211:40;13270:4;13260:36;;13287:1;13278:10;;13289:5;;13260:36;13356:4;13404:1;13399:27;;;;13440:1;13435:191;;;;13349:277;;13399:27;13417:1;13408:10;;13419:5;;;13435:191;13480:3;13470:8;13467:17;13464:43;;;13487:18;;:::i;:::-;13464:43;13536:8;13533:1;13529:16;13520:25;;13571:3;13564:5;13561:14;13558:40;;;13578:18;;:::i;:::-;13558:40;13611:5;;;13349:277;;13735:2;13725:8;13722:16;13716:3;13710:4;13707:13;13703:36;13685:2;13675:8;13672:16;13667:2;13661:4;13658:12;13654:35;13638:111;13635:246;;;13791:8;13785:4;13781:19;13772:28;;13826:3;13819:5;13816:14;13813:40;;;13833:18;;:::i;:::-;13813:40;13866:5;;13635:246;13906:42;13944:3;13934:8;13928:4;13925:1;13906:42;:::i;:::-;13891:57;;;;13980:4;13975:3;13971:14;13964:5;13961:25;13958:51;;;13989:18;;:::i;:::-;13958:51;14038:4;14031:5;14027:16;14018:25;;12976:1073;;;;;;:::o;14055:285::-;14115:5;14139:23;14157:4;14139:23;:::i;:::-;14131:31;;14183:27;14201:8;14183:27;:::i;:::-;14171:39;;14229:104;14266:66;14256:8;14250:4;14229:104;:::i;:::-;14220:113;;14055:285;;;;:::o;14346:410::-;14386:7;14409:20;14427:1;14409:20;:::i;:::-;14404:25;;14443:20;14461:1;14443:20;:::i;:::-;14438:25;;14498:1;14495;14491:9;14520:30;14538:11;14520:30;:::i;:::-;14509:41;;14699:1;14690:7;14686:15;14683:1;14680:22;14660:1;14653:9;14633:83;14610:139;;14729:18;;:::i;:::-;14610:139;14394:362;14346:410;;;;:::o;14762:79::-;14801:7;14830:5;14819:16;;14762:79;;;:::o;14847:157::-;14952:45;14972:24;14990:5;14972:24;:::i;:::-;14952:45;:::i;:::-;14947:3;14940:58;14847:157;;:::o;15010:94::-;15043:8;15091:5;15087:2;15083:14;15062:35;;15010:94;;;:::o;15110:::-;15149:7;15178:20;15192:5;15178:20;:::i;:::-;15167:31;;15110:94;;;:::o;15210:100::-;15249:7;15278:26;15298:5;15278:26;:::i;:::-;15267:37;;15210:100;;;:::o;15316:157::-;15421:45;15441:24;15459:5;15441:24;:::i;:::-;15421:45;:::i;:::-;15416:3;15409:58;15316:157;;:::o;15479:79::-;15518:7;15547:5;15536:16;;15479:79;;;:::o;15564:157::-;15669:45;15689:24;15707:5;15689:24;:::i;:::-;15669:45;:::i;:::-;15664:3;15657:58;15564:157;;:::o;15727:538::-;15895:3;15910:75;15981:3;15972:6;15910:75;:::i;:::-;16010:2;16005:3;16001:12;15994:19;;16023:75;16094:3;16085:6;16023:75;:::i;:::-;16123:2;16118:3;16114:12;16107:19;;16136:75;16207:3;16198:6;16136:75;:::i;:::-;16236:2;16231:3;16227:12;16220:19;;16256:3;16249:10;;15727:538;;;;;;:::o;16271:191::-;16311:3;16330:20;16348:1;16330:20;:::i;:::-;16325:25;;16364:20;16382:1;16364:20;:::i;:::-;16359:25;;16407:1;16404;16400:9;16393:16;;16428:3;16425:1;16422:10;16419:36;;;16435:18;;:::i;:::-;16419:36;16271:191;;;;:::o;16468:442::-;16617:4;16655:2;16644:9;16640:18;16632:26;;16668:71;16736:1;16725:9;16721:17;16712:6;16668:71;:::i;:::-;16749:72;16817:2;16806:9;16802:18;16793:6;16749:72;:::i;:::-;16831;16899:2;16888:9;16884:18;16875:6;16831:72;:::i;:::-;16468:442;;;;;;:::o;16916:176::-;16948:1;16965:20;16983:1;16965:20;:::i;:::-;16960:25;;16999:20;17017:1;16999:20;:::i;:::-;16994:25;;17038:1;17028:35;;17043:18;;:::i;:::-;17028:35;17084:1;17081;17077:9;17072:14;;16916:176;;;;:::o;17098:167::-;17238:19;17234:1;17226:6;17222:14;17215:43;17098:167;:::o;17271:366::-;17413:3;17434:67;17498:2;17493:3;17434:67;:::i;:::-;17427:74;;17510:93;17599:3;17510:93;:::i;:::-;17628:2;17623:3;17619:12;17612:19;;17271:366;;;:::o;17643:419::-;17809:4;17847:2;17836:9;17832:18;17824:26;;17896:9;17890:4;17886:20;17882:1;17871:9;17867:17;17860:47;17924:131;18050:4;17924:131;:::i;:::-;17916:139;;17643:419;;;:::o;18068:233::-;18107:3;18130:24;18148:5;18130:24;:::i;:::-;18121:33;;18176:66;18169:5;18166:77;18163:103;;18246:18;;:::i;:::-;18163:103;18293:1;18286:5;18282:13;18275:20;;18068:233;;;:::o;18307:775::-;18540:4;18578:3;18567:9;18563:19;18555:27;;18592:71;18660:1;18649:9;18645:17;18636:6;18592:71;:::i;:::-;18673:72;18741:2;18730:9;18726:18;18717:6;18673:72;:::i;:::-;18755;18823:2;18812:9;18808:18;18799:6;18755:72;:::i;:::-;18837;18905:2;18894:9;18890:18;18881:6;18837:72;:::i;:::-;18919:73;18987:3;18976:9;18972:19;18963:6;18919:73;:::i;:::-;19002;19070:3;19059:9;19055:19;19046:6;19002:73;:::i;:::-;18307:775;;;;;;;;;:::o;19088:176::-;19228:28;19224:1;19216:6;19212:14;19205:52;19088:176;:::o;19270:366::-;19412:3;19433:67;19497:2;19492:3;19433:67;:::i;:::-;19426:74;;19509:93;19598:3;19509:93;:::i;:::-;19627:2;19622:3;19618:12;19611:19;;19270:366;;;:::o;19642:419::-;19808:4;19846:2;19835:9;19831:18;19823:26;;19895:9;19889:4;19885:20;19881:1;19870:9;19866:17;19859:47;19923:131;20049:4;19923:131;:::i;:::-;19915:139;;19642:419;;;:::o;20067:148::-;20169:11;20206:3;20191:18;;20067:148;;;;:::o;20221:214::-;20361:66;20357:1;20349:6;20345:14;20338:90;20221:214;:::o;20441:400::-;20601:3;20622:84;20704:1;20699:3;20622:84;:::i;:::-;20615:91;;20715:93;20804:3;20715:93;:::i;:::-;20833:1;20828:3;20824:11;20817:18;;20441:400;;;:::o;20847:663::-;21088:3;21110:148;21254:3;21110:148;:::i;:::-;21103:155;;21268:75;21339:3;21330:6;21268:75;:::i;:::-;21368:2;21363:3;21359:12;21352:19;;21381:75;21452:3;21443:6;21381:75;:::i;:::-;21481:2;21476:3;21472:12;21465:19;;21501:3;21494:10;;20847:663;;;;;:::o;21516:225::-;21656:34;21652:1;21644:6;21640:14;21633:58;21725:8;21720:2;21712:6;21708:15;21701:33;21516:225;:::o;21747:366::-;21889:3;21910:67;21974:2;21969:3;21910:67;:::i;:::-;21903:74;;21986:93;22075:3;21986:93;:::i;:::-;22104:2;22099:3;22095:12;22088:19;;21747:366;;;:::o;22119:419::-;22285:4;22323:2;22312:9;22308:18;22300:26;;22372:9;22366:4;22362:20;22358:1;22347:9;22343:17;22336:47;22400:131;22526:4;22400:131;:::i;:::-;22392:139;;22119:419;;;:::o;22544:225::-;22684:34;22680:1;22672:6;22668:14;22661:58;22753:8;22748:2;22740:6;22736:15;22729:33;22544:225;:::o;22775:366::-;22917:3;22938:67;23002:2;22997:3;22938:67;:::i;:::-;22931:74;;23014:93;23103:3;23014:93;:::i;:::-;23132:2;23127:3;23123:12;23116:19;;22775:366;;;:::o;23147:419::-;23313:4;23351:2;23340:9;23336:18;23328:26;;23400:9;23394:4;23390:20;23386:1;23375:9;23371:17;23364:47;23428:131;23554:4;23428:131;:::i;:::-;23420:139;;23147:419;;;:::o;23572:545::-;23745:4;23783:3;23772:9;23768:19;23760:27;;23797:71;23865:1;23854:9;23850:17;23841:6;23797:71;:::i;:::-;23878:68;23942:2;23931:9;23927:18;23918:6;23878:68;:::i;:::-;23956:72;24024:2;24013:9;24009:18;24000:6;23956:72;:::i;:::-;24038;24106:2;24095:9;24091:18;24082:6;24038:72;:::i;:::-;23572:545;;;;;;;:::o;24123:178::-;24263:30;24259:1;24251:6;24247:14;24240:54;24123:178;:::o;24307:366::-;24449:3;24470:67;24534:2;24529:3;24470:67;:::i;:::-;24463:74;;24546:93;24635:3;24546:93;:::i;:::-;24664:2;24659:3;24655:12;24648:19;;24307:366;;;:::o;24679:419::-;24845:4;24883:2;24872:9;24868:18;24860:26;;24932:9;24926:4;24922:20;24918:1;24907:9;24903:17;24896:47;24960:131;25086:4;24960:131;:::i;:::-;24952:139;;24679:419;;;:::o

Swarm Source

ipfs://79fd5812cd026289b10138c798028719c694cc1ed79fad95434cf4ed93c323a6
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.