ETH Price: $3,322.96 (-2.69%)

Contract

0x0419732028fA499200a0E36972E4c139e98D28E1
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Sell NFT Using B...140722532022-01-25 2:58:301036 days ago1643079510IN
0x04197320...9e98D28E1
0 ETH0.02784744115.21016332
Buy NFT Using Se...139763582022-01-10 7:18:431051 days ago1641799123IN
0x04197320...9e98D28E1
0.0369 ETH0.0167230885.26096374
Buy NFT Using Se...139757662022-01-10 5:03:391051 days ago1641791019IN
0x04197320...9e98D28E1
0.025 ETH0.0145435988.44534283
Buy NFT Using Se...139757662022-01-10 5:03:391051 days ago1641791019IN
0x04197320...9e98D28E1
0.025 ETH0.0173476688.44534283
Set Fee139471192022-01-05 18:41:391056 days ago1641408099IN
0x04197320...9e98D28E1
0 ETH0.00541606115.98304431
Set Project Allo...139471192022-01-05 18:41:391056 days ago1641408099IN
0x04197320...9e98D28E1
0 ETH0.00541849115.98304431
Set Fee139470512022-01-05 18:28:101056 days ago1641407290IN
0x04197320...9e98D28E1
0 ETH0.00634415135.85778854
Set Project Allo...139470512022-01-05 18:28:101056 days ago1641407290IN
0x04197320...9e98D28E1
0 ETH0.00639372136.85778854
Set Fee139350152022-01-03 21:49:341058 days ago1641246574IN
0x04197320...9e98D28E1
0 ETH0.00574842194.22325095
Set Fee139350152022-01-03 21:49:341058 days ago1641246574IN
0x04197320...9e98D28E1
0 ETH0.00906964194.22325095
Set Project Allo...139350102022-01-03 21:48:001058 days ago1641246480IN
0x04197320...9e98D28E1
0 ETH0.0094703202.71221255
Set Project Allo...139167932022-01-01 2:19:181060 days ago1641003558IN
0x04197320...9e98D28E1
0 ETH0.0037104579.42236627
Set Fee139167932022-01-01 2:19:181060 days ago1641003558IN
0x04197320...9e98D28E1
0 ETH0.0037087879.42236627
Accept Ownership139167902022-01-01 2:18:271060 days ago1641003507IN
0x04197320...9e98D28E1
0 ETH0.0023728682.59460706
Transfer Ownersh...138974902021-12-29 2:25:411063 days ago1640744741IN
0x04197320...9e98D28E1
0 ETH0.00602844130.15058341
Buy NFT Using Se...138974732021-12-29 2:20:291063 days ago1640744429IN
0x04197320...9e98D28E1
0.089 ETH0.0140355778.39349011
Set Project Allo...138894332021-12-27 20:34:461065 days ago1640637286IN
0x04197320...9e98D28E1
0 ETH0.0031236866.86253751
Set Fee138894332021-12-27 20:34:461065 days ago1640637286IN
0x04197320...9e98D28E1
0 ETH0.0030827966
Set Project Allo...138854092021-12-27 5:31:301065 days ago1640583090IN
0x04197320...9e98D28E1
0 ETH0.0035349775.66632155
Set Fee138854092021-12-27 5:31:301065 days ago1640583090IN
0x04197320...9e98D28E1
0 ETH0.0035342975.66632155
Set Fee132455182021-09-17 20:54:201166 days ago1631912060IN
0x04197320...9e98D28E1
0 ETH0.0025074584.68565029
Cancel Offchain ...132451682021-09-17 19:35:581166 days ago1631907358IN
0x04197320...9e98D28E1
0 ETH0.00348512100.52290531
Sell NFT Using B...132450532021-09-17 19:08:161166 days ago1631905696IN
0x04197320...9e98D28E1
0 ETH0.0112856872.85366984
Set Fee132443962021-09-17 16:47:101166 days ago1631897230IN
0x04197320...9e98D28E1
0 ETH0.003621377.54899488
Set Project Allo...132443882021-09-17 16:45:381166 days ago1631897138IN
0x04197320...9e98D28E1
0 ETH0.0039166283.83548753
View all transactions

Latest 8 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
139763582022-01-10 7:18:431051 days ago1641799123
0x04197320...9e98D28E1
0.001107 ETH
139763582022-01-10 7:18:431051 days ago1641799123
0x04197320...9e98D28E1
0.035793 ETH
139757662022-01-10 5:03:391051 days ago1641791019
0x04197320...9e98D28E1
0.00075 ETH
139757662022-01-10 5:03:391051 days ago1641791019
0x04197320...9e98D28E1
0.02425 ETH
139757662022-01-10 5:03:391051 days ago1641791019
0x04197320...9e98D28E1
0.00075 ETH
139757662022-01-10 5:03:391051 days ago1641791019
0x04197320...9e98D28E1
0.02425 ETH
138974732021-12-29 2:20:291063 days ago1640744429
0x04197320...9e98D28E1
0.00267 ETH
138974732021-12-29 2:20:291063 days ago1640744429
0x04197320...9e98D28E1
0.08633 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BlockStore

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-17
*/

pragma solidity ^0.8.0;


/**
 NFT BlockStore 

 Made with <3 by InfernalToast 
*/
 
 
 interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


/// @title ERC-721 Non-Fungible Token Standard
       /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
       ///  Note: the ERC-165 identifier for this interface is 0x80ac58cd
       interface ERC721 /* is ERC165 */ {
           /// @dev This emits when ownership of any NFT changes by any mechanism.
           ///  This event emits when NFTs are created (`from` == 0) and destroyed
           ///  (`to` == 0). Exception: during contract creation, any number of NFTs
           ///  may be created and assigned without emitting Transfer. At the time of
           ///  any transfer, the approved address for that NFT (if any) is reset to none.
           event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);

           /// @dev This emits when the approved address for an NFT is changed or
           ///  reaffirmed. The zero address indicates there is no approved address.
           ///  When a Transfer event emits, this also indicates that the approved
           ///  address for that NFT (if any) is reset to none.
           event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);

           /// @dev This emits when an operator is enabled or disabled for an owner.
           ///  The operator can manage all NFTs of the owner.
           event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

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

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

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

           /// @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 payable;

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

           /// @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 payable;

           /// @notice Enable or disable approval for a third party ("operator") to manage
           ///  all of `msg.sender`'s assets.
           /// @dev Emits the ApprovalForAll event. The contract MUST allow
           ///  multiple operators per owner.
           /// @param _operator Address to add to the set of authorized operators.
           /// @param _approved True if the operator is approved, false to revoke approval
           function setApprovalForAll(address _operator, bool _approved) external;

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

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

       interface ERC165 {
           /// @notice Query if a contract implements an interface
           /// @param interfaceID The interface identifier, as specified in ERC-165
           /// @dev Interface identification is specified in ERC-165. This function
           ///  uses less than 30,000 gas.
           /// @return `true` if the contract implements `interfaceID` and
           ///  `interfaceID` is not 0xffffffff, `false` otherwise
           function supportsInterface(bytes4 interfaceID) external view returns (bool);
       }

       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.
           /// @notice 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);
        }
        
        interface ProjectBasedNFT {
            function tokenIdToProjectId(uint256 tokenId) external returns(uint256);
        }



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

// Owned contract

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

contract Owned {

    address public owner;

    address public newOwner;


    event OwnershipTransferred(address indexed _from, address indexed _to);


    constructor() public {

        owner = msg.sender;

    }


    modifier onlyOwner {

        require(msg.sender == owner);

        _;

    }


    function transferOwnership(address _newOwner) public onlyOwner {

        newOwner = _newOwner;

    }

    function acceptOwnership() public {

        require(msg.sender == newOwner);

        emit OwnershipTransferred(owner, newOwner);

        owner = newOwner;

        newOwner = address(0);

    }

}




contract ECRecovery {

  /**
   * @dev Recover signer address from a message by using their signature
   * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
   * @param sig bytes signature, the signature is generated using web3.eth.sign()
   */
  function recover(bytes32 hash, bytes memory sig) internal  pure returns (address) {
    bytes32 r;
    bytes32 s;
    uint8 v;

    //Check the signature length
    if (sig.length != 65) {
      return (address(0));
    }

    // Divide the signature in r, s and v variables
    assembly {
      r := mload(add(sig, 32))
      s := mload(add(sig, 64))
      v := byte(0, mload(add(sig, 96)))
    }

    // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
    if (v < 27) {
      v += 27;
    }

    // If the version is correct return the signer address
    if (v != 27 && v != 28) {
      return (address(0));
    } else {
      return ecrecover(hash, v, r, s);
    }
  }

}


/*

  An NFT exchange for ERC721 tokens 

  Supports offchain sell orders 

  Supports offchain buy orders 
 
*/

