ETH Price: $3,255.69 (-4.54%)
Gas: 9 Gwei

Token

EtherVirus (2020-nEthV)
 

Overview

Max Total Supply

163 2020-nEthV

Holders

56

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
3 2020-nEthV

Value
$0.00
0x21f948ef3afe5406f8b2d911e05eae4ffb82ecb4
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The EtherVirus is an ERC-721 token project, made entirely for fun. The tokens have no monetary value.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Pathogen721

Compiler Version
v0.6.2+commit.bacdbe57

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-09
*/

pragma solidity ^0.6.2;


contract Pathogen721{

    constructor() public{

        supportedInterfaces[0x6466353c] = true;
        supportedInterfaces[0x780e9d63] = true;
        supportedInterfaces[0x5b5e139f] = true;
        supportedInterfaces[0x01ffc9a7] = true;

        LAST_INFECTION = now;
    }

    //PATHOGEN
    //tokenId   => strain
    mapping (   uint    =>  uint)      STRAINS;
    mapping (address => uint)   IMMUNITY;
    //    mapping (address => uint)   coughs; //<token balance
    mapping (address => uint)  DEATH_DATE;
    uint constant INFECTIOUSNESS = 3;
    uint constant STABILITY = 5;

    uint public LAST_INFECTION = 0;

    uint public INFECTIONS = 0;


    //////===721 Standard
    event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    ///


    //////===721 Implementation
    mapping(address => uint256) internal BALANCES;
    mapping (uint256 => address) internal ALLOWANCE;
    mapping (address => mapping (address => bool)) internal AUTHORISED;

    //    uint[] PATHOGENS;
    uint[] PATHOGENS;                      //Array of all tickets [tokenId,tokenId,...]
    mapping(uint256 => address) OWNERS;  //Mapping of ticket owners

    //    METADATA VARS
    string private __name = "EtherVirus";
    string private __symbol = "2020-nEthV";
    string private __tokenURI = "https://anallergytoanalogy.github.io/pathogen/metadata/2020-nEthV.json";

    //    ENUMERABLE VARS
    mapping(address => uint[]) internal OWNER_INDEX_TO_ID;
    mapping(uint => uint) internal OWNER_ID_TO_INDEX;
    mapping(uint => uint) internal ID_TO_INDEX;



    function vitalSigns(address patient) public view returns(
        bool alive,
        uint pathogens,
        uint immunity,
        uint death_date
    ){
        return (
        isAlive(patient),
        BALANCES[patient],
        IMMUNITY[patient],
        DEATH_DATE[patient]
        );
    }

    function isAlive(address patient) public view returns(bool){
        return (DEATH_DATE[patient] == 0 || DEATH_DATE[patient] > now);
    }


    function get_now() public view returns (uint){
        return now;
    }
    function get_block_number() public view returns(uint){
        return block.number;
    }
    function patientZero() public{
        require(INFECTIONS == 0,"exists");
        for(uint i = 0; i < INFECTIOUSNESS; i++){
            issueToken(msg.sender,1);
        }
        DEATH_DATE[msg.sender] = now + 1 weeks;
        INFECTIONS++;

        IMMUNITY[msg.sender] = 1;
        LAST_INFECTION = now;
    }
    function infectMe() public{
        require(LAST_INFECTION + 1 weeks > now ,"extinct");
        require(isAlive(msg.sender),"dead");
        require(BALANCES[msg.sender] == 0,"sick");
        INFECTIONS++;

        uint strain = STRAINS[PATHOGENS[PATHOGENS.length-1]];
        if(strain < IMMUNITY[msg.sender]){
            strain = IMMUNITY[msg.sender] + 1;
        }

        for(uint i = 0; i < INFECTIOUSNESS; i++){
            issueToken(msg.sender,strain);
        }
        DEATH_DATE[msg.sender] = now + 1 weeks;

        IMMUNITY[msg.sender] = strain;
        LAST_INFECTION = now;
    }

    function vaccinate(uint tokenId, uint vaccine) public{
        require(isValidToken(tokenId),"invalid");
        require(isAlive(msg.sender),"dead");
        require(BALANCES[msg.sender] == 0,"sick");
        require(STRAINS[tokenId] > IMMUNITY[msg.sender],"obsolete");

        uint vaccine_processed_0 = uint(0) - uint(keccak256(abi.encodePacked(vaccine)));
        uint vaccine_processed_1 = uint(keccak256(abi.encodePacked(vaccine_processed_0)));

        require(STRAINS[tokenId] - vaccine_processed_1 == 0,"ineffective");

        IMMUNITY[msg.sender] = STRAINS[tokenId];
    }



    /// @notice Checks if a given tokenId is valid
    /// @dev If adding the ability to burn tokens, this function will need to reflect that.
    /// @param _tokenId The tokenId to check
    /// @return (bool) True if valid, False if not valid.
    function isValidToken(uint256 _tokenId) internal view returns(bool){
        return OWNERS[_tokenId] != address(0);
    }


    /// @notice Count all NFTs assigned to an owner
    /// @dev NFTs assigned to the zero address are considered invalid, and this
    ///  function throws for queries about the zero address.
    /// @param _owner An address for whom to query the balance
    /// @return The number of NFTs owned by `_owner`, possibly zero
    function balanceOf(address _owner) external view returns (uint256){
        return BALANCES[_owner];
    }

    /// @notice Find the owner of an NFT
    /// @param _tokenId The identifier for an NFT
    /// @dev NFTs assigned to zero address are considered invalid, and queries
    ///  about them do throw.
    /// @return The address of the owner of the NFT
    function ownerOf(uint256 _tokenId) public view returns(address){
        require(isValidToken(_tokenId),"invalid");
        return OWNERS[_tokenId];
    }


    //TODO indexTokens indexes and PATHOGENS are functionally the same
    function issueToken(address owner, uint strain) internal {
        uint tokenId = PATHOGENS.length + 1;

        OWNERS[tokenId] = owner;
        BALANCES[owner]++;
        STRAINS[tokenId] = strain;


        OWNER_ID_TO_INDEX[tokenId] = OWNER_INDEX_TO_ID[owner].length;
        OWNER_INDEX_TO_ID[owner].push(tokenId);

        ID_TO_INDEX[tokenId] = PATHOGENS.length;
        PATHOGENS.push(tokenId);

        emit Transfer(address(0),owner,tokenId);
    }

    function canInfect(address vector, address victim, uint _tokenId) public view returns(string memory){
        if(victim.balance == 0) return "victim_inactive";
        if(DEATH_DATE[victim] > 0 && now >= DEATH_DATE[victim]) return "victim_dead";
        if(now >= DEATH_DATE[vector]) return "vector_dead";
        if(BALANCES[victim] > 0)    return "victim_sick";
        if(STRAINS[_tokenId] <= IMMUNITY[victim]) return "victim_immune";
        if(BALANCES[vector] == 0) return "vector_healthy";
        return "okay";
    }

    function infect(address vector, address victim, uint _tokenId) internal{
        require(victim.balance > 0,"victim_inactive");

        require(DEATH_DATE[victim] == 0 || now < DEATH_DATE[victim],"victim_dead");
        require(STRAINS[_tokenId] > IMMUNITY[victim],"victim_immune");
        require(BALANCES[victim] == 0,"victim_sick");

        require(now < DEATH_DATE[vector],"vector_dead");
        require(BALANCES[vector] > 0,"vector_healthy");

        DEATH_DATE[victim] = now + 1 weeks;
        //        coughs[victim] = 3;
        //transfer this token and mint 2 more the same

        uint strain = STRAINS[_tokenId];
        strain += (block.timestamp%STABILITY+1)/STABILITY;

        for(uint i = 0; i < INFECTIOUSNESS-1; i++){
            issueToken(victim,strain);
        }
        IMMUNITY[victim] = strain;
        LAST_INFECTION = now;

    }




    /// @notice Set or reaffirm the approved address for an NFT
    /// @dev The zero address indicates there is no approved address.
    /// @dev Throws unless `msg.sender` is the current NFT owner, or an authorized
    ///  operator of the current owner.
    /// @param _approved The new approved NFT controller
    /// @param _tokenId The NFT to approve
    function approve(address _approved, uint256 _tokenId)  external{
        address owner = ownerOf(_tokenId);
        require( owner == msg.sender                    //Require Sender Owns Token
        || AUTHORISED[owner][msg.sender]                //  or is approved for all.
        ,"permission");
        emit Approval(owner, _approved, _tokenId);
        ALLOWANCE[_tokenId] = _approved;
    }

    /// @notice Get the approved address for a single NFT
    /// @dev Throws if `_tokenId` is not a valid NFT
    /// @param _tokenId The NFT to find the approved address for
    /// @return The approved address for this NFT, or the zero address if there is none
    function getApproved(uint256 _tokenId) external view returns (address) {
        require(isValidToken(_tokenId),"invalid");
        return ALLOWANCE[_tokenId];
    }

    /// @notice Query if an address is an authorized operator for another address
    /// @param _owner The address that owns the NFTs
    /// @param _operator The address that acts on behalf of the owner
    /// @return True if `_operator` is an approved operator for `_owner`, false otherwise
    function isApprovedForAll(address _owner, address _operator) external view returns (bool) {
        return AUTHORISED[_owner][_operator];
    }




    /// @notice Enable or disable approval for a third party ("operator") to manage
    ///  all your assets.
    /// @dev Emits the ApprovalForAll event
    /// @param _operator Address to add to the set of authorized operators.
    /// @param _approved True if the operators is approved, false to revoke approval
    function setApprovalForAll(address _operator, bool _approved) external {
        emit ApprovalForAll(msg.sender,_operator, _approved);
        AUTHORISED[msg.sender][_operator] = _approved;
    }


    /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
    ///  TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
    ///  THEY MAY BE PERMANENTLY LOST
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `_from` is
    ///  not the current owner. Throws if `_to` is the zero address. Throws if
    ///  `_tokenId` is not a valid NFT.
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    function transferFrom(address _from, address _to, uint256 _tokenId) public {


        //Check Transferable
        //There is a token validity check in ownerOf
        address owner = ownerOf(_tokenId);

        require ( owner == msg.sender             //Require sender owns token
        //Doing the two below manually instead of referring to the external methods saves gas
        || ALLOWANCE[_tokenId] == msg.sender      //or is approved for this token
        || AUTHORISED[owner][msg.sender]          //or is approved for all
        ,"permission");
        require(owner == _from,"owner");
        require(_to != address(0),"zero");
        //require(isValidToken(_tokenId)); <-- done by ownerOf

        emit Transfer(_from, _to, _tokenId);

        infect(_from, _to,  _tokenId);


        OWNERS[_tokenId] =_to;

        BALANCES[_from]--;
        BALANCES[_to]++;

        //Reset approved if there is one
        if(ALLOWANCE[_tokenId] != address(0)){
            delete ALLOWANCE[_tokenId];
        }

        //Enumerable Additions
        uint oldIndex = OWNER_ID_TO_INDEX[_tokenId];
        //If the token isn't the last one in the owner's index
        if(oldIndex != OWNER_INDEX_TO_ID[_from].length - 1){
            //Move the old one in the index list
            OWNER_INDEX_TO_ID[_from][oldIndex] = OWNER_INDEX_TO_ID[_from][OWNER_INDEX_TO_ID[_from].length - 1];
            //Update the token's reference to its place in the index list
            OWNER_ID_TO_INDEX[OWNER_INDEX_TO_ID[_from][oldIndex]] = oldIndex;
        }
        //OWNER_INDEX_TO_ID[_from].length--;
        OWNER_INDEX_TO_ID[_from].pop();

        OWNER_ID_TO_INDEX[_tokenId] = OWNER_INDEX_TO_ID[_to].length;
        OWNER_INDEX_TO_ID[_to].push(_tokenId);


        if(BALANCES[_from] == 0 ){
            DEATH_DATE[_from] += 52000 weeks;
        }else{
            INFECTIONS++;
        }

    }

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `_from` is
    ///  not the current owner. Throws if `_to` is the zero address. Throws if
    ///  `_tokenId` is not a valid NFT. When transfer is complete, this function
    ///  checks if `_to` is a smart contract (code size > 0). If so, it calls
    ///  `onERC721Received` on `_to` and throws if the return value is not
    ///  `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    /// @param data Additional data with no specified format, sent in call to `_to`
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) public {
        transferFrom(_from, _to, _tokenId);

        //Get size of "_to" address, if 0 it's a wallet
        uint32 size;
        assembly {
            size := extcodesize(_to)
        }
        if(size > 0){
            ERC721TokenReceiver receiver = ERC721TokenReceiver(_to);
            require(receiver.onERC721Received(msg.sender,_from,_tokenId,data) == bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")),"receiver");
        }

    }

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev This works identically to the other function with an extra data parameter,
    ///  except this function just sets data to ""
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external {
        safeTransferFrom(_from,_to,_tokenId,"");
    }




    // METADATA FUNCTIONS

    /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
    /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
    ///  3986. The URI may point to a JSON file that conforms to the "ERC721
    ///  Metadata JSON Schema".
    /// @param _tokenId The tokenId of the token of which to retrieve the URI.
    /// @return (string) The URI of the token.
    function tokenURI(uint256 _tokenId) public view returns (string memory){
        //Note: changed visibility to public
        require(isValidToken(_tokenId),"invalid");
        return __tokenURI;
    }

    /// @notice A descriptive name for a collection of NFTs in this contract
    function name() external view returns (string memory _name){
        //_name = "Name must be hard coded";
        return __name;
    }

    /// @notice An abbreviated name for NFTs in this contract
    function symbol() external view returns (string memory _symbol){
        //_symbol = "Symbol must be hard coded";
        return __symbol;
    }


    // ENUMERABLE FUNCTIONS

    /// @notice Count NFTs tracked by this contract
    /// @return A count of valid NFTs tracked by this contract, where each one of
    ///  them has an assigned and queryable owner not equal to the zero address
    function totalSupply() external view returns (uint256){
        return PATHOGENS.length;
    }

    /// @notice Enumerate valid NFTs
    /// @dev Throws if `_index` >= `totalSupply()`.
    /// @param _index A counter less than `totalSupply()`
    /// @return The token identifier for the `_index`th NFT,
    ///  (sort order not specified)
    function tokenByIndex(uint256 _index) external view returns(uint256){
        require(_index < PATHOGENS.length,"index");
        return PATHOGENS[_index];


    }

    /// @notice Enumerate NFTs assigned to an owner
    /// @dev Throws if `_index` >= `balanceOf(_owner)` or if
    ///  `_owner` is the zero address, representing invalid NFTs.
    /// @param _owner An address where we are interested in NFTs owned by them
    /// @param _index A counter less than `balanceOf(_owner)`
    /// @return The token identifier for the `_index`th NFT assigned to `_owner`,
    ///   (sort order not specified)
    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256){
        require(_index < BALANCES[_owner],"index");
        return OWNER_INDEX_TO_ID[_owner][_index];
    }
    ///===End 721 Implementation

    ///////===165 Implementation
    mapping (bytes4 => bool) internal supportedInterfaces;
    function supportsInterface(bytes4 interfaceID) external view returns (bool){
        return supportedInterfaces[interfaceID];
    }
    ///==End 165
}