contract BlockStore is Owned, ECRecovery  {
 
    
  mapping (address => mapping(bytes32 => uint)) public burnedNonces; 
    
  

  mapping(address => uint256) public _fee_pct;
  mapping(address => bool) public _allowedNFTContractAddress;

  address constant internal NATIVE_ETH = 0x0000000000000000000000000000000000000010;
 
  mapping (address => uint256) userSellOrderNonce; 
                                         
 
  constructor(  ) public { 
   
  }

  function setFee( address projectContract, uint fee_pct ) public onlyOwner { 
    require(fee_pct >= 0 && fee_pct <=1000);

    _fee_pct[projectContract] = fee_pct; 
  }



  function setProjectAllowed( address projectContract, bool allow ) public onlyOwner { 
    
    _allowedNFTContractAddress[projectContract] = allow; 
  }


  //Do not allow ETH to enter
  receive() external payable {
    revert();
  }

  fallback() external payable {
    revert();
  }

  function getChainID() public view returns (uint256) {
    uint256 id;
    assembly {
        id := chainid()
    }
    return id;
  }
  
  
   
  event nftSale(address sellerAddress, address buyerAddress, address nftContractAddress, uint256 nftTokenId, address currencyTokenAddress, uint256 currencyTokenAmount);
  
  event nonceBurned(address indexed signer, bytes32 nonce);

  struct OffchainOrder {
   
    address orderCreator;
    bool isSellOrder;  //if false then its a buy order 

    address nftContractAddress;
    uint256 nftTokenId;

    address currencyTokenAddress; //if 0x10 that means eth 
    uint256 currencyTokenAmount;
    
    bytes32 nonce;//only used for sell orders and is random, used by front end to group offchain orders together 
    uint256 expires; 
  }
 
  
     bytes32 constant EIP712DOMAIN_TYPEHASH = keccak256(
          "EIP712Domain(string contractName,string version,uint256 chainId,address verifyingContract)"
      );

   function getBidDomainTypehash() public pure returns (bytes32) {
      return EIP712DOMAIN_TYPEHASH;
   }

   function getEIP712DomainHash(string memory contractName, string memory version, uint256 chainId, address verifyingContract) public pure returns (bytes32) {

      return keccak256(abi.encode(
            EIP712DOMAIN_TYPEHASH,
            keccak256(bytes(contractName)),
            keccak256(bytes(version)),
            chainId,
            verifyingContract
        ));
    }
 

  bytes32 constant ORDER_TYPEHASH = keccak256(  
    "OffchainOrder(address orderCreator,bool isSellOrder,address nftContractAddress,uint256 nftTokenId,address currencyTokenAddress,uint256 currencyTokenAmount,bytes32 nonce,uint256 expires)"
  );

  


  function getOrderTypehash()  public pure returns (bytes32) {
      return ORDER_TYPEHASH;
  }


  
  function getOrderHash(address orderCreator,bool isSellOrder,address nftContractAddress,uint256 nftTokenId,address currencyTokenAddress, uint256 currencyTokenAmount,bytes32 nonce,uint256 expires) public pure returns (bytes32) {
          return keccak256(abi.encode(
              ORDER_TYPEHASH,
              orderCreator,
              isSellOrder,
              nftContractAddress,
              nftTokenId,
              currencyTokenAddress,
              currencyTokenAmount,
              nonce,
              expires
          ));
      }

 

  function getOrderTypedDataHash(address orderCreator,bool isSellOrder,address nftContractAddress,uint256 nftTokenId,address currencyTokenAddress, uint256 currencyTokenAmount,bytes32 nonce,uint256 expires) public view returns (bytes32) {
 
              bytes32 digest = keccak256(abi.encodePacked(
                  "\x19\x01",
                  getEIP712DomainHash('BlockStore','1',getChainID(),address(this)),
                  getOrderHash(orderCreator,isSellOrder,nftContractAddress,nftTokenId,currencyTokenAddress,currencyTokenAmount,nonce,expires)
              ));
              return digest;
          }
  

  //require pre-approval from the buyer in the form of a personal sign of an offchain buy order 
  function sellNFTUsingBuyOrder(address buyer, address nftContractAddress, uint256 nftTokenId, address currencyToken, uint256 currencyAmount, bytes32 nonce, uint256 expires, bytes memory buyerSignature) public returns (bool){

      require(_allowedNFTContractAddress[nftContractAddress],'Project not allowed');

      //require personalsign from buyer to be submitted by seller  
      bytes32 sigHash = getOrderTypedDataHash(buyer,false,nftContractAddress,nftTokenId,currencyToken,currencyAmount,nonce,expires);
 
       
      require(buyer ==  recover(sigHash,buyerSignature) , 'Invalid signature');
         
      
      require(block.number < expires || expires == 0, 'bid expired');

      require(burnedNonces[buyer][nonce] == 0, 'nonce already burned');
      burnedNonces[buyer][nonce] = 0x1;
       
      
      ERC721(nftContractAddress).safeTransferFrom(msg.sender, buyer, nftTokenId);
      
      _transferCurrencyForSale(buyer,msg.sender,currencyToken,currencyAmount,_fee_pct[nftContractAddress]);
      
      
      emit nftSale(msg.sender, buyer,  nftContractAddress, nftTokenId, currencyToken, currencyAmount);
      emit nonceBurned(buyer, nonce);

      return true;
  }


  function buyNFTUsingSellOrder(address seller, address nftContractAddress, uint256 nftTokenId, address currencyToken, uint256 currencyAmount, bytes32 nonce, uint256 expires, bytes memory sellerSignature) payable public returns (bool){

      require(_allowedNFTContractAddress[nftContractAddress],'Project not allowed');


      //require personalsign from seller to be submitted by buyer  
      bytes32 sigHash = getOrderTypedDataHash(seller,true,nftContractAddress,nftTokenId,currencyToken,currencyAmount,nonce,expires);

      
       
      require(seller == recover(sigHash,sellerSignature), 'Invalid signature');
       
      
      require(block.number < expires || expires == 0, 'bid expired');
     
      require(burnedNonces[seller][nonce] == 0, 'nonce already burned');
      burnedNonces[seller][nonce] = 0x1;
       
      
      ERC721(nftContractAddress).safeTransferFrom(seller, msg.sender, nftTokenId);
      
      _transferCurrencyForSale(msg.sender,seller,currencyToken,currencyAmount,_fee_pct[nftContractAddress]);
      
      
      emit nftSale(  seller,  msg.sender, nftContractAddress, nftTokenId, currencyToken, currencyAmount);
      emit nonceBurned(seller, nonce);

      return true;
  }
  
  function _transferCurrencyForSale(address from, address to, address currencyToken, uint256 currencyAmount, uint256 feePct) internal returns (bool){
    uint256 feeAmount = (currencyAmount * feePct)/(10000);

    if(currencyToken == NATIVE_ETH){  
      require(msg.value == currencyAmount,'incorrect payment value'); 
      payable(to).transfer( currencyAmount - (feeAmount) );
      payable(owner).transfer( feeAmount );
    }else{
      require(msg.value == 0,'incorrect payment value'); 
      require( IERC20(currencyToken).transferFrom(from, to, currencyAmount - (feeAmount) ), 'unable to pay' );
      require( IERC20(currencyToken).transferFrom(from, owner, feeAmount ), 'unable to pay'  ); 
    }
    
    return true;
  } 
  
   
  function cancelOffchainOrder(address orderCreator, bool isSellOrder, address nftContractAddress, uint256 nftTokenId, address currencyToken, uint256 currencyAmount, bytes32 nonce, uint256 expires, bytes memory offchainSignature ) public returns (bool){
      bytes32 sigHash = getOrderTypedDataHash(orderCreator,isSellOrder,nftContractAddress,nftTokenId,currencyToken,currencyAmount,nonce,expires);
      address recoveredSignatureSigner = recover(sigHash,offchainSignature);
      
      require(orderCreator == recoveredSignatureSigner, 'Invalid signature');
      require(msg.sender == recoveredSignatureSigner, 'Not signature owner');


      require(burnedNonces[orderCreator][nonce] == 0, 'Nonce already burned');
      burnedNonces[orderCreator][nonce] = 0x2;
        
      emit nonceBurned(orderCreator, nonce);
      
      return true;
  }
  
  
  
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sellerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"buyerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"nftContractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"currencyTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"currencyTokenAmount","type":"uint256"}],"name":"nftSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"bytes32","name":"nonce","type":"bytes32"}],"name":"nonceBurned","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_allowedNFTContractAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_fee_pct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"burnedNonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"address","name":"currencyToken","type":"address"},{"internalType":"uint256","name":"currencyAmount","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"bytes","name":"sellerSignature","type":"bytes"}],"name":"buyNFTUsingSellOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"orderCreator","type":"address"},{"internalType":"bool","name":"isSellOrder","type":"bool"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"address","name":"currencyToken","type":"address"},{"internalType":"uint256","name":"currencyAmount","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"bytes","name":"offchainSignature","type":"bytes"}],"name":"cancelOffchainOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBidDomainTypehash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"}],"name":"getEIP712DomainHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"orderCreator","type":"address"},{"internalType":"bool","name":"isSellOrder","type":"bool"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"address","name":"currencyTokenAddress","type":"address"},{"internalType":"uint256","name":"currencyTokenAmount","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"expires","type":"uint256"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"orderCreator","type":"address"},{"internalType":"bool","name":"isSellOrder","type":"bool"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"address","name":"currencyTokenAddress","type":"address"},{"internalType":"uint256","name":"currencyTokenAmount","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"expires","type":"uint256"}],"name":"getOrderTypedDataHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOrderTypehash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"address","name":"currencyToken","type":"address"},{"internalType":"uint256","name":"currencyAmount","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"bytes","name":"buyerSignature","type":"bytes"}],"name":"sellNFTUsingBuyOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"projectContract","type":"address"},{"internalType":"uint256","name":"fee_pct","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"projectContract","type":"address"},{"internalType":"bool","name":"allow","type":"bool"}],"name":"setProjectAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612824806100606000396000f3fe60806040526004361061010d5760003560e01c8063564b81ef11610095578063d327c1eb11610064578063d327c1eb146103ba578063d4ee1d90146103f7578063e55156b514610422578063e96f91541461044b578063f2fde38b1461047457610117565b8063564b81ef1461031057806359df7fcb1461033b57806379ba5097146103785780638da5cb5b1461038f57610117565b80632d0ab88b116100dc5780632d0ab88b146102105780632fa7872e146102405780633550b2001461027d578063366061d5146102a85780633f7ef831146102e557610117565b806308d74c251461011c5780631744936914610159578063241ecc7b146101965780632c94902f146101d357610117565b3661011757600080fd5b600080fd5b34801561012857600080fd5b50610143600480360381019061013e9190611a09565b61049d565b60405161015091906120b7565b60405180910390f35b34801561016557600080fd5b50610180600480360381019061017b9190611a36565b6104bd565b60405161018d91906120b7565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190611b48565b610869565b6040516101ca91906120d2565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190611b48565b610932565b60405161020791906120d2565b60405180910390f35b61022a60048036038101906102259190611a36565b610999565b60405161023791906120b7565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190611bfe565b610d45565b60405161027491906120b7565b60405180910390f35b34801561028957600080fd5b50610292610f8d565b60405161029f91906120d2565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190611a09565b610fb5565b6040516102dc9190612312565b60405180910390f35b3480156102f157600080fd5b506102fa610fcd565b60405161030791906120d2565b60405180910390f35b34801561031c57600080fd5b50610325610ff5565b6040516103329190612312565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190611ce4565b611002565b60405161036f9190612312565b60405180910390f35b34801561038457600080fd5b5061038d611027565b005b34801561039b57600080fd5b506103a46111c3565b6040516103b19190612004565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190611d91565b6111e7565b6040516103ee91906120d2565b60405180910390f35b34801561040357600080fd5b5061040c611250565b6040516104199190612004565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190611d24565b611276565b005b34801561045757600080fd5b50610472600480360381019061046d9190611b08565b611332565b005b34801561048057600080fd5b5061049b60048036038101906104969190611a09565b6113e5565b005b60046020528060005260406000206000915054906101000a900460ff1681565b6000600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661054b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054290612232565b60405180910390fd5b600061055e8a60008b8b8b8b8b8b610869565b905061056a8184611481565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146105d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ce90612252565b60405180910390fd5b834310806105e55750600084145b610624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061b906122b2565b60405180910390fd5b6000600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054146106b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ae906122f2565b60405180910390fd5b6001600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff166342842e0e338c8b6040518463ffffffff1660e01b815260040161074a93929190612080565b600060405180830381600087803b15801561076457600080fd5b505af1158015610778573d6000803e3d6000fd5b505050506107c88a338989600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611554565b507f28781f4ba8c1b5643c2e49f77530bf25db9bfed4aaeb6b27d30456977fd3b02a338b8b8b8b8b6040516108029695949392919061201f565b60405180910390a18973ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d428660405161085091906120d2565b60405180910390a2600191505098975050505050505050565b6000806108e96040518060400160405280600a81526020017f426c6f636b53746f7265000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506108e3610ff5565b306111e7565b6108f98b8b8b8b8b8b8b8b610932565b60405160200161090a929190611fcd565b6040516020818303038152906040528051906020012090508091505098975050505050505050565b60007f54b3c1756bc0bbf0aeee3b068a490af815c4e2aec2b74fe30299af5c8128512d8989898989898989604051602001610975999897969594939291906120ed565b60405160208183030381529060405280519060200120905098975050505050505050565b6000600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e90612232565b60405180910390fd5b6000610a3a8a60018b8b8b8b8b8b610869565b9050610a468184611481565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90612252565b60405180910390fd5b83431080610ac15750600084145b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906122b2565b60405180910390fd5b6000600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000205414610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a906122f2565b60405180910390fd5b6001600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff166342842e0e8b338b6040518463ffffffff1660e01b8152600401610c2693929190612080565b600060405180830381600087803b158015610c4057600080fd5b505af1158015610c54573d6000803e3d6000fd5b50505050610ca4338b8989600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611554565b507f28781f4ba8c1b5643c2e49f77530bf25db9bfed4aaeb6b27d30456977fd3b02a8a338b8b8b8b604051610cde9695949392919061201f565b60405180910390a18973ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d4286604051610d2c91906120d2565b60405180910390a2600191505098975050505050505050565b600080610d588b8b8b8b8b8b8b8b610869565b90506000610d668285611481565b90508073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90612252565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b90612292565b60405180910390fd5b6000600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008881526020019081526020016000205414610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90612272565b60405180910390fd5b60028060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000888152602001908152602001600020819055508b73ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d4287604051610f7291906120d2565b60405180910390a26001925050509998505050505050505050565b60007f192cc950ea91249f00438da639925266abcf45b8888b1cc8337025000a631232905090565b60036020528060005260406000206000915090505481565b60007f54b3c1756bc0bbf0aeee3b068a490af815c4e2aec2b74fe30299af5c8128512d905090565b6000804690508091505090565b6002602052816000526040600020602052806000526040600020600091509150505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108157600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f192cc950ea91249f00438da639925266abcf45b8888b1cc8337025000a63123285805190602001208580519060200120858560405160200161123095949392919061217a565b604051602081830303815290604052805190602001209050949350505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112ce57600080fd5b600081101580156112e157506103e88111155b6112ea57600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138a57600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461143d57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080604185511461149c576000935050505061154e565b6020850151925060408501519150606085015160001a9050601b8160ff1610156114d057601b816114cd91906123d0565b90505b601b8160ff16141580156114e85750601c8160ff1614155b156114f9576000935050505061154e565b6001868285856040516000815260200160405260405161151c94939291906121cd565b6020604051602081039080840390855afa15801561153e573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008061271083856115669190612438565b6115709190612407565b9050601073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156116a7578334146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090612212565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc828661160f9190612492565b9081150290604051600060405180830381858888f1935050505015801561163a573d6000803e3d6000fd5b5060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116a1573d6000803e3d6000fd5b506118b2565b600034146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190612212565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd888884886117149190612492565b6040518463ffffffff1660e01b815260040161173293929190612080565b602060405180830381600087803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117849190611d64565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906122d2565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd8860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161182093929190612080565b602060405180830381600087803b15801561183a57600080fd5b505af115801561184e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118729190611d64565b6118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a8906122d2565b60405180910390fd5b5b600191505095945050505050565b60006118d36118ce84612352565b61232d565b9050828152602081018484840111156118ef576118ee612601565b5b6118fa848285612525565b509392505050565b600061191561191084612383565b61232d565b90508281526020810184848401111561193157611930612601565b5b61193c848285612525565b509392505050565b60008135905061195381612792565b92915050565b600081359050611968816127a9565b92915050565b60008151905061197d816127a9565b92915050565b600081359050611992816127c0565b92915050565b600082601f8301126119ad576119ac6125fc565b5b81356119bd8482602086016118c0565b91505092915050565b600082601f8301126119db576119da6125fc565b5b81356119eb848260208601611902565b91505092915050565b600081359050611a03816127d7565b92915050565b600060208284031215611a1f57611a1e61260b565b5b6000611a2d84828501611944565b91505092915050565b600080600080600080600080610100898b031215611a5757611a5661260b565b5b6000611a658b828c01611944565b9850506020611a768b828c01611944565b9750506040611a878b828c016119f4565b9650506060611a988b828c01611944565b9550506080611aa98b828c016119f4565b94505060a0611aba8b828c01611983565b93505060c0611acb8b828c016119f4565b92505060e089013567ffffffffffffffff811115611aec57611aeb612606565b5b611af88b828c01611998565b9150509295985092959890939650565b60008060408385031215611b1f57611b1e61260b565b5b6000611b2d85828601611944565b9250506020611b3e85828601611959565b9150509250929050565b600080600080600080600080610100898b031215611b6957611b6861260b565b5b6000611b778b828c01611944565b9850506020611b888b828c01611959565b9750506040611b998b828c01611944565b9650506060611baa8b828c016119f4565b9550506080611bbb8b828c01611944565b94505060a0611bcc8b828c016119f4565b93505060c0611bdd8b828c01611983565b92505060e0611bee8b828c016119f4565b9150509295985092959890939650565b60008060008060008060008060006101208a8c031215611c2157611c2061260b565b5b6000611c2f8c828d01611944565b9950506020611c408c828d01611959565b9850506040611c518c828d01611944565b9750506060611c628c828d016119f4565b9650506080611c738c828d01611944565b95505060a0611c848c828d016119f4565b94505060c0611c958c828d01611983565b93505060e0611ca68c828d016119f4565b9250506101008a013567ffffffffffffffff811115611cc857611cc7612606565b5b611cd48c828d01611998565b9150509295985092959850929598565b60008060408385031215611cfb57611cfa61260b565b5b6000611d0985828601611944565b9250506020611d1a85828601611983565b9150509250929050565b60008060408385031215611d3b57611d3a61260b565b5b6000611d4985828601611944565b9250506020611d5a858286016119f4565b9150509250929050565b600060208284031215611d7a57611d7961260b565b5b6000611d888482850161196e565b91505092915050565b60008060008060808587031215611dab57611daa61260b565b5b600085013567ffffffffffffffff811115611dc957611dc8612606565b5b611dd5878288016119c6565b945050602085013567ffffffffffffffff811115611df657611df5612606565b5b611e02878288016119c6565b9350506040611e13878288016119f4565b9250506060611e2487828801611944565b91505092959194509250565b611e39816124c6565b82525050565b611e48816124d8565b82525050565b611e57816124e4565b82525050565b611e6e611e69826124e4565b612565565b82525050565b6000611e816017836123b4565b9150611e8c82612621565b602082019050919050565b6000611ea46002836123c5565b9150611eaf8261264a565b600282019050919050565b6000611ec76013836123b4565b9150611ed282612673565b602082019050919050565b6000611eea6011836123b4565b9150611ef58261269c565b602082019050919050565b6000611f0d6014836123b4565b9150611f18826126c5565b602082019050919050565b6000611f306013836123b4565b9150611f3b826126ee565b602082019050919050565b6000611f53600b836123b4565b9150611f5e82612717565b602082019050919050565b6000611f76600d836123b4565b9150611f8182612740565b602082019050919050565b6000611f996014836123b4565b9150611fa482612769565b602082019050919050565b611fb88161250e565b82525050565b611fc781612518565b82525050565b6000611fd882611e97565b9150611fe48285611e5d565b602082019150611ff48284611e5d565b6020820191508190509392505050565b60006020820190506120196000830184611e30565b92915050565b600060c0820190506120346000830189611e30565b6120416020830188611e30565b61204e6040830187611e30565b61205b6060830186611faf565b6120686080830185611e30565b61207560a0830184611faf565b979650505050505050565b60006060820190506120956000830186611e30565b6120a26020830185611e30565b6120af6040830184611faf565b949350505050565b60006020820190506120cc6000830184611e3f565b92915050565b60006020820190506120e76000830184611e4e565b92915050565b600061012082019050612103600083018c611e4e565b612110602083018b611e30565b61211d604083018a611e3f565b61212a6060830189611e30565b6121376080830188611faf565b61214460a0830187611e30565b61215160c0830186611faf565b61215e60e0830185611e4e565b61216c610100830184611faf565b9a9950505050505050505050565b600060a08201905061218f6000830188611e4e565b61219c6020830187611e4e565b6121a96040830186611e4e565b6121b66060830185611faf565b6121c36080830184611e30565b9695505050505050565b60006080820190506121e26000830187611e4e565b6121ef6020830186611fbe565b6121fc6040830185611e4e565b6122096060830184611e4e565b95945050505050565b6000602082019050818103600083015261222b81611e74565b9050919050565b6000602082019050818103600083015261224b81611eba565b9050919050565b6000602082019050818103600083015261226b81611edd565b9050919050565b6000602082019050818103600083015261228b81611f00565b9050919050565b600060208201905081810360008301526122ab81611f23565b9050919050565b600060208201905081810360008301526122cb81611f46565b9050919050565b600060208201905081810360008301526122eb81611f69565b9050919050565b6000602082019050818103600083015261230b81611f8c565b9050919050565b60006020820190506123276000830184611faf565b92915050565b6000612337612348565b90506123438282612534565b919050565b6000604051905090565b600067ffffffffffffffff82111561236d5761236c6125cd565b5b61237682612610565b9050602081019050919050565b600067ffffffffffffffff82111561239e5761239d6125cd565b5b6123a782612610565b9050602081019050919050565b600082825260208201905092915050565b600081905092915050565b60006123db82612518565b91506123e683612518565b92508260ff038211156123fc576123fb61256f565b5b828201905092915050565b60006124128261250e565b915061241d8361250e565b92508261242d5761242c61259e565b5b828204905092915050565b60006124438261250e565b915061244e8361250e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124875761248661256f565b5b828202905092915050565b600061249d8261250e565b91506124a88361250e565b9250828210156124bb576124ba61256f565b5b828203905092915050565b60006124d1826124ee565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b61253d82612610565b810181811067ffffffffffffffff8211171561255c5761255b6125cd565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f696e636f7272656374207061796d656e742076616c7565000000000000000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f50726f6a656374206e6f7420616c6c6f77656400000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f4e6f6e636520616c7265616479206275726e6564000000000000000000000000600082015250565b7f4e6f74207369676e6174757265206f776e657200000000000000000000000000600082015250565b7f6269642065787069726564000000000000000000000000000000000000000000600082015250565b7f756e61626c6520746f2070617900000000000000000000000000000000000000600082015250565b7f6e6f6e636520616c7265616479206275726e6564000000000000000000000000600082015250565b61279b816124c6565b81146127a657600080fd5b50565b6127b2816124d8565b81146127bd57600080fd5b50565b6127c9816124e4565b81146127d457600080fd5b50565b6127e08161250e565b81146127eb57600080fd5b5056fea2646970667358221220158c81f9697cca17395f4f8cb4a63acd62936987dff8307fb3bd3c3c751683a264736f6c63430008070033

Deployed Bytecode

0x60806040526004361061010d5760003560e01c8063564b81ef11610095578063d327c1eb11610064578063d327c1eb146103ba578063d4ee1d90146103f7578063e55156b514610422578063e96f91541461044b578063f2fde38b1461047457610117565b8063564b81ef1461031057806359df7fcb1461033b57806379ba5097146103785780638da5cb5b1461038f57610117565b80632d0ab88b116100dc5780632d0ab88b146102105780632fa7872e146102405780633550b2001461027d578063366061d5146102a85780633f7ef831146102e557610117565b806308d74c251461011c5780631744936914610159578063241ecc7b146101965780632c94902f146101d357610117565b3661011757600080fd5b600080fd5b34801561012857600080fd5b50610143600480360381019061013e9190611a09565b61049d565b60405161015091906120b7565b60405180910390f35b34801561016557600080fd5b50610180600480360381019061017b9190611a36565b6104bd565b60405161018d91906120b7565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190611b48565b610869565b6040516101ca91906120d2565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190611b48565b610932565b60405161020791906120d2565b60405180910390f35b61022a60048036038101906102259190611a36565b610999565b60405161023791906120b7565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190611bfe565b610d45565b60405161027491906120b7565b60405180910390f35b34801561028957600080fd5b50610292610f8d565b60405161029f91906120d2565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190611a09565b610fb5565b6040516102dc9190612312565b60405180910390f35b3480156102f157600080fd5b506102fa610fcd565b60405161030791906120d2565b60405180910390f35b34801561031c57600080fd5b50610325610ff5565b6040516103329190612312565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190611ce4565b611002565b60405161036f9190612312565b60405180910390f35b34801561038457600080fd5b5061038d611027565b005b34801561039b57600080fd5b506103a46111c3565b6040516103b19190612004565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190611d91565b6111e7565b6040516103ee91906120d2565b60405180910390f35b34801561040357600080fd5b5061040c611250565b6040516104199190612004565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190611d24565b611276565b005b34801561045757600080fd5b50610472600480360381019061046d9190611b08565b611332565b005b34801561048057600080fd5b5061049b60048036038101906104969190611a09565b6113e5565b005b60046020528060005260406000206000915054906101000a900460ff1681565b6000600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661054b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054290612232565b60405180910390fd5b600061055e8a60008b8b8b8b8b8b610869565b905061056a8184611481565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146105d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ce90612252565b60405180910390fd5b834310806105e55750600084145b610624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061b906122b2565b60405180910390fd5b6000600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054146106b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ae906122f2565b60405180910390fd5b6001600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff166342842e0e338c8b6040518463ffffffff1660e01b815260040161074a93929190612080565b600060405180830381600087803b15801561076457600080fd5b505af1158015610778573d6000803e3d6000fd5b505050506107c88a338989600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611554565b507f28781f4ba8c1b5643c2e49f77530bf25db9bfed4aaeb6b27d30456977fd3b02a338b8b8b8b8b6040516108029695949392919061201f565b60405180910390a18973ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d428660405161085091906120d2565b60405180910390a2600191505098975050505050505050565b6000806108e96040518060400160405280600a81526020017f426c6f636b53746f7265000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506108e3610ff5565b306111e7565b6108f98b8b8b8b8b8b8b8b610932565b60405160200161090a929190611fcd565b6040516020818303038152906040528051906020012090508091505098975050505050505050565b60007f54b3c1756bc0bbf0aeee3b068a490af815c4e2aec2b74fe30299af5c8128512d8989898989898989604051602001610975999897969594939291906120ed565b60405160208183030381529060405280519060200120905098975050505050505050565b6000600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e90612232565b60405180910390fd5b6000610a3a8a60018b8b8b8b8b8b610869565b9050610a468184611481565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90612252565b60405180910390fd5b83431080610ac15750600084145b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906122b2565b60405180910390fd5b6000600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000205414610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a906122f2565b60405180910390fd5b6001600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff166342842e0e8b338b6040518463ffffffff1660e01b8152600401610c2693929190612080565b600060405180830381600087803b158015610c4057600080fd5b505af1158015610c54573d6000803e3d6000fd5b50505050610ca4338b8989600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611554565b507f28781f4ba8c1b5643c2e49f77530bf25db9bfed4aaeb6b27d30456977fd3b02a8a338b8b8b8b604051610cde9695949392919061201f565b60405180910390a18973ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d4286604051610d2c91906120d2565b60405180910390a2600191505098975050505050505050565b600080610d588b8b8b8b8b8b8b8b610869565b90506000610d668285611481565b90508073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90612252565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b90612292565b60405180910390fd5b6000600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008881526020019081526020016000205414610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90612272565b60405180910390fd5b60028060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000888152602001908152602001600020819055508b73ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d4287604051610f7291906120d2565b60405180910390a26001925050509998505050505050505050565b60007f192cc950ea91249f00438da639925266abcf45b8888b1cc8337025000a631232905090565b60036020528060005260406000206000915090505481565b60007f54b3c1756bc0bbf0aeee3b068a490af815c4e2aec2b74fe30299af5c8128512d905090565b6000804690508091505090565b6002602052816000526040600020602052806000526040600020600091509150505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108157600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f192cc950ea91249f00438da639925266abcf45b8888b1cc8337025000a63123285805190602001208580519060200120858560405160200161123095949392919061217a565b604051602081830303815290604052805190602001209050949350505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112ce57600080fd5b600081101580156112e157506103e88111155b6112ea57600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138a57600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461143d57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080604185511461149c576000935050505061154e565b6020850151925060408501519150606085015160001a9050601b8160ff1610156114d057601b816114cd91906123d0565b90505b601b8160ff16141580156114e85750601c8160ff1614155b156114f9576000935050505061154e565b6001868285856040516000815260200160405260405161151c94939291906121cd565b6020604051602081039080840390855afa15801561153e573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008061271083856115669190612438565b6115709190612407565b9050601073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156116a7578334146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090612212565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc828661160f9190612492565b9081150290604051600060405180830381858888f1935050505015801561163a573d6000803e3d6000fd5b5060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116a1573d6000803e3d6000fd5b506118b2565b600034146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190612212565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd888884886117149190612492565b6040518463ffffffff1660e01b815260040161173293929190612080565b602060405180830381600087803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117849190611d64565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906122d2565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd8860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161182093929190612080565b602060405180830381600087803b15801561183a57600080fd5b505af115801561184e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118729190611d64565b6118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a8906122d2565b60405180910390fd5b5b600191505095945050505050565b60006118d36118ce84612352565b61232d565b9050828152602081018484840111156118ef576118ee612601565b5b6118fa848285612525565b509392505050565b600061191561191084612383565b61232d565b90508281526020810184848401111561193157611930612601565b5b61193c848285612525565b509392505050565b60008135905061195381612792565b92915050565b600081359050611968816127a9565b92915050565b60008151905061197d816127a9565b92915050565b600081359050611992816127c0565b92915050565b600082601f8301126119ad576119ac6125fc565b5b81356119bd8482602086016118c0565b91505092915050565b600082601f8301126119db576119da6125fc565b5b81356119eb848260208601611902565b91505092915050565b600081359050611a03816127d7565b92915050565b600060208284031215611a1f57611a1e61260b565b5b6000611a2d84828501611944565b91505092915050565b600080600080600080600080610100898b031215611a5757611a5661260b565b5b6000611a658b828c01611944565b9850506020611a768b828c01611944565b9750506040611a878b828c016119f4565b9650506060611a988b828c01611944565b9550506080611aa98b828c016119f4565b94505060a0611aba8b828c01611983565b93505060c0611acb8b828c016119f4565b92505060e089013567ffffffffffffffff811115611aec57611aeb612606565b5b611af88b828c01611998565b9150509295985092959890939650565b60008060408385031215611b1f57611b1e61260b565b5b6000611b2d85828601611944565b9250506020611b3e85828601611959565b9150509250929050565b600080600080600080600080610100898b031215611b6957611b6861260b565b5b6000611b778b828c01611944565b9850506020611b888b828c01611959565b9750506040611b998b828c01611944565b9650506060611baa8b828c016119f4565b9550506080611bbb8b828c01611944565b94505060a0611bcc8b828c016119f4565b93505060c0611bdd8b828c01611983565b92505060e0611bee8b828c016119f4565b9150509295985092959890939650565b60008060008060008060008060006101208a8c031215611c2157611c2061260b565b5b6000611c2f8c828d01611944565b9950506020611c408c828d01611959565b9850506040611c518c828d01611944565b9750506060611c628c828d016119f4565b9650506080611c738c828d01611944565b95505060a0611c848c828d016119f4565b94505060c0611c958c828d01611983565b93505060e0611ca68c828d016119f4565b9250506101008a013567ffffffffffffffff811115611cc857611cc7612606565b5b611cd48c828d01611998565b9150509295985092959850929598565b60008060408385031215611cfb57611cfa61260b565b5b6000611d0985828601611944565b9250506020611d1a85828601611983565b9150509250929050565b60008060408385031215611d3b57611d3a61260b565b5b6000611d4985828601611944565b9250506020611d5a858286016119f4565b9150509250929050565b600060208284031215611d7a57611d7961260b565b5b6000611d888482850161196e565b91505092915050565b60008060008060808587031215611dab57611daa61260b565b5b600085013567ffffffffffffffff811115611dc957611dc8612606565b5b611dd5878288016119c6565b945050602085013567ffffffffffffffff811115611df657611df5612606565b5b611e02878288016119c6565b9350506040611e13878288016119f4565b9250506060611e2487828801611944565b91505092959194509250565b611e39816124c6565b82525050565b611e48816124d8565b82525050565b611e57816124e4565b82525050565b611e6e611e69826124e4565b612565565b82525050565b6000611e816017836123b4565b9150611e8c82612621565b602082019050919050565b6000611ea46002836123c5565b9150611eaf8261264a565b600282019050919050565b6000611ec76013836123b4565b9150611ed282612673565b602082019050919050565b6000611eea6011836123b4565b9150611ef58261269c565b602082019050919050565b6000611f0d6014836123b4565b9150611f18826126c5565b602082019050919050565b6000611f306013836123b4565b9150611f3b826126ee565b602082019050919050565b6000611f53600b836123b4565b9150611f5e82612717565b602082019050919050565b6000611f76600d836123b4565b9150611f8182612740565b602082019050919050565b6000611f996014836123b4565b9150611fa482612769565b602082019050919050565b611fb88161250e565b82525050565b611fc781612518565b82525050565b6000611fd882611e97565b9150611fe48285611e5d565b602082019150611ff48284611e5d565b6020820191508190509392505050565b60006020820190506120196000830184611e30565b92915050565b600060c0820190506120346000830189611e30565b6120416020830188611e30565b61204e6040830187611e30565b61205b6060830186611faf565b6120686080830185611e30565b61207560a0830184611faf565b979650505050505050565b60006060820190506120956000830186611e30565b6120a26020830185611e30565b6120af6040830184611faf565b949350505050565b60006020820190506120cc6000830184611e3f565b92915050565b60006020820190506120e76000830184611e4e565b92915050565b600061012082019050612103600083018c611e4e565b612110602083018b611e30565b61211d604083018a611e3f565b61212a6060830189611e30565b6121376080830188611faf565b61214460a0830187611e30565b61215160c0830186611faf565b61215e60e0830185611e4e565b61216c610100830184611faf565b9a9950505050505050505050565b600060a08201905061218f6000830188611e4e565b61219c6020830187611e4e565b6121a96040830186611e4e565b6121b66060830185611faf565b6121c36080830184611e30565b9695505050505050565b60006080820190506121e26000830187611e4e565b6121ef6020830186611fbe565b6121fc6040830185611e4e565b6122096060830184611e4e565b95945050505050565b6000602082019050818103600083015261222b81611e74565b9050919050565b6000602082019050818103600083015261224b81611eba565b9050919050565b6000602082019050818103600083015261226b81611edd565b9050919050565b6000602082019050818103600083015261228b81611f00565b9050919050565b600060208201905081810360008301526122ab81611f23565b9050919050565b600060208201905081810360008301526122cb81611f46565b9050919050565b600060208201905081810360008301526122eb81611f69565b9050919050565b6000602082019050818103600083015261230b81611f8c565b9050919050565b60006020820190506123276000830184611faf565b92915050565b6000612337612348565b90506123438282612534565b919050565b6000604051905090565b600067ffffffffffffffff82111561236d5761236c6125cd565b5b61237682612610565b9050602081019050919050565b600067ffffffffffffffff82111561239e5761239d6125cd565b5b6123a782612610565b9050602081019050919050565b600082825260208201905092915050565b600081905092915050565b60006123db82612518565b91506123e683612518565b92508260ff038211156123fc576123fb61256f565b5b828201905092915050565b60006124128261250e565b915061241d8361250e565b92508261242d5761242c61259e565b5b828204905092915050565b60006124438261250e565b915061244e8361250e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124875761248661256f565b5b828202905092915050565b600061249d8261250e565b91506124a88361250e565b9250828210156124bb576124ba61256f565b5b828203905092915050565b60006124d1826124ee565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b61253d82612610565b810181811067ffffffffffffffff8211171561255c5761255b6125cd565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f696e636f7272656374207061796d656e742076616c7565000000000000000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f50726f6a656374206e6f7420616c6c6f77656400000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f4e6f6e636520616c7265616479206275726e6564000000000000000000000000600082015250565b7f4e6f74207369676e6174757265206f776e657200000000000000000000000000600082015250565b7f6269642065787069726564000000000000000000000000000000000000000000600082015250565b7f756e61626c6520746f2070617900000000000000000000000000000000000000600082015250565b7f6e6f6e636520616c7265616479206275726e6564000000000000000000000000600082015250565b61279b816124c6565b81146127a657600080fd5b50565b6127b2816124d8565b81146127bd57600080fd5b50565b6127c9816124e4565b81146127d457600080fd5b50565b6127e08161250e565b81146127eb57600080fd5b5056fea2646970667358221220158c81f9697cca17395f4f8cb4a63acd62936987dff8307fb3bd3c3c751683a264736f6c63430008070033