interface ERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the recipient
    ///  after a `transfer`. This function MAY throw to revert and reject the
    ///  transfer. Return of other than the magic value MUST result in the
    ///  transaction being reverted.
    ///  Note: the contract address is always the message sender.
    /// @param _operator The address which called `safeTransferFrom` function
    /// @param _from The address which previously owned the token
    /// @param _tokenId The NFT identifier which is being transferred
    /// @param _data Additional data with no specified format
    /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    ///  unless throwing
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4);
}

contract ValidReceiver is ERC721TokenReceiver{
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) override external returns(bytes4){
        _operator;_from;_tokenId;_data;
        return bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"));
    }
}

contract InvalidReceiver is ERC721TokenReceiver{
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) override external returns(bytes4){
        _operator;_from;_tokenId;_data;
        return bytes4(keccak256("suck it nerd"));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"INFECTIONS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LAST_INFECTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vector","type":"address"},{"internalType":"address","name":"victim","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"canInfect","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_block_number","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_now","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infectMe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"patient","type":"address"}],"name":"isAlive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"patientZero","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"vaccine","type":"uint256"}],"name":"vaccinate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"patient","type":"address"}],"name":"vitalSigns","outputs":[{"internalType":"bool","name":"alive","type":"bool"},{"internalType":"uint256","name":"pathogens","type":"uint256"},{"internalType":"uint256","name":"immunity","type":"uint256"},{"internalType":"uint256","name":"death_date","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052600060035560006004556040518060400160405280600a81526020017f4574686572566972757300000000000000000000000000000000000000000000815250600a90805190602001906200005b9291906200023f565b506040518060400160405280600a81526020017f323032302d6e4574685600000000000000000000000000000000000000000000815250600b9080519060200190620000a99291906200023f565b50604051806080016040528060468152602001620038a360469139600c9080519060200190620000db9291906200023f565b50348015620000e957600080fd5b50600160106000636466353c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600063780e9d6360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555042600381905550620002ee565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200028257805160ff1916838001178555620002b3565b82800160010185558215620002b3579182015b82811115620002b257825182559160200191906001019062000295565b5b509050620002c29190620002c6565b5090565b620002eb91905b80821115620002e7576000816000905550600101620002cd565b5090565b90565b6135a580620002fe6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80637824ddc4116100de578063b5f4b74f11610097578063c87b56dd11610071578063c87b56dd146109af578063e830033314610a56578063e985e9c514610a74578063fede0c9214610af05761018e565b8063b5f4b74f1461082f578063b88d4fde14610839578063c6dee63a1461093e5761018e565b80637824ddc4146106de578063955809b2146106e857806395d89b41146107065780639cd2bb30146107895780639de6295c146107a7578063a22cb465146107df5761018e565b806323b872dd1161014b57806342842e0e1161012557806342842e0e146105685780634f6ccce7146105d65780636352211e1461061857806370a08231146106865761018e565b806323b872dd146103b15780632859bf1f1461041f5780632f745c59146105065761018e565b806301ffc9a71461019357806306fdde03146101f8578063081812fc1461027b578063095ea7b3146102e95780631703e5f91461033757806318160ddd14610393575b600080fd5b6101de600480360360208110156101a957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b0e565b604051808215151515815260200191505060405180910390f35b610200610b76565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610240578082015181840152602081019050610225565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a76004803603602081101561029157600080fd5b8101908080359060200190929190505050610c18565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610335600480360360408110156102ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cd0565b005b6103796004803603602081101561034d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ecb565b604051808215151515815260200191505060405180910390f35b61039b610f5f565b6040518082815260200191505060405180910390f35b61041d600480360360608110156103c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f6c565b005b61048b6004803603606081101561043557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117f1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104cb5780820151818401526020810190506104b0565b50505050905090810190601f1680156104f85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105526004803603604081101561051c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b82565b6040518082815260200191505060405180910390f35b6105d46004803603606081101561057e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c95565b005b610602600480360360208110156105ec57600080fd5b8101908080359060200190929190505050611cb5565b6040518082815260200191505060405180910390f35b6106446004803603602081101561062e57600080fd5b8101908080359060200190929190505050611d50565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106c86004803603602081101561069c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e08565b6040518082815260200191505060405180910390f35b6106e6611e51565b005b6106f0611f99565b6040518082815260200191505060405180910390f35b61070e611fa1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561074e578082015181840152602081019050610733565b50505050905090810190601f16801561077b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610791612043565b6040518082815260200191505060405180910390f35b6107dd600480360360408110156107bd57600080fd5b810190808035906020019092919080359060200190929190505050612049565b005b61082d600480360360408110156107f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506123ff565b005b610837612500565b005b61093c6004803603608081101561084f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108b657600080fd5b8201836020820111156108c857600080fd5b803590602001918460018302840111640100000000831117156108ea57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061283e565b005b6109806004803603602081101561095457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a99565b604051808515151515815260200184815260200183815260200182815260200194505050505060405180910390f35b6109db600480360360208110156109c557600080fd5b8101908080359060200190929190505050612b77565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a1b578082015181840152602081019050610a00565b50505050905090810190601f168015610a485780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a5e612c96565b6040518082815260200191505060405180910390f35b610ad660048036036040811015610a8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c9c565b604051808215151515815260200191505060405180910390f35b610af8612d30565b6040518082815260200191505060405180910390f35b600060106000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b6000610c2382612d38565b610c95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cdb82611d50565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610d9d5750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7065726d697373696f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480610f58575042600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b9050919050565b6000600880549050905090565b6000610f7782611d50565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061101157503373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806110a25750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7065726d697373696f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f6f776e657200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611258576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f7a65726f0000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36112c8848484612da4565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550600073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611457576006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b6000600e60008481526020019081526020016000205490506001600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003811461161a57600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050038154811061154a57fe5b9060005260206000200154600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061159f57fe5b906000526020600020018190555080600e6000600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106115fc57fe5b90600052602060002001548152602001908152602001600020819055505b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061166257fe5b60019003818190600052602060002001600090559055600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600e600085815260200190815260200160002081905550600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208390806001815401808255809150506001900390600052602060002001600090919091909150556000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156117d7576407528ad000600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506117ea565b6004600081548092919060010191905055505b5050505050565b606060008373ffffffffffffffffffffffffffffffffffffffff16311415611850576040518060400160405280600f81526020017f76696374696d5f696e61637469766500000000000000000000000000000000008152509050611b7b565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180156118de5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544210155b15611920576040518060400160405280600b81526020017f76696374696d5f646561640000000000000000000000000000000000000000008152509050611b7b565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442106119a3576040518060400160405280600b81526020017f766563746f725f646561640000000000000000000000000000000000000000008152509050611b7b565b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a28576040518060400160405280600b81526020017f76696374696d5f7369636b0000000000000000000000000000000000000000008152509050611b7b565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000808481526020019081526020016000205411611abd576040518060400160405280600d81526020017f76696374696d5f696d6d756e65000000000000000000000000000000000000008152509050611b7b565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611b42576040518060400160405280600e81526020017f766563746f725f6865616c7468790000000000000000000000000000000000008152509050611b7b565b6040518060400160405280600481526020017f6f6b61790000000000000000000000000000000000000000000000000000000081525090505b9392505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210611c38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f696e64657800000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611c8257fe5b9060005260206000200154905092915050565b611cb08383836040518060200160405280600081525061283e565b505050565b60006008805490508210611d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f696e64657800000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60088281548110611d3e57fe5b90600052602060002001549050919050565b6000611d5b82612d38565b611dcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600060045414611ec9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f657869737473000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008090505b6003811015611ef057611ee333600161330a565b8080600101915050611ecf565b5062093a804201600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060046000815480929190600101919050555060018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600381905550565b600042905090565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120395780601f1061200e57610100808354040283529160200191612039565b820191906000526020600020905b81548152906001019060200180831161201c57829003601f168201915b5050505050905090565b60045481565b61205282612d38565b6120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6120cd33610ecb565b61213f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f646561640000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f7369636b0000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460008084815260200190815260200160002054116122ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f6f62736f6c65746500000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600081604051602001808281526020019150506040516020818303038152906040528051906020012060001c6000039050600081604051602001808281526020019150506040516020818303038152906040528051906020012060001c90506000816000808781526020019081526020016000205403146123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e65666665637469766500000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008085815260200190815260200160002054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a380600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b4262093a80600354011161257c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f657874696e63740000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61258533610ecb565b6125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f646561640000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f7369636b0000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60046000815480929190600101919050555060008060006008600160088054905003815481106126d857fe5b90600052602060002001548152602001908152602001600020549050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548110156127805760018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540190505b60008090505b60038110156127a657612799338361330a565b8080600101915050612786565b5062093a804201600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055504260038190555050565b612849848484610f6c565b6000833b905060008163ffffffff161115612a925760008490506040518080613541602f9139602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612974578082015181840152602081019050612959565b50505050905090810190601f1680156129a15780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156129c357600080fd5b505af11580156129d7573d6000803e3d6000fd5b505050506040513d60208110156129ed57600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f726563656976657200000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b505b5050505050565b600080600080612aa885610ecb565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205493509350935093509193509193565b6060612b8282612d38565b612bf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c8a5780601f10612c5f57610100808354040283529160200191612c8a565b820191906000526020600020905b815481529060010190602001808311612c6d57829003601f168201915b50505050509050919050565b60035481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600043905090565b60008073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60008273ffffffffffffffffffffffffffffffffffffffff163111612e31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f76696374696d5f696e616374697665000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480612ebd5750600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442105b612f2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f76696374696d5f6465616400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000808381526020019081526020016000205411612ff5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f76696374696d5f696d6d756e650000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146130aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f76696374696d5f7369636b00000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054421061315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f766563746f725f6465616400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f766563746f725f6865616c74687900000000000000000000000000000000000081525060200191505060405180910390fd5b62093a804201600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000806000838152602001908152602001600020549050600560016005428161328157fe5b06018161328a57fe5b048101905060008090505b60016003038110156132b8576132ab848361330a565b8080600101915050613295565b5080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055504260038190555050505050565b60006001600880549050019050826009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055508160008083815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600e600083815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600880549050600f60008381526020019081526020016000208190555060088190806001815401808255809150506001900390600052602060002001600090919091909150558273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505056fe6f6e455243373231526563656976656428616464726573732c616464726573732c75696e743235362c627974657329a2646970667358221220d7ffdbabd34c139e5c10ef0dd06f7e8f6108ea09368567d70922c8e9a72153fc64736f6c6343000602003368747470733a2f2f616e616c6c65726779746f616e616c6f67792e6769746875622e696f2f706174686f67656e2f6d657461646174612f323032302d6e457468562e6a736f6e

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80637824ddc4116100de578063b5f4b74f11610097578063c87b56dd11610071578063c87b56dd146109af578063e830033314610a56578063e985e9c514610a74578063fede0c9214610af05761018e565b8063b5f4b74f1461082f578063b88d4fde14610839578063c6dee63a1461093e5761018e565b80637824ddc4146106de578063955809b2146106e857806395d89b41146107065780639cd2bb30146107895780639de6295c146107a7578063a22cb465146107df5761018e565b806323b872dd1161014b57806342842e0e1161012557806342842e0e146105685780634f6ccce7146105d65780636352211e1461061857806370a08231146106865761018e565b806323b872dd146103b15780632859bf1f1461041f5780632f745c59146105065761018e565b806301ffc9a71461019357806306fdde03146101f8578063081812fc1461027b578063095ea7b3146102e95780631703e5f91461033757806318160ddd14610393575b600080fd5b6101de600480360360208110156101a957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b0e565b604051808215151515815260200191505060405180910390f35b610200610b76565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610240578082015181840152602081019050610225565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a76004803603602081101561029157600080fd5b8101908080359060200190929190505050610c18565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610335600480360360408110156102ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cd0565b005b6103796004803603602081101561034d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ecb565b604051808215151515815260200191505060405180910390f35b61039b610f5f565b6040518082815260200191505060405180910390f35b61041d600480360360608110156103c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f6c565b005b61048b6004803603606081101561043557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117f1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104cb5780820151818401526020810190506104b0565b50505050905090810190601f1680156104f85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105526004803603604081101561051c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b82565b6040518082815260200191505060405180910390f35b6105d46004803603606081101561057e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c95565b005b610602600480360360208110156105ec57600080fd5b8101908080359060200190929190505050611cb5565b6040518082815260200191505060405180910390f35b6106446004803603602081101561062e57600080fd5b8101908080359060200190929190505050611d50565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106c86004803603602081101561069c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e08565b6040518082815260200191505060405180910390f35b6106e6611e51565b005b6106f0611f99565b6040518082815260200191505060405180910390f35b61070e611fa1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561074e578082015181840152602081019050610733565b50505050905090810190601f16801561077b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610791612043565b6040518082815260200191505060405180910390f35b6107dd600480360360408110156107bd57600080fd5b810190808035906020019092919080359060200190929190505050612049565b005b61082d600480360360408110156107f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506123ff565b005b610837612500565b005b61093c6004803603608081101561084f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108b657600080fd5b8201836020820111156108c857600080fd5b803590602001918460018302840111640100000000831117156108ea57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061283e565b005b6109806004803603602081101561095457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a99565b604051808515151515815260200184815260200183815260200182815260200194505050505060405180910390f35b6109db600480360360208110156109c557600080fd5b8101908080359060200190929190505050612b77565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a1b578082015181840152602081019050610a00565b50505050905090810190601f168015610a485780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a5e612c96565b6040518082815260200191505060405180910390f35b610ad660048036036040811015610a8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c9c565b604051808215151515815260200191505060405180910390f35b610af8612d30565b6040518082815260200191505060405180910390f35b600060106000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b6000610c2382612d38565b610c95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cdb82611d50565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610d9d5750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7065726d697373696f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480610f58575042600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b9050919050565b6000600880549050905090565b6000610f7782611d50565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061101157503373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806110a25750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7065726d697373696f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f6f776e657200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611258576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f7a65726f0000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36112c8848484612da4565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550600073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611457576006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b6000600e60008481526020019081526020016000205490506001600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003811461161a57600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050038154811061154a57fe5b9060005260206000200154600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061159f57fe5b906000526020600020018190555080600e6000600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106115fc57fe5b90600052602060002001548152602001908152602001600020819055505b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061166257fe5b60019003818190600052602060002001600090559055600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600e600085815260200190815260200160002081905550600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208390806001815401808255809150506001900390600052602060002001600090919091909150556000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156117d7576407528ad000600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506117ea565b6004600081548092919060010191905055505b5050505050565b606060008373ffffffffffffffffffffffffffffffffffffffff16311415611850576040518060400160405280600f81526020017f76696374696d5f696e61637469766500000000000000000000000000000000008152509050611b7b565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180156118de5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544210155b15611920576040518060400160405280600b81526020017f76696374696d5f646561640000000000000000000000000000000000000000008152509050611b7b565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442106119a3576040518060400160405280600b81526020017f766563746f725f646561640000000000000000000000000000000000000000008152509050611b7b565b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a28576040518060400160405280600b81526020017f76696374696d5f7369636b0000000000000000000000000000000000000000008152509050611b7b565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000808481526020019081526020016000205411611abd576040518060400160405280600d81526020017f76696374696d5f696d6d756e65000000000000000000000000000000000000008152509050611b7b565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611b42576040518060400160405280600e81526020017f766563746f725f6865616c7468790000000000000000000000000000000000008152509050611b7b565b6040518060400160405280600481526020017f6f6b61790000000000000000000000000000000000000000000000000000000081525090505b9392505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210611c38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f696e64657800000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611c8257fe5b9060005260206000200154905092915050565b611cb08383836040518060200160405280600081525061283e565b505050565b60006008805490508210611d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f696e64657800000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60088281548110611d3e57fe5b90600052602060002001549050919050565b6000611d5b82612d38565b611dcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600060045414611ec9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f657869737473000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008090505b6003811015611ef057611ee333600161330a565b8080600101915050611ecf565b5062093a804201600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060046000815480929190600101919050555060018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600381905550565b600042905090565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120395780601f1061200e57610100808354040283529160200191612039565b820191906000526020600020905b81548152906001019060200180831161201c57829003601f168201915b5050505050905090565b60045481565b61205282612d38565b6120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6120cd33610ecb565b61213f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f646561640000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f7369636b0000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460008084815260200190815260200160002054116122ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f6f62736f6c65746500000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600081604051602001808281526020019150506040516020818303038152906040528051906020012060001c6000039050600081604051602001808281526020019150506040516020818303038152906040528051906020012060001c90506000816000808781526020019081526020016000205403146123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f696e65666665637469766500000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008085815260200190815260200160002054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a380600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b4262093a80600354011161257c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f657874696e63740000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61258533610ecb565b6125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f646561640000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f7369636b0000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60046000815480929190600101919050555060008060006008600160088054905003815481106126d857fe5b90600052602060002001548152602001908152602001600020549050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548110156127805760018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540190505b60008090505b60038110156127a657612799338361330a565b8080600101915050612786565b5062093a804201600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055504260038190555050565b612849848484610f6c565b6000833b905060008163ffffffff161115612a925760008490506040518080613541602f9139602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612974578082015181840152602081019050612959565b50505050905090810190601f1680156129a15780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156129c357600080fd5b505af11580156129d7573d6000803e3d6000fd5b505050506040513d60208110156129ed57600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f726563656976657200000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b505b5050505050565b600080600080612aa885610ecb565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205493509350935093509193509193565b6060612b8282612d38565b612bf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c8a5780601f10612c5f57610100808354040283529160200191612c8a565b820191906000526020600020905b815481529060010190602001808311612c6d57829003601f168201915b50505050509050919050565b60035481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600043905090565b60008073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60008273ffffffffffffffffffffffffffffffffffffffff163111612e31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f76696374696d5f696e616374697665000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480612ebd5750600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442105b612f2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f76696374696d5f6465616400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000808381526020019081526020016000205411612ff5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f76696374696d5f696d6d756e650000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146130aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f76696374696d5f7369636b00000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054421061315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f766563746f725f6465616400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f766563746f725f6865616c74687900000000000000000000000000000000000081525060200191505060405180910390fd5b62093a804201600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000806000838152602001908152602001600020549050600560016005428161328157fe5b06018161328a57fe5b048101905060008090505b60016003038110156132b8576132ab848361330a565b8080600101915050613295565b5080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055504260038190555050505050565b60006001600880549050019050826009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055508160008083815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600e600083815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600880549050600f60008381526020019081526020016000208190555060088190806001815401808255809150506001900390600052602060002001600090919091909150558273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505056fe6f6e455243373231526563656976656428616464726573732c616464726573732c75696e743235362c627974657329a2646970667358221220d7ffdbabd34c139e5c10ef0dd06f7e8f6108ea09368567d70922c8e9a72153fc64736f6c63430006020033