Deployed Bytecode Sourcemap

12950:8251:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13841:8;;;12950:8251;13896:8;;;13137:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17083:1218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16356:619;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15787:558;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18309:1248;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20323:863;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14912:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13089:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15680:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13916:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13006:65;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11557:206;;;;;;;;;;;;;:::i;:::-;;11133:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15025:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11162:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13431:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13613:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11443:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13137:58;;;;;;;;;;;;;;;;;;;;;;:::o;17083:1218::-;17300:4;17324:26;:46;17351:18;17324:46;;;;;;;;;;;;;;;;;;;;;;;;;17316:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;17473:15;17491:107;17513:5;17519;17525:18;17544:10;17555:13;17569:14;17584:5;17590:7;17491:21;:107::i;:::-;17473:125;;17637:31;17645:7;17653:14;17637:7;:31::i;:::-;17627:41;;:5;:41;;;17619:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;17742:7;17727:12;:22;:38;;;;17764:1;17753:7;:12;17727:38;17719:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;17830:1;17800:12;:19;17813:5;17800:19;;;;;;;;;;;;;;;:26;17820:5;17800:26;;;;;;;;;;;;:31;17792:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17894:3;17865:12;:19;17878:5;17865:19;;;;;;;;;;;;;;;:26;17885:5;17865:26;;;;;;;;;;;:32;;;;17930:18;17923:43;;;17967:10;17979:5;17986:10;17923:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18014:100;18039:5;18045:10;18056:13;18070:14;18085:8;:28;18094:18;18085:28;;;;;;;;;;;;;;;;18014:24;:100::i;:::-;;18144:90;18152:10;18164:5;18172:18;18192:10;18204:13;18219:14;18144:90;;;;;;;;;;;:::i;:::-;;;;;;;;18260:5;18248:25;;;18267:5;18248:25;;;;;;:::i;:::-;;;;;;;;18291:4;18284:11;;;17083:1218;;;;;;;;;;:::o;16356:619::-;16581:7;16610:14;16705:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16742:12;:10;:12::i;:::-;16763:4;16705:19;:64::i;:::-;16790:123;16803:12;16816:11;16828:18;16847:10;16858:20;16879:19;16899:5;16905:7;16790:12;:123::i;:::-;16637:293;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16627:304;;;;;;16610:321;;16955:6;16948:13;;;16356:619;;;;;;;;;;:::o;15787:558::-;16003:7;15455:210;16100:12;16129:11;16157:18;16192:10;16219:20;16256:19;16292:5;16314:7;16042:292;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16032:303;;;;;;16025:310;;15787:558;;;;;;;;;;:::o;18309:1248::-;18536:4;18560:26;:46;18587:18;18560:46;;;;;;;;;;;;;;;;;;;;;;;;;18552:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;18711:15;18729:107;18751:6;18758:4;18763:18;18782:10;18793:13;18807:14;18822:5;18828:7;18729:21;:107::i;:::-;18711:125;;18882:32;18890:7;18898:15;18882:7;:32::i;:::-;18872:42;;:6;:42;;;18864:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;18985:7;18970:12;:22;:38;;;;19007:1;18996:7;:12;18970:38;18962:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19079:1;19048:12;:20;19061:6;19048:20;;;;;;;;;;;;;;;:27;19069:5;19048:27;;;;;;;;;;;;:32;19040:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19144:3;19114:12;:20;19127:6;19114:20;;;;;;;;;;;;;;;:27;19135:5;19114:27;;;;;;;;;;;:33;;;;19180:18;19173:43;;;19217:6;19225:10;19237;19173:75;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19265:101;19290:10;19301:6;19308:13;19322:14;19337:8;:28;19346:18;19337:28;;;;;;;;;;;;;;;;19265:24;:101::i;:::-;;19396:93;19406:6;19415:10;19427:18;19447:10;19459:13;19474:14;19396:93;;;;;;;;;;;:::i;:::-;;;;;;;;19515:6;19503:26;;;19523:5;19503:26;;;;;;:::i;:::-;;;;;;;;19547:4;19540:11;;;18309:1248;;;;;;;;;;:::o;20323:863::-;20568:4;20582:15;20600:120;20622:12;20635:11;20647:18;20666:10;20677:13;20691:14;20706:5;20712:7;20600:21;:120::i;:::-;20582:138;;20729:32;20764:34;20772:7;20780:17;20764:7;:34::i;:::-;20729:69;;20839:24;20823:40;;:12;:40;;;20815:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20916:24;20902:38;;:10;:38;;;20894:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;21022:1;20985:12;:26;20998:12;20985:26;;;;;;;;;;;;;;;:33;21012:5;20985:33;;;;;;;;;;;;:38;20977:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21093:3;21057:12;:26;21070:12;21057:26;;;;;;;;;;;;;;;:33;21084:5;21057:33;;;;;;;;;;;:39;;;;21132:12;21120:32;;;21146:5;21120:32;;;;;;:::i;:::-;;;;;;;;21176:4;21169:11;;;;20323:863;;;;;;;;;;;:::o;14912:106::-;14965:7;14781:123;14983:28;;14912:106;:::o;13089:43::-;;;;;;;;;;;;;;;;;:::o;15680:95::-;15730:7;15455:210;15748:21;;15680:95;:::o;13916:139::-;13959:7;13975:10;14018:9;14012:15;;14047:2;14040:9;;;13916:139;:::o;13006:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11557:206::-;11626:8;;;;;;;;;;;11612:22;;:10;:22;;;11604:31;;;;;;11681:8;;;;;;;;;;;11653:37;;11674:5;;;;;;;;;;11653:37;;;;;;;;;;;;11711:8;;;;;;;;;;;11703:5;;:16;;;;;;;;;;;;;;;;;;11751:1;11732:8;;:21;;;;;;;;;;;;;;;;;;11557:206::o;11133:20::-;;;;;;;;;;;;:::o;15025:387::-;15170:7;14781:123;15284:12;15268:30;;;;;;15329:7;15313:25;;;;;;15353:7;15375:17;15207:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15197:207;;;;;;15190:214;;15025:387;;;;;;:::o;11162:23::-;;;;;;;;;;;;;:::o;13431:172::-;11403:5;;;;;;;;;;11389:19;;:10;:19;;;11381:28;;;;;;13532:1:::1;13521:7;:12;;:30;;;;;13547:4;13537:7;:14;;13521:30;13513:39;;;::::0;::::1;;13589:7;13561:8;:25;13570:15;13561:25;;;;;;;;;;;;;;;:35;;;;13431:172:::0;;:::o;13613:155::-;11403:5;;;;;;;;;;11389:19;;:10;:19;;;11381:28;;;;;;13756:5:::1;13710:26;:43;13737:15;13710:43;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;13613:155:::0;;:::o;11443:106::-;11403:5;;;;;;;;;;11389:19;;:10;:19;;;11381:28;;;;;;11530:9:::1;11519:8;;:20;;;;;;;;;;;;;;;;;;11443:106:::0;:::o;12084:731::-;12157:7;12173:9;12189;12205:7;12273:2;12259:3;:10;:16;12255:58;;12302:1;12286:19;;;;;;;12255:58;12412:2;12407:3;12403:12;12397:19;12392:24;;12444:2;12439:3;12435:12;12429:19;12424:24;;12484:2;12479:3;12475:12;12469:19;12466:1;12461:28;12456:33;;12600:2;12596:1;:6;;;12592:36;;;12618:2;12613:7;;;;;:::i;:::-;;;12592:36;12705:2;12700:1;:7;;;;:18;;;;;12716:2;12711:1;:7;;;;12700:18;12696:114;;;12745:1;12729:19;;;;;;;12696:114;12778:24;12788:4;12794:1;12797;12800;12778:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12771:31;;;;;12084:731;;;;;:::o;19565:744::-;19706:4;19718:17;19765:5;19756:6;19739:14;:23;;;;:::i;:::-;19738:33;;;;:::i;:::-;19718:53;;13241:42;19783:27;;:13;:27;;;19780:500;;;19843:14;19830:9;:27;19822:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19902:2;19894:20;;:52;19934:9;19916:14;:28;;;;:::i;:::-;19894:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19963:5;;;;;;;;;;19955:23;;:36;19980:9;19955:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19780:500;;;20033:1;20020:9;:14;20012:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20087:13;20080:34;;;20115:4;20121:2;20143:9;20125:14;:28;;;;:::i;:::-;20080:75;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20071:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;20199:13;20192:34;;;20227:4;20233:5;;;;;;;;;;20240:9;20192:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20183:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;19780:500;20299:4;20292:11;;;19565:744;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:139::-;1314:5;1352:6;1339:20;1330:29;;1368:33;1395:5;1368:33;:::i;:::-;1268:139;;;;:::o;1426:338::-;1481:5;1530:3;1523:4;1515:6;1511:17;1507:27;1497:122;;1538:79;;:::i;:::-;1497:122;1655:6;1642:20;1680:78;1754:3;1746:6;1739:4;1731:6;1727:17;1680:78;:::i;:::-;1671:87;;1487:277;1426:338;;;;:::o;1784:340::-;1840:5;1889:3;1882:4;1874:6;1870:17;1866:27;1856:122;;1897:79;;:::i;:::-;1856:122;2014:6;2001:20;2039:79;2114:3;2106:6;2099:4;2091:6;2087:17;2039:79;:::i;:::-;2030:88;;1846:278;1784:340;;;;:::o;2130:139::-;2176:5;2214:6;2201:20;2192:29;;2230:33;2257:5;2230:33;:::i;:::-;2130:139;;;;:::o;2275:329::-;2334:6;2383:2;2371:9;2362:7;2358:23;2354:32;2351:119;;;2389:79;;:::i;:::-;2351:119;2509:1;2534:53;2579:7;2570:6;2559:9;2555:22;2534:53;:::i;:::-;2524:63;;2480:117;2275:329;;;;:::o;2610:1527::-;2741:6;2749;2757;2765;2773;2781;2789;2797;2846:3;2834:9;2825:7;2821:23;2817:33;2814:120;;;2853:79;;:::i;:::-;2814:120;2973:1;2998:53;3043:7;3034:6;3023:9;3019:22;2998:53;:::i;:::-;2988:63;;2944:117;3100:2;3126:53;3171:7;3162:6;3151:9;3147:22;3126:53;:::i;:::-;3116:63;;3071:118;3228:2;3254:53;3299:7;3290:6;3279:9;3275:22;3254:53;:::i;:::-;3244:63;;3199:118;3356:2;3382:53;3427:7;3418:6;3407:9;3403:22;3382:53;:::i;:::-;3372:63;;3327:118;3484:3;3511:53;3556:7;3547:6;3536:9;3532:22;3511:53;:::i;:::-;3501:63;;3455:119;3613:3;3640:53;3685:7;3676:6;3665:9;3661:22;3640:53;:::i;:::-;3630:63;;3584:119;3742:3;3769:53;3814:7;3805:6;3794:9;3790:22;3769:53;:::i;:::-;3759:63;;3713:119;3899:3;3888:9;3884:19;3871:33;3931:18;3923:6;3920:30;3917:117;;;3953:79;;:::i;:::-;3917:117;4058:62;4112:7;4103:6;4092:9;4088:22;4058:62;:::i;:::-;4048:72;;3842:288;2610:1527;;;;;;;;;;;:::o;4143:468::-;4208:6;4216;4265:2;4253:9;4244:7;4240:23;4236:32;4233:119;;;4271:79;;:::i;:::-;4233:119;4391:1;4416:53;4461:7;4452:6;4441:9;4437:22;4416:53;:::i;:::-;4406:63;;4362:117;4518:2;4544:50;4586:7;4577:6;4566:9;4562:22;4544:50;:::i;:::-;4534:60;;4489:115;4143:468;;;;;:::o;4617:1343::-;4736:6;4744;4752;4760;4768;4776;4784;4792;4841:3;4829:9;4820:7;4816:23;4812:33;4809:120;;;4848:79;;:::i;:::-;4809:120;4968:1;4993:53;5038:7;5029:6;5018:9;5014:22;4993:53;:::i;:::-;4983:63;;4939:117;5095:2;5121:50;5163:7;5154:6;5143:9;5139:22;5121:50;:::i;:::-;5111:60;;5066:115;5220:2;5246:53;5291:7;5282:6;5271:9;5267:22;5246:53;:::i;:::-;5236:63;;5191:118;5348:2;5374:53;5419:7;5410:6;5399:9;5395:22;5374:53;:::i;:::-;5364:63;;5319:118;5476:3;5503:53;5548:7;5539:6;5528:9;5524:22;5503:53;:::i;:::-;5493:63;;5447:119;5605:3;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5576:119;5734:3;5761:53;5806:7;5797:6;5786:9;5782:22;5761:53;:::i;:::-;5751:63;;5705:119;5863:3;5890:53;5935:7;5926:6;5915:9;5911:22;5890:53;:::i;:::-;5880:63;;5834:119;4617:1343;;;;;;;;;;;:::o;5966:1667::-;6103:6;6111;6119;6127;6135;6143;6151;6159;6167;6216:3;6204:9;6195:7;6191:23;6187:33;6184:120;;;6223:79;;:::i;:::-;6184:120;6343:1;6368:53;6413:7;6404:6;6393:9;6389:22;6368:53;:::i;:::-;6358:63;;6314:117;6470:2;6496:50;6538:7;6529:6;6518:9;6514:22;6496:50;:::i;:::-;6486:60;;6441:115;6595:2;6621:53;6666:7;6657:6;6646:9;6642:22;6621:53;:::i;:::-;6611:63;;6566:118;6723:2;6749:53;6794:7;6785:6;6774:9;6770:22;6749:53;:::i;:::-;6739:63;;6694:118;6851:3;6878:53;6923:7;6914:6;6903:9;6899:22;6878:53;:::i;:::-;6868:63;;6822:119;6980:3;7007:53;7052:7;7043:6;7032:9;7028:22;7007:53;:::i;:::-;6997:63;;6951:119;7109:3;7136:53;7181:7;7172:6;7161:9;7157:22;7136:53;:::i;:::-;7126:63;;7080:119;7238:3;7265:53;7310:7;7301:6;7290:9;7286:22;7265:53;:::i;:::-;7255:63;;7209:119;7395:3;7384:9;7380:19;7367:33;7427:18;7419:6;7416:30;7413:117;;;7449:79;;:::i;:::-;7413:117;7554:62;7608:7;7599:6;7588:9;7584:22;7554:62;:::i;:::-;7544:72;;7338:288;5966:1667;;;;;;;;;;;:::o;7639:474::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:53;8088:7;8079:6;8068:9;8064:22;8043:53;:::i;:::-;8033:63;;7988:118;7639:474;;;;;:::o;8119:::-;8187:6;8195;8244:2;8232:9;8223:7;8219:23;8215:32;8212:119;;;8250:79;;:::i;:::-;8212:119;8370:1;8395:53;8440:7;8431:6;8420:9;8416:22;8395:53;:::i;:::-;8385:63;;8341:117;8497:2;8523:53;8568:7;8559:6;8548:9;8544:22;8523:53;:::i;:::-;8513:63;;8468:118;8119:474;;;;;:::o;8599:345::-;8666:6;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:61;8919:7;8910:6;8899:9;8895:22;8866:61;:::i;:::-;8856:71;;8812:125;8599:345;;;;:::o;8950:1125::-;9056:6;9064;9072;9080;9129:3;9117:9;9108:7;9104:23;9100:33;9097:120;;;9136:79;;:::i;:::-;9097:120;9284:1;9273:9;9269:17;9256:31;9314:18;9306:6;9303:30;9300:117;;;9336:79;;:::i;:::-;9300:117;9441:63;9496:7;9487:6;9476:9;9472:22;9441:63;:::i;:::-;9431:73;;9227:287;9581:2;9570:9;9566:18;9553:32;9612:18;9604:6;9601:30;9598:117;;;9634:79;;:::i;:::-;9598:117;9739:63;9794:7;9785:6;9774:9;9770:22;9739:63;:::i;:::-;9729:73;;9524:288;9851:2;9877:53;9922:7;9913:6;9902:9;9898:22;9877:53;:::i;:::-;9867:63;;9822:118;9979:2;10005:53;10050:7;10041:6;10030:9;10026:22;10005:53;:::i;:::-;9995:63;;9950:118;8950:1125;;;;;;;:::o;10081:118::-;10168:24;10186:5;10168:24;:::i;:::-;10163:3;10156:37;10081:118;;:::o;10205:109::-;10286:21;10301:5;10286:21;:::i;:::-;10281:3;10274:34;10205:109;;:::o;10320:118::-;10407:24;10425:5;10407:24;:::i;:::-;10402:3;10395:37;10320:118;;:::o;10444:157::-;10549:45;10569:24;10587:5;10569:24;:::i;:::-;10549:45;:::i;:::-;10544:3;10537:58;10444:157;;:::o;10607:366::-;10749:3;10770:67;10834:2;10829:3;10770:67;:::i;:::-;10763:74;;10846:93;10935:3;10846:93;:::i;:::-;10964:2;10959:3;10955:12;10948:19;;10607:366;;;:::o;10979:400::-;11139:3;11160:84;11242:1;11237:3;11160:84;:::i;:::-;11153:91;;11253:93;11342:3;11253:93;:::i;:::-;11371:1;11366:3;11362:11;11355:18;;10979:400;;;:::o;11385:366::-;11527:3;11548:67;11612:2;11607:3;11548:67;:::i;:::-;11541:74;;11624:93;11713:3;11624:93;:::i;:::-;11742:2;11737:3;11733:12;11726:19;;11385:366;;;:::o;11757:::-;11899:3;11920:67;11984:2;11979:3;11920:67;:::i;:::-;11913:74;;11996:93;12085:3;11996:93;:::i;:::-;12114:2;12109:3;12105:12;12098:19;;11757:366;;;:::o;12129:::-;12271:3;12292:67;12356:2;12351:3;12292:67;:::i;:::-;12285:74;;12368:93;12457:3;12368:93;:::i;:::-;12486:2;12481:3;12477:12;12470:19;;12129:366;;;:::o;12501:::-;12643:3;12664:67;12728:2;12723:3;12664:67;:::i;:::-;12657:74;;12740:93;12829:3;12740:93;:::i;:::-;12858:2;12853:3;12849:12;12842:19;;12501:366;;;:::o;12873:::-;13015:3;13036:67;13100:2;13095:3;13036:67;:::i;:::-;13029:74;;13112:93;13201:3;13112:93;:::i;:::-;13230:2;13225:3;13221:12;13214:19;;12873:366;;;:::o;13245:::-;13387:3;13408:67;13472:2;13467:3;13408:67;:::i;:::-;13401:74;;13484:93;13573:3;13484:93;:::i;:::-;13602:2;13597:3;13593:12;13586:19;;13245:366;;;:::o;13617:::-;13759:3;13780:67;13844:2;13839:3;13780:67;:::i;:::-;13773:74;;13856:93;13945:3;13856:93;:::i;:::-;13974:2;13969:3;13965:12;13958:19;;13617:366;;;:::o;13989:118::-;14076:24;14094:5;14076:24;:::i;:::-;14071:3;14064:37;13989:118;;:::o;14113:112::-;14196:22;14212:5;14196:22;:::i;:::-;14191:3;14184:35;14113:112;;:::o;14231:663::-;14472:3;14494:148;14638:3;14494:148;:::i;:::-;14487:155;;14652:75;14723:3;14714:6;14652:75;:::i;:::-;14752:2;14747:3;14743:12;14736:19;;14765:75;14836:3;14827:6;14765:75;:::i;:::-;14865:2;14860:3;14856:12;14849:19;;14885:3;14878:10;;14231:663;;;;;:::o;14900:222::-;14993:4;15031:2;15020:9;15016:18;15008:26;;15044:71;15112:1;15101:9;15097:17;15088:6;15044:71;:::i;:::-;14900:222;;;;:::o;15128:775::-;15361:4;15399:3;15388:9;15384:19;15376:27;;15413:71;15481:1;15470:9;15466:17;15457:6;15413:71;:::i;:::-;15494:72;15562:2;15551:9;15547:18;15538:6;15494:72;:::i;:::-;15576;15644:2;15633:9;15629:18;15620:6;15576:72;:::i;:::-;15658;15726:2;15715:9;15711:18;15702:6;15658:72;:::i;:::-;15740:73;15808:3;15797:9;15793:19;15784:6;15740:73;:::i;:::-;15823;15891:3;15880:9;15876:19;15867:6;15823:73;:::i;:::-;15128:775;;;;;;;;;:::o;15909:442::-;16058:4;16096:2;16085:9;16081:18;16073:26;;16109:71;16177:1;16166:9;16162:17;16153:6;16109:71;:::i;:::-;16190:72;16258:2;16247:9;16243:18;16234:6;16190:72;:::i;:::-;16272;16340:2;16329:9;16325:18;16316:6;16272:72;:::i;:::-;15909:442;;;;;;:::o;16357:210::-;16444:4;16482:2;16471:9;16467:18;16459:26;;16495:65;16557:1;16546:9;16542:17;16533:6;16495:65;:::i;:::-;16357:210;;;;:::o;16573:222::-;16666:4;16704:2;16693:9;16689:18;16681:26;;16717:71;16785:1;16774:9;16770:17;16761:6;16717:71;:::i;:::-;16573:222;;;;:::o;16801:1096::-;17112:4;17150:3;17139:9;17135:19;17127:27;;17164:71;17232:1;17221:9;17217:17;17208:6;17164:71;:::i;:::-;17245:72;17313:2;17302:9;17298:18;17289:6;17245:72;:::i;:::-;17327:66;17389:2;17378:9;17374:18;17365:6;17327:66;:::i;:::-;17403:72;17471:2;17460:9;17456:18;17447:6;17403:72;:::i;:::-;17485:73;17553:3;17542:9;17538:19;17529:6;17485:73;:::i;:::-;17568;17636:3;17625:9;17621:19;17612:6;17568:73;:::i;:::-;17651;17719:3;17708:9;17704:19;17695:6;17651:73;:::i;:::-;17734;17802:3;17791:9;17787:19;17778:6;17734:73;:::i;:::-;17817;17885:3;17874:9;17870:19;17861:6;17817:73;:::i;:::-;16801:1096;;;;;;;;;;;;:::o;17903:664::-;18108:4;18146:3;18135:9;18131:19;18123:27;;18160:71;18228:1;18217:9;18213:17;18204:6;18160:71;:::i;:::-;18241:72;18309:2;18298:9;18294:18;18285:6;18241:72;:::i;:::-;18323;18391:2;18380:9;18376:18;18367:6;18323:72;:::i;:::-;18405;18473:2;18462:9;18458:18;18449:6;18405:72;:::i;:::-;18487:73;18555:3;18544:9;18540:19;18531:6;18487:73;:::i;:::-;17903:664;;;;;;;;:::o;18573:545::-;18746:4;18784:3;18773:9;18769:19;18761:27;;18798:71;18866:1;18855:9;18851:17;18842:6;18798:71;:::i;:::-;18879:68;18943:2;18932:9;18928:18;18919:6;18879:68;:::i;:::-;18957:72;19025:2;19014:9;19010:18;19001:6;18957:72;:::i;:::-;19039;19107:2;19096:9;19092:18;19083:6;19039:72;:::i;:::-;18573:545;;;;;;;:::o;19124:419::-;19290:4;19328:2;19317:9;19313:18;19305:26;;19377:9;19371:4;19367:20;19363:1;19352:9;19348:17;19341:47;19405:131;19531:4;19405:131;:::i;:::-;19397:139;;19124:419;;;:::o;19549:::-;19715:4;19753:2;19742:9;19738:18;19730:26;;19802:9;19796:4;19792:20;19788:1;19777:9;19773:17;19766:47;19830:131;19956:4;19830:131;:::i;:::-;19822:139;;19549:419;;;:::o;19974:::-;20140:4;20178:2;20167:9;20163:18;20155:26;;20227:9;20221:4;20217:20;20213:1;20202:9;20198:17;20191:47;20255:131;20381:4;20255:131;:::i;:::-;20247:139;;19974:419;;;:::o;20399:::-;20565:4;20603:2;20592:9;20588:18;20580:26;;20652:9;20646:4;20642:20;20638:1;20627:9;20623:17;20616:47;20680:131;20806:4;20680:131;:::i;:::-;20672:139;;20399:419;;;:::o;20824:::-;20990:4;21028:2;21017:9;21013:18;21005:26;;21077:9;21071:4;21067:20;21063:1;21052:9;21048:17;21041:47;21105:131;21231:4;21105:131;:::i;:::-;21097:139;;20824:419;;;:::o;21249:::-;21415:4;21453:2;21442:9;21438:18;21430:26;;21502:9;21496:4;21492:20;21488:1;21477:9;21473:17;21466:47;21530:131;21656:4;21530:131;:::i;:::-;21522:139;;21249:419;;;:::o;21674:::-;21840:4;21878:2;21867:9;21863:18;21855:26;;21927:9;21921:4;21917:20;21913:1;21902:9;21898:17;21891:47;21955:131;22081:4;21955:131;:::i;:::-;21947:139;;21674:419;;;:::o;22099:::-;22265:4;22303:2;22292:9;22288:18;22280:26;;22352:9;22346:4;22342:20;22338:1;22327:9;22323:17;22316:47;22380:131;22506:4;22380:131;:::i;:::-;22372:139;;22099:419;;;:::o;22524:222::-;22617:4;22655:2;22644:9;22640:18;22632:26;;22668:71;22736:1;22725:9;22721:17;22712:6;22668:71;:::i;:::-;22524:222;;;;:::o;22752:129::-;22786:6;22813:20;;:::i;:::-;22803:30;;22842:33;22870:4;22862:6;22842:33;:::i;:::-;22752:129;;;:::o;22887:75::-;22920:6;22953:2;22947:9;22937:19;;22887:75;:::o;22968:307::-;23029:4;23119:18;23111:6;23108:30;23105:56;;;23141:18;;:::i;:::-;23105:56;23179:29;23201:6;23179:29;:::i;:::-;23171:37;;23263:4;23257;23253:15;23245:23;;22968:307;;;:::o;23281:308::-;23343:4;23433:18;23425:6;23422:30;23419:56;;;23455:18;;:::i;:::-;23419:56;23493:29;23515:6;23493:29;:::i;:::-;23485:37;;23577:4;23571;23567:15;23559:23;;23281:308;;;:::o;23595:169::-;23679:11;23713:6;23708:3;23701:19;23753:4;23748:3;23744:14;23729:29;;23595:169;;;;:::o;23770:148::-;23872:11;23909:3;23894:18;;23770:148;;;;:::o;23924:237::-;23962:3;23981:18;23997:1;23981:18;:::i;:::-;23976:23;;24013:18;24029:1;24013:18;:::i;:::-;24008:23;;24103:1;24097:4;24093:12;24090:1;24087:19;24084:45;;;24109:18;;:::i;:::-;24084:45;24153:1;24150;24146:9;24139:16;;23924:237;;;;:::o;24167:185::-;24207:1;24224:20;24242:1;24224:20;:::i;:::-;24219:25;;24258:20;24276:1;24258:20;:::i;:::-;24253:25;;24297:1;24287:35;;24302:18;;:::i;:::-;24287:35;24344:1;24341;24337:9;24332:14;;24167:185;;;;:::o;24358:348::-;24398:7;24421:20;24439:1;24421:20;:::i;:::-;24416:25;;24455:20;24473:1;24455:20;:::i;:::-;24450:25;;24643:1;24575:66;24571:74;24568:1;24565:81;24560:1;24553:9;24546:17;24542:105;24539:131;;;24650:18;;:::i;:::-;24539:131;24698:1;24695;24691:9;24680:20;;24358:348;;;;:::o;24712:191::-;24752:4;24772:20;24790:1;24772:20;:::i;:::-;24767:25;;24806:20;24824:1;24806:20;:::i;:::-;24801:25;;24845:1;24842;24839:8;24836:34;;;24850:18;;:::i;:::-;24836:34;24895:1;24892;24888:9;24880:17;;24712:191;;;;:::o;24909:96::-;24946:7;24975:24;24993:5;24975:24;:::i;:::-;24964:35;;24909:96;;;:::o;25011:90::-;25045:7;25088:5;25081:13;25074:21;25063:32;;25011:90;;;:::o;25107:77::-;25144:7;25173:5;25162:16;;25107:77;;;:::o;25190:126::-;25227:7;25267:42;25260:5;25256:54;25245:65;;25190:126;;;:::o;25322:77::-;25359:7;25388:5;25377:16;;25322:77;;;:::o;25405:86::-;25440:7;25480:4;25473:5;25469:16;25458:27;;25405:86;;;:::o;25497:154::-;25581:6;25576:3;25571;25558:30;25643:1;25634:6;25629:3;25625:16;25618:27;25497:154;;;:::o;25657:281::-;25740:27;25762:4;25740:27;:::i;:::-;25732:6;25728:40;25870:6;25858:10;25855:22;25834:18;25822:10;25819:34;25816:62;25813:88;;;25881:18;;:::i;:::-;25813:88;25921:10;25917:2;25910:22;25700:238;25657:281;;:::o;25944:79::-;25983:7;26012:5;26001:16;;25944:79;;;:::o;26029:180::-;26077:77;26074:1;26067:88;26174:4;26171:1;26164:15;26198:4;26195:1;26188:15;26215:180;26263:77;26260:1;26253:88;26360:4;26357:1;26350:15;26384:4;26381:1;26374:15;26401:180;26449:77;26446:1;26439:88;26546:4;26543:1;26536:15;26570:4;26567:1;26560:15;26587:117;26696:1;26693;26686:12;26710:117;26819:1;26816;26809:12;26833:117;26942:1;26939;26932:12;26956:117;27065:1;27062;27055:12;27079:102;27120:6;27171:2;27167:7;27162:2;27155:5;27151:14;27147:28;27137:38;;27079:102;;;:::o;27187:173::-;27327:25;27323:1;27315:6;27311:14;27304:49;27187:173;:::o;27366:214::-;27506:66;27502:1;27494:6;27490:14;27483:90;27366:214;:::o;27586:169::-;27726:21;27722:1;27714:6;27710:14;27703:45;27586:169;:::o;27761:167::-;27901:19;27897:1;27889:6;27885:14;27878:43;27761:167;:::o;27934:170::-;28074:22;28070:1;28062:6;28058:14;28051:46;27934:170;:::o;28110:169::-;28250:21;28246:1;28238:6;28234:14;28227:45;28110:169;:::o;28285:161::-;28425:13;28421:1;28413:6;28409:14;28402:37;28285:161;:::o;28452:163::-;28592:15;28588:1;28580:6;28576:14;28569:39;28452:163;:::o;28621:170::-;28761:22;28757:1;28749:6;28745:14;28738:46;28621:170;:::o;28797:122::-;28870:24;28888:5;28870:24;:::i;:::-;28863:5;28860:35;28850:63;;28909:1;28906;28899:12;28850:63;28797:122;:::o;28925:116::-;28995:21;29010:5;28995:21;:::i;:::-;28988:5;28985:32;28975:60;;29031:1;29028;29021:12;28975:60;28925:116;:::o;29047:122::-;29120:24;29138:5;29120:24;:::i;:::-;29113:5;29110:35;29100:63;;29159:1;29156;29149:12;29100:63;29047:122;:::o;29175:::-;29248:24;29266:5;29248:24;:::i;:::-;29241:5;29238:35;29228:63;;29287:1;29284;29277:12;29228:63;29175:122;:::o

Swarm Source

ipfs://158c81f9697cca17395f4f8cb4a63acd62936987dff8307fb3bd3c3c751683a2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.