Deployed Bytecode Sourcemap

29:16760:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29:16760:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16635:133;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16635:133:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14707:137;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14707:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8339:168;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8339:168:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7659:404;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7659:404:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2165:140;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2165:140:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15320:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10091:1943;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10091:1943:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5854:533;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5854:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5854:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16295:204;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16295:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13835:139;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13835:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15673:168;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15673:168:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5134:157;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5134:157:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4761:108;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4761:108:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2492:322;;;:::i;:::-;;2315:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14915:147;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14915:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;682:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3442:595;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3442:595:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9293:198;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9293:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2820:614;;;:::i;:::-;;12898:571;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;12898:571:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;12898:571:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;12898:571:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;12898:571:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;12898:571:0;;;;;;;;;;;;;;;:::i;:::-;;1848:309;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1848:309:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14416:205;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14416:205:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14416:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;643:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8814:145;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8814:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2395:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16635:133;16705:4;16728:19;:32;16748:11;16728:32;;;;;;;;;;;;;;;;;;;;;;;;;;;16721:39;;16635:133;;;:::o;14707:137::-;14746:19;14830:6;14823:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14707:137;:::o;8339:168::-;8401:7;8429:22;8442:8;8429:12;:22::i;:::-;8421:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8480:9;:19;8490:8;8480:19;;;;;;;;;;;;;;;;;;;;;8473:26;;8339:168;;;:::o;7659:404::-;7733:13;7749:17;7757:8;7749:7;:17::i;:::-;7733:33;;7795:10;7786:19;;:5;:19;;;:108;;;;7865:10;:17;7876:5;7865:17;;;;;;;;;;;;;;;:29;7883:10;7865:29;;;;;;;;;;;;;;;;;;;;;;;;;7786:108;7777:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7993:9;7977:36;;7986:5;7977:36;;;8004:8;7977:36;;;;;;;;;;;;;;;;;;8046:9;8024;:19;8034:8;8024:19;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;7659:404;;;:::o;2165:140::-;2219:4;2266:1;2243:10;:19;2254:7;2243:19;;;;;;;;;;;;;;;;:24;:53;;;;2293:3;2271:10;:19;2282:7;2271:19;;;;;;;;;;;;;;;;:25;2243:53;2235:62;;2165:140;;;:::o;15320:96::-;15366:7;15392:9;:16;;;;15385:23;;15320:96;:::o;10091:1943::-;10265:13;10281:17;10289:8;10281:7;:17::i;:::-;10265:33;;10330:10;10321:19;;:5;:19;;;:200;;;;10511:10;10488:33;;:9;:19;10498:8;10488:19;;;;;;;;;;;;;;;;;;;;;:33;;;10321:200;:279;;;;10571:10;:17;10582:5;10571:17;;;;;;;;;;;;;;;:29;10589:10;10571:29;;;;;;;;;;;;;;;;;;;;;;;;;10321:279;10311:347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10686:5;10677:14;;:5;:14;;;10669:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10734:1;10719:17;;:3;:17;;;;10711:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10842:3;10826:30;;10835:5;10826:30;;;10847:8;10826:30;;;;;;;;;;;;;;;;;;10869:29;10876:5;10883:3;10889:8;10869:6;:29::i;:::-;10931:3;10913:6;:16;10920:8;10913:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10947:8;:15;10956:5;10947:15;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;;10975:8;:13;10984:3;10975:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;11079:1;11048:33;;:9;:19;11058:8;11048:19;;;;;;;;;;;;;;;;;;;;;:33;;;11045:90;;11104:9;:19;11114:8;11104:19;;;;;;;;;;;;11097:26;;;;;;;;;;;11045:90;11179:13;11195:17;:27;11213:8;11195:27;;;;;;;;;;;;11179:43;;11346:1;11312:17;:24;11330:5;11312:24;;;;;;;;;;;;;;;:31;;;;:35;11300:8;:47;11297:380;;11450:17;:24;11468:5;11450:24;;;;;;;;;;;;;;;11509:1;11475:17;:24;11493:5;11475:24;;;;;;;;;;;;;;;:31;;;;:35;11450:61;;;;;;;;;;;;;;;;11413:17;:24;11431:5;11413:24;;;;;;;;;;;;;;;11438:8;11413:34;;;;;;;;;;;;;;;:98;;;;11657:8;11601:17;:53;11619:17;:24;11637:5;11619:24;;;;;;;;;;;;;;;11644:8;11619:34;;;;;;;;;;;;;;;;11601:53;;;;;;;;;;;:64;;;;11297:380;11733:17;:24;11751:5;11733:24;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;11806:17;:22;11824:3;11806:22;;;;;;;;;;;;;;;:29;;;;11776:17;:27;11794:8;11776:27;;;;;;;;;;;:59;;;;11846:17;:22;11864:3;11846:22;;;;;;;;;;;;;;;11874:8;11846:37;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11846:37:0;;;;;;;;;;;;;;;;;;;11920:1;11901:8;:15;11910:5;11901:15;;;;;;;;;;;;;;;;:20;11898:127;;;11959:11;11938:10;:17;11949:5;11938:17;;;;;;;;;;;;;;;;:32;;;;;;;;;;;11898:127;;;12001:10;;:12;;;;;;;;;;;;;11898:127;10091:1943;;;;;:::o;5854:533::-;5940:13;5986:1;5968:6;:14;;;:19;5965:48;;;5989:24;;;;;;;;;;;;;;;;;;;;;5965:48;6048:1;6027:10;:18;6038:6;6027:18;;;;;;;;;;;;;;;;:22;:51;;;;;6060:10;:18;6071:6;6060:18;;;;;;;;;;;;;;;;6053:3;:25;;6027:51;6024:76;;;6080:20;;;;;;;;;;;;;;;;;;;;;6024:76;6121:10;:18;6132:6;6121:18;;;;;;;;;;;;;;;;6114:3;:25;6111:50;;6141:20;;;;;;;;;;;;;;;;;;;;;6111:50;6194:1;6175:8;:16;6184:6;6175:16;;;;;;;;;;;;;;;;:20;6172:48;;;6200:20;;;;;;;;;;;;;;;;;;;;;6172:48;6255:8;:16;6264:6;6255:16;;;;;;;;;;;;;;;;6234:7;:17;6242:8;6234:17;;;;;;;;;;;;:37;6231:64;;6273:22;;;;;;;;;;;;;;;;;;;;;6231:64;6329:1;6309:8;:16;6318:6;6309:16;;;;;;;;;;;;;;;;:21;6306:49;;;6332:23;;;;;;;;;;;;;;;;;;;;;6306:49;6366:13;;;;;;;;;;;;;;;;;;;5854:533;;;;;;:::o;16295:204::-;16379:7;16415:8;:16;16424:6;16415:16;;;;;;;;;;;;;;;;16406:6;:25;16398:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16458:17;:25;16476:6;16458:25;;;;;;;;;;;;;;;16484:6;16458:33;;;;;;;;;;;;;;;;16451:40;;16295:204;;;;:::o;13835:139::-;13927:39;13944:5;13950:3;13954:8;13927:39;;;;;;;;;;;;:16;:39::i;:::-;13835:139;;;:::o;15673:168::-;15733:7;15769:9;:16;;;;15760:6;:25;15752:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15812:9;15822:6;15812:17;;;;;;;;;;;;;;;;15805:24;;15673:168;;;:::o;5134:157::-;5189:7;5216:22;5229:8;5216:12;:22::i;:::-;5208:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5267:6;:16;5274:8;5267:16;;;;;;;;;;;;;;;;;;;;;5260:23;;5134:157;;;:::o;4761:108::-;4819:7;4845:8;:16;4854:6;4845:16;;;;;;;;;;;;;;;;4838:23;;4761:108;;;:::o;2492:322::-;2554:1;2540:10;;:15;2532:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2580:6;2589:1;2580:10;;2576:91;599:1;2592;:18;2576:91;;;2631:24;2642:10;2653:1;2631:10;:24::i;:::-;2612:3;;;;;;;2576:91;;;;2708:7;2702:3;:13;2677:10;:22;2688:10;2677:22;;;;;;;;;;;;;;;:38;;;;2726:10;;:12;;;;;;;;;;;;;2774:1;2751:8;:20;2760:10;2751:20;;;;;;;;;;;;;;;:24;;;;2803:3;2786:14;:20;;;;2492:322::o;2315:74::-;2355:4;2378:3;2371:10;;2315:74;:::o;14915:147::-;14956:21;15046:8;15039:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14915:147;:::o;682:26::-;;;;:::o;3442:595::-;3514:21;3527:7;3514:12;:21::i;:::-;3506:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3565:19;3573:10;3565:7;:19::i;:::-;3557:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3635:1;3611:8;:20;3620:10;3611:20;;;;;;;;;;;;;;;;:25;3603:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3682:8;:20;3691:10;3682:20;;;;;;;;;;;;;;;;3663:7;:16;3671:7;3663:16;;;;;;;;;;;;:39;3655:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3727:24;3796:7;3779:25;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3779:25:0;;;3769:36;;;;;;3764:42;;3759:1;3754:52;3727:79;;3817:24;3876:19;3859:37;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3859:37:0;;;3849:48;;;;;;3844:54;;3817:81;;3961:1;3938:19;3919:7;:16;3927:7;3919:16;;;;;;;;;;;;:38;:43;3911:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4013:7;:16;4021:7;4013:16;;;;;;;;;;;;3990:8;:20;3999:10;3990:20;;;;;;;;;;;;;;;:39;;;;3442:595;;;;:::o;9293:198::-;9406:9;9380:47;;9395:10;9380:47;;;9417:9;9380:47;;;;;;;;;;;;;;;;;;;;;;9474:9;9438:10;:22;9449:10;9438:22;;;;;;;;;;;;;;;:33;9461:9;9438:33;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;9293:198;;:::o;2820:614::-;2892:3;2882:7;2865:14;;:24;:30;2857:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2926:19;2934:10;2926:7;:19::i;:::-;2918:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2996:1;2972:8;:20;2981:10;2972:20;;;;;;;;;;;;;;;;:25;2964:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3016:10;;:12;;;;;;;;;;;;;3041:11;3055:7;:38;3063:9;3090:1;3073:9;:16;;;;:18;3063:29;;;;;;;;;;;;;;;;3055:38;;;;;;;;;;;;3041:52;;3116:8;:20;3125:10;3116:20;;;;;;;;;;;;;;;;3107:6;:29;3104:93;;;3184:1;3161:8;:20;3170:10;3161:20;;;;;;;;;;;;;;;;:24;3152:33;;3104:93;3213:6;3222:1;3213:10;;3209:96;599:1;3225;:18;3209:96;;;3264:29;3275:10;3286:6;3264:10;:29::i;:::-;3245:3;;;;;;;3209:96;;;;3346:7;3340:3;:13;3315:10;:22;3326:10;3315:22;;;;;;;;;;;;;;;:38;;;;3389:6;3366:8;:20;3375:10;3366:20;;;;;;;;;;;;;;;:29;;;;3423:3;3406:14;:20;;;;2820:614;:::o;12898:571::-;13007:34;13020:5;13027:3;13032:8;13007:12;:34::i;:::-;13111:11;13177:3;13165:16;13157:24;;13212:1;13205:4;:8;;;13202:258;;;13229:28;13280:3;13229:55;;13375:60;;;;;;;;;;;;;;;;;;;13307:129;;;:8;:25;;;13333:10;13344:5;13350:8;13359:4;13307:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;13307:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13307:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13307:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13307:57:0;;;;;;;;;;;;;;;;:129;;;;13299:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13202:258;;12898:571;;;;;:::o;1848:309::-;1915:10;1936:14;1961:13;1985:15;2036:16;2044:7;2036;:16::i;:::-;2063:8;:17;2072:7;2063:17;;;;;;;;;;;;;;;;2091:8;:17;2100:7;2091:17;;;;;;;;;;;;;;;;2119:10;:19;2130:7;2119:19;;;;;;;;;;;;;;;;2018:131;;;;;;;;1848:309;;;;;:::o;14416:205::-;14473:13;14552:22;14565:8;14552:12;:22::i;:::-;14544:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14603:10;14596:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14416:205;;;:::o;643:30::-;;;;:::o;8814:145::-;8898:4;8922:10;:18;8933:6;8922:18;;;;;;;;;;;;;;;:29;8941:9;8922:29;;;;;;;;;;;;;;;;;;;;;;;;;8915:36;;8814:145;;;;:::o;2395:91::-;2443:4;2466:12;2459:19;;2395:91;:::o;4299:123::-;4361:4;4412:1;4384:30;;:6;:16;4391:8;4384:16;;;;;;;;;;;;;;;;;;;;;:30;;;;4377:37;;4299:123;;;:::o;6395:887::-;6502:1;6485:6;:14;;;:18;6477:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6565:1;6543:10;:18;6554:6;6543:18;;;;;;;;;;;;;;;;:23;:51;;;;6576:10;:18;6587:6;6576:18;;;;;;;;;;;;;;;;6570:3;:24;6543:51;6535:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6648:8;:16;6657:6;6648:16;;;;;;;;;;;;;;;;6628:7;:17;6636:8;6628:17;;;;;;;;;;;;:36;6620:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6720:1;6700:8;:16;6709:6;6700:16;;;;;;;;;;;;;;;;:21;6692:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6763:10;:18;6774:6;6763:18;;;;;;;;;;;;;;;;6757:3;:24;6749:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6834:1;6815:8;:16;6824:6;6815:16;;;;;;;;;;;;;;;;:20;6807:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6893:7;6887:3;:13;6866:10;:18;6877:6;6866:18;;;;;;;;;;;;;;;:34;;;;7008:11;7022:7;:17;7030:8;7022:17;;;;;;;;;;;;7008:31;;633:1;7087;633;7061:15;:25;;;;;;:27;7060:39;;;;;;7050:49;;;;7116:6;7125:1;7116:10;;7112:94;7147:1;599;7132:16;7128:1;:20;7112:94;;;7169:25;7180:6;7187;7169:10;:25::i;:::-;7150:3;;;;;;;7112:94;;;;7235:6;7216:8;:16;7225:6;7216:16;;;;;;;;;;;;;;;:25;;;;7269:3;7252:14;:20;;;;6395:887;;;;:::o;5373:473::-;5441:12;5475:1;5456:9;:16;;;;:20;5441:35;;5507:5;5489:6;:15;5496:7;5489:15;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;5523:8;:15;5532:5;5523:15;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;5570:6;5551:7;:16;5559:7;5551:16;;;;;;;;;;;:25;;;;5620:17;:24;5638:5;5620:24;;;;;;;;;;;;;;;:31;;;;5591:17;:26;5609:7;5591:26;;;;;;;;;;;:60;;;;5662:17;:24;5680:5;5662:24;;;;;;;;;;;;;;;5692:7;5662:38;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;5662:38:0;;;;;;;;;;;;;;;;;;;5736:9;:16;;;;5713:11;:20;5725:7;5713:20;;;;;;;;;;;:39;;;;5763:9;5778:7;5763:23;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;5763:23:0;;;;;;;;;;;;;;;;;;;5824:5;5804:34;;5821:1;5804:34;;;5830:7;5804:34;;;;;;;;;;;;;;;;;;5373:473;;;:::o

Swarm Source

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