Contract 0x794bb3470e373131a77a93df72bec1e88edf7bc9

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6bb3778a9356374707271b9d235033eeefd0a79a78293058d20275fe3c705a450x60806040237304162022-01-15 1:40:243 days 20 hrs ago0x35a0d3ee64ecdbe49a9d1350158adeddd09328bb IN  Create: Trade0 MATIC0.0634915230
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Trade

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 polygonscan.com on 2022-01-15
*/

/**
 *Submitted for verification at polygonscan.com on 2021-12-07
*/

/**
 *Submitted for verification at Etherscan.io on 2021-08-27
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;

interface IERC165 {

    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
    */

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @dev Required interface of an ERC721 compliant contract.
*/

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of NFTs in `owner`'s account.
    */

    function balanceOf(address owner) external view returns (uint256 balance);
    
    

    function royaltyFee(uint256 tokenId) external view returns(uint256);
    function getCreator(uint256 tokenId) external view returns(address);

    /**
     * @dev Returns the owner of the NFT specified by `tokenId`.
     */

    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     *
     *
     * Requirements:
     * - `from`, `to` cannot be zero.
     * - `tokenId` must be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this
     * NFT by either {approve} or {setApprovalForAll}.
     */

    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     * Requirements:
     * - If the caller is not `from`, it must be approved to move this NFT by
     * either {approve} or {setApprovalForAll}.
     */

    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value);
    event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    event URI(string _value, uint256 indexed _id);

    /**
        @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
        MUST revert on any other error.
        MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
        After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param _from    Source address
        @param _to      Target address
        @param _id      ID of the token type
        @param _value   Transfer amount
        @param _data    Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
    */

    function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external;

    /**
        @notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if length of `_ids` is not the same as length of `_values`.
        MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient.
        MUST revert on any other error.
        MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
        Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
        After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param _from    Source address
        @param _to      Target address
        @param _ids     IDs of each token type (order and length must match _values array)
        @param _values  Transfer amounts per token type (order and length must match _ids array)
        @param _data    Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to`
    */

    function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external;

    /**
        @notice Get the balance of an account's Tokens.
        @param _owner  The address of the token holder
        @param _id     ID of the Token
        @return        The _owner's balance of the Token type requested
    */

    function balanceOf(address _owner, uint256 _id) external view returns (uint256);
    function royaltyFee(uint256 tokenId) external view returns(uint256);
    function getCreator(uint256 tokenId) external view returns(address);

    /**
        @notice Get the balance of multiple account/token pairs
        @param _owners The addresses of the token holders
        @param _ids    ID of the Tokens
        @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
    */

    function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);


    /**
        @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
        @dev MUST emit the ApprovalForAll event on success.
        @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 Queries the approval status of an operator for a given owner.
        @param _owner     The owner of the Tokens
        @param _operator  Address of authorized operator
        @return           True if the operator is approved, false if not
    */

    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
*/

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);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

library SafeMath {

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */    

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */    

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */    

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */    

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */    

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }
}    

contract TransferProxy {

    function erc721safeTransferFrom(IERC721 token, address from, address to, uint256 tokenId) external  {
        token.safeTransferFrom(from, to, tokenId);
    }

    function erc1155safeTransferFrom(IERC1155 token, address from, address to, uint256 id, uint256 value, bytes calldata data) external  {
        token.safeTransferFrom(from, to, id, value, data);
    }
    
    function erc20safeTransferFrom(IERC20 token, address from, address to, uint256 value) external  {
        require(token.transferFrom(from, to, value), "failure while transferring");
    }   
}

contract Trade {
    using SafeMath for uint256;

    enum BuyingAssetType {ERC1155, ERC721}

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event SellerFee(uint8 sellerFee);
    event BuyerFee(uint8 buyerFee);
    event BuyAsset(address indexed assetOwner , uint256 indexed tokenId, uint256 quantity, address indexed buyer);
    event ExecuteBid(address indexed assetOwner , uint256 indexed tokenId, uint256 quantity, address indexed buyer);

    uint8 private buyerFeePermille;
    uint8 private sellerFeePermille;
    TransferProxy public transferProxy;
    address public owner;

    struct Fee {
        uint platformFee;
        uint assetFee;
        uint royaltyFee;
        uint price;
        address tokenCreator;
    }

    /* An ECDSA signature. */
    struct Sign {
        uint8 v;
        bytes32 r;
        bytes32 s;
    }

    struct Order {
        address seller;
        address buyer;
        address erc20Address;
        address nftAddress;
        BuyingAssetType nftType;
        uint unitPrice;
        uint amount;
        uint tokenId;
        uint qty;
    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    constructor (uint8 _buyerFee, uint8 _sellerFee, TransferProxy _transferProxy) {
        buyerFeePermille = _buyerFee;
        sellerFeePermille = _sellerFee;
        transferProxy = _transferProxy;
        owner = msg.sender;
    }

    function buyerServiceFee() public view virtual returns (uint8) {
        return buyerFeePermille;
    }

    function sellerServiceFee() public view virtual returns (uint8) {
        return sellerFeePermille;
    }

    function setBuyerServiceFee(uint8 _buyerFee) public onlyOwner returns(bool) {
        buyerFeePermille = _buyerFee;
        emit BuyerFee(buyerFeePermille);
        return true;
    }

    function setSellerServiceFee(uint8 _sellerFee) public onlyOwner returns(bool) {
        sellerFeePermille = _sellerFee;
        emit SellerFee(sellerFeePermille);
        return true;
    }

    function ownerTransfership(address newOwner) public onlyOwner returns(bool){
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        return true;
    }

    function getSigner(bytes32 hash, Sign memory sign) internal pure returns(address) {
        return ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), sign.v, sign.r, sign.s);
    }

    function verifySellerSign(address seller, uint256 tokenId, uint amount, address paymentAssetAddress, address assetAddress, Sign memory sign) internal pure {
        bytes32 hash = keccak256(abi.encodePacked(assetAddress,tokenId,paymentAssetAddress,amount));
        require(seller == getSigner(hash, sign), "seller sign verification failed");
    }

    function verifyBuyerSign(address buyer, uint256 tokenId, uint amount, address paymentAssetAddress, address assetAddress, uint qty, Sign memory sign) internal pure {
        bytes32 hash = keccak256(abi.encodePacked(assetAddress,tokenId,paymentAssetAddress,amount,qty));
        require(buyer == getSigner(hash, sign), "buyer sign verification failed");
    }

    function getFees(uint paymentAmt, BuyingAssetType buyingAssetType, address buyingAssetAddress, uint tokenId) public view returns(Fee memory){
        address tokenCreator;
        uint platformFee;
        uint royaltyFee;
        uint assetFee;
        uint royaltyPermille;
        uint price = paymentAmt.mul(1000).div((1000+buyerFeePermille));
        uint buyerFee = paymentAmt.sub(price);
        uint sellerFee = price.mul(sellerFeePermille).div(1000);
        platformFee = buyerFee.add(sellerFee);
        if(buyingAssetType == BuyingAssetType.ERC721) {
            royaltyPermille = ((IERC721(buyingAssetAddress).royaltyFee(tokenId)));
            tokenCreator = ((IERC721(buyingAssetAddress).getCreator(tokenId)));
        }
        if(buyingAssetType == BuyingAssetType.ERC1155)  {
            royaltyPermille = ((IERC1155(buyingAssetAddress).royaltyFee(tokenId)));
            tokenCreator = ((IERC1155(buyingAssetAddress).getCreator(tokenId)));
        }
        royaltyFee = price.mul(royaltyPermille).div(1000);
        assetFee = price.sub(royaltyFee).sub(sellerFee);
        return Fee(platformFee, assetFee, royaltyFee, price, tokenCreator);
    }

    function tradeAsset(Order memory order, Fee memory fee) internal virtual {
        if(order.nftType == BuyingAssetType.ERC721) {
            transferProxy.erc721safeTransferFrom(IERC721(order.nftAddress), order.seller, order.buyer, order.tokenId);
        }
        if(order.nftType == BuyingAssetType.ERC1155)  {
            transferProxy.erc1155safeTransferFrom(IERC1155(order.nftAddress), order.seller, order.buyer, order.tokenId, order.qty, ""); 
        }
        if(fee.platformFee > 0) {
            transferProxy.erc20safeTransferFrom(IERC20(order.erc20Address), order.buyer, owner, fee.platformFee);
        }
        if(fee.royaltyFee > 0) {
            transferProxy.erc20safeTransferFrom(IERC20(order.erc20Address), order.buyer, fee.tokenCreator, fee.royaltyFee);
        }
        transferProxy.erc20safeTransferFrom(IERC20(order.erc20Address), order.buyer, order.seller, fee.assetFee);
    }

    function buyAsset(Order memory order, Sign memory sign) public returns(bool) {
        Fee memory fee = getFees(order.amount, order.nftType, order.nftAddress, order.tokenId);
        require((fee.price >= order.unitPrice * order.qty), "Paid invalid amount");
        verifySellerSign(order.seller, order.tokenId, order.unitPrice, order.erc20Address, order.nftAddress, sign);
        order.buyer = msg.sender;
        tradeAsset(order, fee);
        emit BuyAsset(order.seller , order.tokenId, order.qty, msg.sender);
        return true;
    }

    function executeBid(Order memory order, Sign memory sign) public returns(bool) {
        Fee memory fee = getFees(order.amount, order.nftType, order.nftAddress, order.tokenId);
        verifyBuyerSign(order.buyer, order.tokenId, order.amount, order.erc20Address, order.nftAddress, order.qty, sign);
        order.seller = msg.sender;
        tradeAsset(order, fee);
        emit ExecuteBid(msg.sender , order.tokenId, order.qty, order.buyer);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint8","name":"_buyerFee","type":"uint8"},{"internalType":"uint8","name":"_sellerFee","type":"uint8"},{"internalType":"contract TransferProxy","name":"_transferProxy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"assetOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"}],"name":"BuyAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"buyerFee","type":"uint8"}],"name":"BuyerFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"assetOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"}],"name":"ExecuteBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"sellerFee","type":"uint8"}],"name":"SellerFee","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"erc20Address","type":"address"},{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"enum Trade.BuyingAssetType","name":"nftType","type":"uint8"},{"internalType":"uint256","name":"unitPrice","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"}],"internalType":"struct Trade.Order","name":"order","type":"tuple"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct Trade.Sign","name":"sign","type":"tuple"}],"name":"buyAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyerServiceFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"erc20Address","type":"address"},{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"enum Trade.BuyingAssetType","name":"nftType","type":"uint8"},{"internalType":"uint256","name":"unitPrice","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"}],"internalType":"struct Trade.Order","name":"order","type":"tuple"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct Trade.Sign","name":"sign","type":"tuple"}],"name":"executeBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"enum Trade.BuyingAssetType","name":"buyingAssetType","type":"uint8"},{"internalType":"address","name":"buyingAssetAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getFees","outputs":[{"components":[{"internalType":"uint256","name":"platformFee","type":"uint256"},{"internalType":"uint256","name":"assetFee","type":"uint256"},{"internalType":"uint256","name":"royaltyFee","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address","name":"tokenCreator","type":"address"}],"internalType":"struct Trade.Fee","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"ownerTransfership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellerServiceFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_buyerFee","type":"uint8"}],"name":"setBuyerServiceFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_sellerFee","type":"uint8"}],"name":"setSellerServiceFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferProxy","outputs":[{"internalType":"contract TransferProxy","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200269738038062002697833981810160405281019062000037919062000125565b826000806101000a81548160ff021916908360ff16021790555081600060016101000a81548160ff021916908360ff16021790555080600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200020f565b6000815190506200010881620001db565b92915050565b6000815190506200011f81620001f5565b92915050565b600080600060608486031215620001415762000140620001d6565b5b600062000151868287016200010e565b935050602062000164868287016200010e565b92505060406200017786828701620000f7565b9150509250925092565b60006200018e82620001a9565b9050919050565b6000620001a28262000181565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b600080fd5b620001e68162000195565b8114620001f257600080fd5b50565b6200020081620001c9565b81146200020c57600080fd5b50565b612478806200021f6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80639c66809d116100665780639c66809d1461015d578063a3667c7b1461017b578063a96b446d146101ab578063b6b49c8a146101db578063f2c2bc761461020b5761009e565b806360085da6146100a35780636e667db3146100c15780636fdc202f146100df5780637f9118a61461010f5780638da5cb5b1461013f575b600080fd5b6100ab61023b565b6040516100b89190611e0d565b60405180910390f35b6100c9610251565b6040516100d69190611c9c565b60405180910390f35b6100f960048036038101906100f4919061162e565b610277565b6040516101069190611b4c565b60405180910390f35b61012960048036038101906101249190611688565b61043f565b6040516101369190611b4c565b60405180910390f35b61014761059d565b6040516101549190611b31565b60405180910390f35b6101656105c3565b6040516101729190611e0d565b60405180910390f35b6101956004803603810190610190919061175e565b6105d9565b6040516101a29190611b4c565b60405180910390f35b6101c560048036038101906101c0919061175e565b6106d5565b6040516101d29190611b4c565b60405180910390f35b6101f560048036038101906101f091906116f7565b6107ce565b6040516102029190611dd7565b60405180910390f35b61022560048036038101906102209190611688565b610bb8565b6040516102329190611b4c565b60405180910390f35b60008060019054906101000a900460ff16905090565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030090611d97565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037090611cd7565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60008061045e8460c00151856080015186606001518760e001516107ce565b90508361010001518460a001516104759190611f39565b816060015110156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611cb7565b60405180910390fd5b6104dd84600001518560e001518660a001518760400151886060015188610cc1565b33846020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061051f8482610d72565b3373ffffffffffffffffffffffffffffffffffffffff168460e00151856000015173ffffffffffffffffffffffffffffffffffffffff167fb10197cef009fd301a90b892d25451c22c3701eb18ee2df1250d31e514fff39487610100015160405161058a9190611df2565b60405180910390a4600191505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900460ff16905090565b60003373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066290611d97565b60405180910390fd5b81600060016101000a81548160ff021916908360ff1602179055507f04e959c7352d9eda8a6d989e4fee25ff0bf44c87386b7259d8500343c4e9992e600060019054906101000a900460ff166040516106c49190611e0d565b60405180910390a160019050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90611d97565b60405180910390fd5b816000806101000a81548160ff021916908360ff1602179055507f1715ed10763088cbfba08a6ecfb6e5894eac73040cb1899d10d3f96ced2bd0ef60008054906101000a900460ff166040516107bd9190611e0d565b60405180910390a160019050919050565b6107d6611412565b60008060008060008061082760008054906101000a900460ff1660ff166103e86108009190611e7a565b61ffff166108196103e88e61114990919063ffffffff16565b6111c490919063ffffffff16565b9050600061083e828d61121c90919063ffffffff16565b9050600061087b6103e861086d600060019054906101000a900460ff1660ff168661114990919063ffffffff16565b6111c490919063ffffffff16565b9050610890818361127590919063ffffffff16565b96506001808111156108a5576108a4612167565b5b8c60018111156108b8576108b7612167565b5b14156109d5578a73ffffffffffffffffffffffffffffffffffffffff1663c57dc2358b6040518263ffffffff1660e01b81526004016108f79190611df2565b60206040518083038186803b15801561090f57600080fd5b505afa158015610923573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094791906116ca565b93508a73ffffffffffffffffffffffffffffffffffffffff1663d48e638a8b6040518263ffffffff1660e01b81526004016109829190611df2565b60206040518083038186803b15801561099a57600080fd5b505afa1580156109ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d2919061165b565b97505b600060018111156109e9576109e8612167565b5b8c60018111156109fc576109fb612167565b5b1415610b19578a73ffffffffffffffffffffffffffffffffffffffff1663c57dc2358b6040518263ffffffff1660e01b8152600401610a3b9190611df2565b60206040518083038186803b158015610a5357600080fd5b505afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8b91906116ca565b93508a73ffffffffffffffffffffffffffffffffffffffff1663d48e638a8b6040518263ffffffff1660e01b8152600401610ac69190611df2565b60206040518083038186803b158015610ade57600080fd5b505afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b16919061165b565b97505b610b406103e8610b32868661114990919063ffffffff16565b6111c490919063ffffffff16565b9550610b6781610b59888661121c90919063ffffffff16565b61121c90919063ffffffff16565b94506040518060a001604052808881526020018681526020018781526020018481526020018973ffffffffffffffffffffffffffffffffffffffff1681525098505050505050505050949350505050565b600080610bd78460c00151856080015186606001518760e001516107ce565b9050610c0184602001518560e001518660c0015187604001518860600151896101000151896112d3565b33846000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610c438482610d72565b836020015173ffffffffffffffffffffffffffffffffffffffff168460e001513373ffffffffffffffffffffffffffffffffffffffff167fec34853c156da04e4792f1c735112ae54e5ed52bac58db5014b26746f306a362876101000151604051610cae9190611df2565b60405180910390a4600191505092915050565b600082868587604051602001610cda9493929190611a5e565b604051602081830303815290604052805190602001209050610cfc8183611387565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090611db7565b60405180910390fd5b50505050505050565b600180811115610d8557610d84612167565b5b82608001516001811115610d9c57610d9b612167565b5b1415610e4657600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f709b9068360600151846000015185602001518660e001516040518563ffffffff1660e01b8152600401610e139493929190611c57565b600060405180830381600087803b158015610e2d57600080fd5b505af1158015610e41573d6000803e3d6000fd5b505050505b60006001811115610e5a57610e59612167565b5b82608001516001811115610e7157610e70612167565b5b1415610f2257600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639c1c2ee98360600151846000015185602001518660e001518761010001516040518663ffffffff1660e01b8152600401610eef959493929190611bac565b600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b505050505b600081600001511115610ff157600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663776062c383604001518460200151600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600001516040518563ffffffff1660e01b8152600401610fbe9493929190611c12565b600060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505b6000816040015111156110a257600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663776062c383604001518460200151846080015185604001516040518563ffffffff1660e01b815260040161106f9493929190611c12565b600060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050505b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663776062c383604001518460200151856000015185602001516040518563ffffffff1660e01b81526004016111139493929190611c12565b600060405180830381600087803b15801561112d57600080fd5b505af1158015611141573d6000803e3d6000fd5b505050505050565b60008083141561115c57600090506111be565b6000828461116a9190611f39565b90508284826111799190611f08565b146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090611d77565b60405180910390fd5b809150505b92915050565b6000808211611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90611d57565b60405180910390fd5b81836112149190611f08565b905092915050565b600082821115611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890611d37565b60405180910390fd5b818361126d9190611f93565b905092915050565b60008082846112849190611eb2565b9050838110156112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090611cf7565b60405180910390fd5b8091505092915050565b600083878688866040516020016112ee959493929190611aac565b6040516020818303038152906040528051906020012090506113108183611387565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490611d17565b60405180910390fd5b5050505050505050565b600060018360405160200161139c9190611b0b565b60405160208183030381529060405280519060200120836000015184602001518560400151604051600081526020016040526040516113de9493929190611b67565b6020604051602081039080840390855afa158015611400573d6000803e3d6000fd5b50505060206040510351905092915050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600081359050611466816123d6565b92915050565b60008151905061147b816123d6565b92915050565b600081359050611490816123ed565b92915050565b6000813590506114a581612404565b92915050565b600061012082840312156114c2576114c16121c5565b5b6114cd610120611e28565b905060006114dd84828501611457565b60008301525060206114f184828501611457565b602083015250604061150584828501611457565b604083015250606061151984828501611457565b606083015250608061152d84828501611496565b60808301525060a0611541848285016115ef565b60a08301525060c0611555848285016115ef565b60c08301525060e0611569848285016115ef565b60e08301525061010061157e848285016115ef565b6101008301525092915050565b6000606082840312156115a1576115a06121c5565b5b6115ab6060611e28565b905060006115bb84828501611619565b60008301525060206115cf84828501611481565b60208301525060406115e384828501611481565b60408301525092915050565b6000813590506115fe81612414565b92915050565b60008151905061161381612414565b92915050565b6000813590506116288161242b565b92915050565b600060208284031215611644576116436121ca565b5b600061165284828501611457565b91505092915050565b600060208284031215611671576116706121ca565b5b600061167f8482850161146c565b91505092915050565b60008061018083850312156116a05761169f6121ca565b5b60006116ae858286016114ab565b9250506101206116c08582860161158b565b9150509250929050565b6000602082840312156116e0576116df6121ca565b5b60006116ee84828501611604565b91505092915050565b60008060008060808587031215611711576117106121ca565b5b600061171f878288016115ef565b945050602061173087828801611496565b935050604061174187828801611457565b9250506060611752878288016115ef565b91505092959194509250565b600060208284031215611774576117736121ca565b5b600061178284828501611619565b91505092915050565b61179481611fc7565b82525050565b6117a381611fc7565b82525050565b6117ba6117b582611fc7565b6120d1565b82525050565b6117c981611fd9565b82525050565b6117d881611fe5565b82525050565b6117ef6117ea82611fe5565b6120e3565b82525050565b6117fe81612034565b82525050565b61180d81612046565b82525050565b61181c81612058565b82525050565b61182b8161206a565b82525050565b600061183e601383611e5e565b9150611849826121ed565b602082019050919050565b6000611861601c83611e6f565b915061186c82612216565b601c82019050919050565b6000611884602683611e5e565b915061188f8261223f565b604082019050919050565b60006118a7601b83611e5e565b91506118b28261228e565b602082019050919050565b60006118ca601e83611e5e565b91506118d5826122b7565b602082019050919050565b60006118ed601e83611e5e565b91506118f8826122e0565b602082019050919050565b6000611910601a83611e5e565b915061191b82612309565b602082019050919050565b6000611933602183611e5e565b915061193e82612332565b604082019050919050565b6000611956602083611e5e565b915061196182612381565b602082019050919050565b6000611979601f83611e5e565b9150611984826123aa565b602082019050919050565b600061199c600083611e4d565b91506119a7826123d3565b600082019050919050565b60a0820160008201516119c86000850182611a1a565b5060208201516119db6020850182611a1a565b5060408201516119ee6040850182611a1a565b506060820151611a016060850182611a1a565b506080820151611a14608085018261178b565b50505050565b611a238161201d565b82525050565b611a328161201d565b82525050565b611a49611a448261201d565b6120ff565b82525050565b611a5881612027565b82525050565b6000611a6a82876117a9565b601482019150611a7a8286611a38565b602082019150611a8a82856117a9565b601482019150611a9a8284611a38565b60208201915081905095945050505050565b6000611ab882886117a9565b601482019150611ac88287611a38565b602082019150611ad882866117a9565b601482019150611ae88285611a38565b602082019150611af88284611a38565b6020820191508190509695505050505050565b6000611b1682611854565b9150611b2282846117de565b60208201915081905092915050565b6000602082019050611b46600083018461179a565b92915050565b6000602082019050611b6160008301846117c0565b92915050565b6000608082019050611b7c60008301876117cf565b611b896020830186611a4f565b611b9660408301856117cf565b611ba360608301846117cf565b95945050505050565b600060c082019050611bc160008301886117f5565b611bce602083018761179a565b611bdb604083018661179a565b611be86060830185611a29565b611bf56080830184611a29565b81810360a0830152611c068161198f565b90509695505050505050565b6000608082019050611c276000830187611804565b611c34602083018661179a565b611c41604083018561179a565b611c4e6060830184611a29565b95945050505050565b6000608082019050611c6c6000830187611813565b611c79602083018661179a565b611c86604083018561179a565b611c936060830184611a29565b95945050505050565b6000602082019050611cb16000830184611822565b92915050565b60006020820190508181036000830152611cd081611831565b9050919050565b60006020820190508181036000830152611cf081611877565b9050919050565b60006020820190508181036000830152611d108161189a565b9050919050565b60006020820190508181036000830152611d30816118bd565b9050919050565b60006020820190508181036000830152611d50816118e0565b9050919050565b60006020820190508181036000830152611d7081611903565b9050919050565b60006020820190508181036000830152611d9081611926565b9050919050565b60006020820190508181036000830152611db081611949565b9050919050565b60006020820190508181036000830152611dd08161196c565b9050919050565b600060a082019050611dec60008301846119b2565b92915050565b6000602082019050611e076000830184611a29565b92915050565b6000602082019050611e226000830184611a4f565b92915050565b6000611e32611e43565b9050611e3e82826120a0565b919050565b6000604051905090565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000611e8582611fef565b9150611e9083611fef565b92508261ffff03821115611ea757611ea6612109565b5b828201905092915050565b6000611ebd8261201d565b9150611ec88361201d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611efd57611efc612109565b5b828201905092915050565b6000611f138261201d565b9150611f1e8361201d565b925082611f2e57611f2d612138565b5b828204905092915050565b6000611f448261201d565b9150611f4f8361201d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611f8857611f87612109565b5b828202905092915050565b6000611f9e8261201d565b9150611fa98361201d565b925082821015611fbc57611fbb612109565b5b828203905092915050565b6000611fd282611ffd565b9050919050565b60008115159050919050565b6000819050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061203f8261207c565b9050919050565b60006120518261207c565b9050919050565b60006120638261207c565b9050919050565b60006120758261207c565b9050919050565b60006120878261208e565b9050919050565b600061209982611ffd565b9050919050565b6120a9826121cf565b810181811067ffffffffffffffff821117156120c8576120c7612196565b5b80604052505050565b60006120dc826120ed565b9050919050565b6000819050919050565b60006120f8826121e0565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f5061696420696e76616c696420616d6f756e7400000000000000000000000000600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f6275796572207369676e20766572696669636174696f6e206661696c65640000600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f73656c6c6572207369676e20766572696669636174696f6e206661696c656400600082015250565b50565b6123df81611fc7565b81146123ea57600080fd5b50565b6123f681611fe5565b811461240157600080fd5b50565b6002811061241157600080fd5b50565b61241d8161201d565b811461242857600080fd5b50565b61243481612027565b811461243f57600080fd5b5056fea26469706673582212207f5f8d3f4a41e3f40f083a6a0e7ab2b5fdd5e5828d80746664c0a8c4314d0a3464736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032000000000000000000000000f08be1cd115cda682d20c1cfbd628d753ab0eae0

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032000000000000000000000000f08be1cd115cda682d20c1cfbd628d753ab0eae0

-----Decoded View---------------
Arg [0] : _buyerFee (uint8): 50
Arg [1] : _sellerFee (uint8): 50
Arg [2] : _transferProxy (address): 0xf08be1cd115cda682d20c1cfbd628d753ab0eae0

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [2] : 000000000000000000000000f08be1cd115cda682d20c1cfbd628d753ab0eae0


Deployed ByteCode Sourcemap

14317:6561:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15982:107;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14897:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16493:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19840:551;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14938:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15869:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16292:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16097:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17718:1187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20399:476;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15982:107;16039:5;16064:17;;;;;;;;;;;16057:24;;15982:107;:::o;14897:34::-;;;;;;;;;;;;;:::o;16493:269::-;16563:4;15550:10;15541:19;;:5;;;;;;;;;;;:19;;;15533:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16607:1:::1;16587:22;;:8;:22;;;;16579:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16696:8;16668:37;;16689:5;;;;;;;;;;;16668:37;;;;;;;;;;;;16724:8;16716:5;;:16;;;;;;;;;;;;;;;;;;16750:4;16743:11;;16493:269:::0;;;:::o;19840:551::-;19911:4;19928:14;19945:69;19953:5;:12;;;19967:5;:13;;;19982:5;:16;;;20000:5;:13;;;19945:7;:69::i;:::-;19928:86;;20065:5;:9;;;20047:5;:15;;;:27;;;;:::i;:::-;20034:3;:9;;;:40;;20025:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20110:106;20127:5;:12;;;20141:5;:13;;;20156:5;:15;;;20173:5;:18;;;20193:5;:16;;;20211:4;20110:16;:106::i;:::-;20241:10;20227:5;:11;;:24;;;;;;;;;;;20262:22;20273:5;20280:3;20262:10;:22::i;:::-;20350:10;20300:61;;20324:5;:13;;;20309:5;:12;;;20300:61;;;20339:5;:9;;;20300:61;;;;;;:::i;:::-;;;;;;;;20379:4;20372:11;;;19840:551;;;;:::o;14938:20::-;;;;;;;;;;;;;:::o;15869:105::-;15925:5;15950:16;;;;;;;;;;;15943:23;;15869:105;:::o;16292:193::-;16364:4;15550:10;15541:19;;:5;;;;;;;;;;;:19;;;15533:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16401:10:::1;16381:17;;:30;;;;;;;;;;;;;;;;;;16427:28;16437:17;;;;;;;;;;;16427:28;;;;;;:::i;:::-;;;;;;;;16473:4;16466:11;;16292:193:::0;;;:::o;16097:187::-;16167:4;15550:10;15541:19;;:5;;;;;;;;;;;:19;;;15533:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16203:9:::1;16184:16;::::0;:28:::1;;;;;;;;;;;;;;;;;;16228:26;16237:16;::::0;::::1;;;;;;;;16228:26;;;;;;:::i;:::-;;;;;;;;16272:4;16265:11;;16097:187:::0;;;:::o;17718:1187::-;17847:10;;:::i;:::-;17869:20;17900:16;17927:15;17953:13;17977:20;18008:10;18021:49;18052:16;;;;;;;;;;18047:21;;:4;:21;;;;:::i;:::-;18021:49;;:20;18036:4;18021:10;:14;;:20;;;;:::i;:::-;:24;;:49;;;;:::i;:::-;18008:62;;18081:13;18097:21;18112:5;18097:10;:14;;:21;;;;:::i;:::-;18081:37;;18129:14;18146:38;18179:4;18146:28;18156:17;;;;;;;;;;;18146:28;;:5;:9;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;18129:55;;18209:23;18222:9;18209:8;:12;;:23;;;;:::i;:::-;18195:37;;18265:22;18246:41;;;;;;;;:::i;:::-;;:15;:41;;;;;;;;:::i;:::-;;;18243:223;;;18332:18;18324:38;;;18363:7;18324:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18304:69;;18413:18;18405:38;;;18444:7;18405:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18388:66;;18243:223;18498:23;18479:42;;;;;;;;:::i;:::-;;:15;:42;;;;;;;;:::i;:::-;;;18476:227;;;18568:18;18559:39;;;18599:7;18559:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18539:70;;18650:18;18641:39;;;18681:7;18641:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18624:67;;18476:227;18726:36;18757:4;18726:26;18736:15;18726:5;:9;;:26;;;;:::i;:::-;:30;;:36;;;;:::i;:::-;18713:49;;18784:36;18810:9;18784:21;18794:10;18784:5;:9;;:21;;;;:::i;:::-;:25;;:36;;;;:::i;:::-;18773:47;;18838:59;;;;;;;;18842:11;18838:59;;;;18855:8;18838:59;;;;18865:10;18838:59;;;;18877:5;18838:59;;;;18884:12;18838:59;;;;;18831:66;;;;;;;;;;17718:1187;;;;;;:::o;20399:476::-;20472:4;20489:14;20506:69;20514:5;:12;;;20528:5;:13;;;20543:5;:16;;;20561:5;:13;;;20506:7;:69::i;:::-;20489:86;;20586:112;20602:5;:11;;;20615:5;:13;;;20630:5;:12;;;20644:5;:18;;;20664:5;:16;;;20682:5;:9;;;20693:4;20586:15;:112::i;:::-;20724:10;20709:5;:12;;:25;;;;;;;;;;;20745:22;20756:5;20763:3;20745:10;:22::i;:::-;20833:5;:11;;;20783:62;;20807:5;:13;;;20794:10;20783:62;;;20822:5;:9;;;20783:62;;;;;;:::i;:::-;;;;;;;;20863:4;20856:11;;;20399:476;;;;:::o;16990:351::-;17156:12;17198;17211:7;17219:19;17239:6;17181:65;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17171:76;;;;;;17156:91;;17276:21;17286:4;17292;17276:9;:21::i;:::-;17266:31;;:6;:31;;;17258:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;17145:196;16990:351;;;;;;:::o;18913:919::-;19017:22;19000:39;;;;;;;;:::i;:::-;;:5;:13;;;:39;;;;;;;;:::i;:::-;;;18997:176;;;19056:13;;;;;;;;;;;:36;;;19101:5;:16;;;19120:5;:12;;;19134:5;:11;;;19147:5;:13;;;19056:105;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18997:176;19203:23;19186:40;;;;;;;;:::i;:::-;;:5;:13;;;:40;;;;;;;;:::i;:::-;;;19183:196;;;19244:13;;;;;;;;;;;:37;;;19291:5;:16;;;19310:5;:12;;;19324:5;:11;;;19337:5;:13;;;19352:5;:9;;;19244:122;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19183:196;19410:1;19392:3;:15;;;:19;19389:151;;;19428:13;;;;;;;;;;;:35;;;19471:5;:18;;;19492:5;:11;;;19505:5;;;;;;;;;;;19512:3;:15;;;19428:100;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19389:151;19570:1;19553:3;:14;;;:18;19550:160;;;19588:13;;;;;;;;;;;:35;;;19631:5;:18;;;19652:5;:11;;;19665:3;:16;;;19683:3;:14;;;19588:110;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19550:160;19720:13;;;;;;;;;;;:35;;;19763:5;:18;;;19784:5;:11;;;19797:5;:12;;;19811:3;:12;;;19720:104;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18913:919;;:::o;12233:220::-;12291:7;12320:1;12315;:6;12311:20;;;12330:1;12323:8;;;;12311:20;12342:9;12358:1;12354;:5;;;;:::i;:::-;12342:17;;12387:1;12382;12378;:5;;;;:::i;:::-;:10;12370:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;12444:1;12437:8;;;12233:220;;;;;:::o;12927:153::-;12985:7;13017:1;13013;:5;13005:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;13071:1;13067;:5;;;;:::i;:::-;13060:12;;12927:153;;;;:::o;11818:158::-;11876:7;11909:1;11904;:6;;11896:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;11967:1;11963;:5;;;;:::i;:::-;11956:12;;11818:158;;;;:::o;11358:179::-;11416:7;11436:9;11452:1;11448;:5;;;;:::i;:::-;11436:17;;11477:1;11472;:6;;11464:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11528:1;11521:8;;;11358:179;;;;:::o;17349:361::-;17523:12;17565;17578:7;17586:19;17606:6;17613:3;17548:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17538:80;;;;;;17523:95;;17646:21;17656:4;17662;17646:9;:21::i;:::-;17637:30;;:5;:30;;;17629:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17512:198;17349:361;;;;;;;:::o;16770:212::-;16843:7;16870:104;16943:4;16890:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;16880:69;;;;;;16951:4;:6;;;16959:4;:6;;;16967:4;:6;;;16870:104;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16863:111;;16770:212;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:139::-;347:5;385:6;372:20;363:29;;401:33;428:5;401:33;:::i;:::-;301:139;;;;:::o;446:177::-;511:5;549:6;536:20;527:29;;565:52;611:5;565:52;:::i;:::-;446:177;;;;:::o;655:1757::-;726:5;770:6;758:9;753:3;749:19;745:32;742:119;;;780:79;;:::i;:::-;742:119;879:23;895:6;879:23;:::i;:::-;870:32;;963:1;1003:49;1048:3;1039:6;1028:9;1024:22;1003:49;:::i;:::-;996:4;989:5;985:16;978:75;912:152;1124:2;1165:49;1210:3;1201:6;1190:9;1186:22;1165:49;:::i;:::-;1158:4;1151:5;1147:16;1140:75;1074:152;1293:2;1334:49;1379:3;1370:6;1359:9;1355:22;1334:49;:::i;:::-;1327:4;1320:5;1316:16;1309:75;1236:159;1460:2;1501:49;1546:3;1537:6;1526:9;1522:22;1501:49;:::i;:::-;1494:4;1487:5;1483:16;1476:75;1405:157;1624:3;1666:68;1730:3;1721:6;1710:9;1706:22;1666:68;:::i;:::-;1659:4;1652:5;1648:16;1641:94;1572:174;1810:3;1852:49;1897:3;1888:6;1877:9;1873:22;1852:49;:::i;:::-;1845:4;1838:5;1834:16;1827:75;1756:157;1974:3;2016:49;2061:3;2052:6;2041:9;2037:22;2016:49;:::i;:::-;2009:4;2002:5;1998:16;1991:75;1923:154;2139:3;2181:49;2226:3;2217:6;2206:9;2202:22;2181:49;:::i;:::-;2174:4;2167:5;2163:16;2156:75;2087:155;2300:3;2344:49;2389:3;2380:6;2369:9;2365:22;2344:49;:::i;:::-;2335:6;2328:5;2324:18;2317:77;2252:153;655:1757;;;;:::o;2443:720::-;2513:5;2557:4;2545:9;2540:3;2536:19;2532:30;2529:117;;;2565:79;;:::i;:::-;2529:117;2664:21;2680:4;2664:21;:::i;:::-;2655:30;;2741:1;2781:47;2824:3;2815:6;2804:9;2800:22;2781:47;:::i;:::-;2774:4;2767:5;2763:16;2756:73;2695:145;2896:2;2937:49;2982:3;2973:6;2962:9;2958:22;2937:49;:::i;:::-;2930:4;2923:5;2919:16;2912:75;2850:148;3054:2;3095:49;3140:3;3131:6;3120:9;3116:22;3095:49;:::i;:::-;3088:4;3081:5;3077:16;3070:75;3008:148;2443:720;;;;:::o;3169:139::-;3215:5;3253:6;3240:20;3231:29;;3269:33;3296:5;3269:33;:::i;:::-;3169:139;;;;:::o;3314:143::-;3371:5;3402:6;3396:13;3387:22;;3418:33;3445:5;3418:33;:::i;:::-;3314:143;;;;:::o;3463:135::-;3507:5;3545:6;3532:20;3523:29;;3561:31;3586:5;3561:31;:::i;:::-;3463:135;;;;:::o;3604:329::-;3663:6;3712:2;3700:9;3691:7;3687:23;3683:32;3680:119;;;3718:79;;:::i;:::-;3680:119;3838:1;3863:53;3908:7;3899:6;3888:9;3884:22;3863:53;:::i;:::-;3853:63;;3809:117;3604:329;;;;:::o;3939:351::-;4009:6;4058:2;4046:9;4037:7;4033:23;4029:32;4026:119;;;4064:79;;:::i;:::-;4026:119;4184:1;4209:64;4265:7;4256:6;4245:9;4241:22;4209:64;:::i;:::-;4199:74;;4155:128;3939:351;;;;:::o;4296:562::-;4407:6;4415;4464:3;4452:9;4443:7;4439:23;4435:33;4432:120;;;4471:79;;:::i;:::-;4432:120;4591:1;4616:75;4683:7;4674:6;4663:9;4659:22;4616:75;:::i;:::-;4606:85;;4562:139;4740:3;4767:74;4833:7;4824:6;4813:9;4809:22;4767:74;:::i;:::-;4757:84;;4711:140;4296:562;;;;;:::o;4864:351::-;4934:6;4983:2;4971:9;4962:7;4958:23;4954:32;4951:119;;;4989:79;;:::i;:::-;4951:119;5109:1;5134:64;5190:7;5181:6;5170:9;5166:22;5134:64;:::i;:::-;5124:74;;5080:128;4864:351;;;;:::o;5221:803::-;5326:6;5334;5342;5350;5399:3;5387:9;5378:7;5374:23;5370:33;5367:120;;;5406:79;;:::i;:::-;5367:120;5526:1;5551:53;5596:7;5587:6;5576:9;5572:22;5551:53;:::i;:::-;5541:63;;5497:117;5653:2;5679:72;5743:7;5734:6;5723:9;5719:22;5679:72;:::i;:::-;5669:82;;5624:137;5800:2;5826:53;5871:7;5862:6;5851:9;5847:22;5826:53;:::i;:::-;5816:63;;5771:118;5928:2;5954:53;5999:7;5990:6;5979:9;5975:22;5954:53;:::i;:::-;5944:63;;5899:118;5221:803;;;;;;;:::o;6030:325::-;6087:6;6136:2;6124:9;6115:7;6111:23;6107:32;6104:119;;;6142:79;;:::i;:::-;6104:119;6262:1;6287:51;6330:7;6321:6;6310:9;6306:22;6287:51;:::i;:::-;6277:61;;6233:115;6030:325;;;;:::o;6361:108::-;6438:24;6456:5;6438:24;:::i;:::-;6433:3;6426:37;6361:108;;:::o;6475:118::-;6562:24;6580:5;6562:24;:::i;:::-;6557:3;6550:37;6475:118;;:::o;6599:157::-;6704:45;6724:24;6742:5;6724:24;:::i;:::-;6704:45;:::i;:::-;6699:3;6692:58;6599:157;;:::o;6762:109::-;6843:21;6858:5;6843:21;:::i;:::-;6838:3;6831:34;6762:109;;:::o;6877:118::-;6964:24;6982:5;6964:24;:::i;:::-;6959:3;6952:37;6877:118;;:::o;7001:157::-;7106:45;7126:24;7144:5;7126:24;:::i;:::-;7106:45;:::i;:::-;7101:3;7094:58;7001:157;;:::o;7164:163::-;7267:53;7314:5;7267:53;:::i;:::-;7262:3;7255:66;7164:163;;:::o;7333:159::-;7434:51;7479:5;7434:51;:::i;:::-;7429:3;7422:64;7333:159;;:::o;7498:161::-;7600:52;7646:5;7600:52;:::i;:::-;7595:3;7588:65;7498:161;;:::o;7665:173::-;7773:58;7825:5;7773:58;:::i;:::-;7768:3;7761:71;7665:173;;:::o;7844:366::-;7986:3;8007:67;8071:2;8066:3;8007:67;:::i;:::-;8000:74;;8083:93;8172:3;8083:93;:::i;:::-;8201:2;8196:3;8192:12;8185:19;;7844:366;;;:::o;8216:402::-;8376:3;8397:85;8479:2;8474:3;8397:85;:::i;:::-;8390:92;;8491:93;8580:3;8491:93;:::i;:::-;8609:2;8604:3;8600:12;8593:19;;8216:402;;;:::o;8624:366::-;8766:3;8787:67;8851:2;8846:3;8787:67;:::i;:::-;8780:74;;8863:93;8952:3;8863:93;:::i;:::-;8981:2;8976:3;8972:12;8965:19;;8624:366;;;:::o;8996:::-;9138:3;9159:67;9223:2;9218:3;9159:67;:::i;:::-;9152:74;;9235:93;9324:3;9235:93;:::i;:::-;9353:2;9348:3;9344:12;9337:19;;8996:366;;;:::o;9368:::-;9510:3;9531:67;9595:2;9590:3;9531:67;:::i;:::-;9524:74;;9607:93;9696:3;9607:93;:::i;:::-;9725:2;9720:3;9716:12;9709:19;;9368:366;;;:::o;9740:::-;9882:3;9903:67;9967:2;9962:3;9903:67;:::i;:::-;9896:74;;9979:93;10068:3;9979:93;:::i;:::-;10097:2;10092:3;10088:12;10081:19;;9740:366;;;:::o;10112:::-;10254:3;10275:67;10339:2;10334:3;10275:67;:::i;:::-;10268:74;;10351:93;10440:3;10351:93;:::i;:::-;10469:2;10464:3;10460:12;10453:19;;10112:366;;;:::o;10484:::-;10626:3;10647:67;10711:2;10706:3;10647:67;:::i;:::-;10640:74;;10723:93;10812:3;10723:93;:::i;:::-;10841:2;10836:3;10832:12;10825:19;;10484:366;;;:::o;10856:::-;10998:3;11019:67;11083:2;11078:3;11019:67;:::i;:::-;11012:74;;11095:93;11184:3;11095:93;:::i;:::-;11213:2;11208:3;11204:12;11197:19;;10856:366;;;:::o;11228:::-;11370:3;11391:67;11455:2;11450:3;11391:67;:::i;:::-;11384:74;;11467:93;11556:3;11467:93;:::i;:::-;11585:2;11580:3;11576:12;11569:19;;11228:366;;;:::o;11600:362::-;11741:3;11762:65;11825:1;11820:3;11762:65;:::i;:::-;11755:72;;11836:93;11925:3;11836:93;:::i;:::-;11954:1;11949:3;11945:11;11938:18;;11600:362;;;:::o;12012:1045::-;12149:4;12144:3;12140:14;12243:4;12236:5;12232:16;12226:23;12262:63;12319:4;12314:3;12310:14;12296:12;12262:63;:::i;:::-;12164:171;12421:4;12414:5;12410:16;12404:23;12440:63;12497:4;12492:3;12488:14;12474:12;12440:63;:::i;:::-;12345:168;12601:4;12594:5;12590:16;12584:23;12620:63;12677:4;12672:3;12668:14;12654:12;12620:63;:::i;:::-;12523:170;12776:4;12769:5;12765:16;12759:23;12795:63;12852:4;12847:3;12843:14;12829:12;12795:63;:::i;:::-;12703:165;12958:4;12951:5;12947:16;12941:23;12977:63;13034:4;13029:3;13025:14;13011:12;12977:63;:::i;:::-;12878:172;12118:939;12012:1045;;:::o;13063:108::-;13140:24;13158:5;13140:24;:::i;:::-;13135:3;13128:37;13063:108;;:::o;13177:118::-;13264:24;13282:5;13264:24;:::i;:::-;13259:3;13252:37;13177:118;;:::o;13301:157::-;13406:45;13426:24;13444:5;13426:24;:::i;:::-;13406:45;:::i;:::-;13401:3;13394:58;13301:157;;:::o;13464:112::-;13547:22;13563:5;13547:22;:::i;:::-;13542:3;13535:35;13464:112;;:::o;13582:679::-;13778:3;13793:75;13864:3;13855:6;13793:75;:::i;:::-;13893:2;13888:3;13884:12;13877:19;;13906:75;13977:3;13968:6;13906:75;:::i;:::-;14006:2;14001:3;13997:12;13990:19;;14019:75;14090:3;14081:6;14019:75;:::i;:::-;14119:2;14114:3;14110:12;14103:19;;14132:75;14203:3;14194:6;14132:75;:::i;:::-;14232:2;14227:3;14223:12;14216:19;;14252:3;14245:10;;13582:679;;;;;;;:::o;14267:820::-;14491:3;14506:75;14577:3;14568:6;14506:75;:::i;:::-;14606:2;14601:3;14597:12;14590:19;;14619:75;14690:3;14681:6;14619:75;:::i;:::-;14719:2;14714:3;14710:12;14703:19;;14732:75;14803:3;14794:6;14732:75;:::i;:::-;14832:2;14827:3;14823:12;14816:19;;14845:75;14916:3;14907:6;14845:75;:::i;:::-;14945:2;14940:3;14936:12;14929:19;;14958:75;15029:3;15020:6;14958:75;:::i;:::-;15058:2;15053:3;15049:12;15042:19;;15078:3;15071:10;;14267:820;;;;;;;;:::o;15093:522::-;15306:3;15328:148;15472:3;15328:148;:::i;:::-;15321:155;;15486:75;15557:3;15548:6;15486:75;:::i;:::-;15586:2;15581:3;15577:12;15570:19;;15606:3;15599:10;;15093:522;;;;:::o;15621:222::-;15714:4;15752:2;15741:9;15737:18;15729:26;;15765:71;15833:1;15822:9;15818:17;15809:6;15765:71;:::i;:::-;15621:222;;;;:::o;15849:210::-;15936:4;15974:2;15963:9;15959:18;15951:26;;15987:65;16049:1;16038:9;16034:17;16025:6;15987:65;:::i;:::-;15849:210;;;;:::o;16065:545::-;16238:4;16276:3;16265:9;16261:19;16253:27;;16290:71;16358:1;16347:9;16343:17;16334:6;16290:71;:::i;:::-;16371:68;16435:2;16424:9;16420:18;16411:6;16371:68;:::i;:::-;16449:72;16517:2;16506:9;16502:18;16493:6;16449:72;:::i;:::-;16531;16599:2;16588:9;16584:18;16575:6;16531:72;:::i;:::-;16065:545;;;;;;;:::o;16616:1002::-;16937:4;16975:3;16964:9;16960:19;16952:27;;16989:87;17073:1;17062:9;17058:17;17049:6;16989:87;:::i;:::-;17086:72;17154:2;17143:9;17139:18;17130:6;17086:72;:::i;:::-;17168;17236:2;17225:9;17221:18;17212:6;17168:72;:::i;:::-;17250;17318:2;17307:9;17303:18;17294:6;17250:72;:::i;:::-;17332:73;17400:3;17389:9;17385:19;17376:6;17332:73;:::i;:::-;17453:9;17447:4;17443:20;17437:3;17426:9;17422:19;17415:49;17481:130;17606:4;17481:130;:::i;:::-;17473:138;;16616:1002;;;;;;;;:::o;17624:581::-;17815:4;17853:3;17842:9;17838:19;17830:27;;17867:85;17949:1;17938:9;17934:17;17925:6;17867:85;:::i;:::-;17962:72;18030:2;18019:9;18015:18;18006:6;17962:72;:::i;:::-;18044;18112:2;18101:9;18097:18;18088:6;18044:72;:::i;:::-;18126;18194:2;18183:9;18179:18;18170:6;18126:72;:::i;:::-;17624:581;;;;;;;:::o;18211:583::-;18403:4;18441:3;18430:9;18426:19;18418:27;;18455:86;18538:1;18527:9;18523:17;18514:6;18455:86;:::i;:::-;18551:72;18619:2;18608:9;18604:18;18595:6;18551:72;:::i;:::-;18633;18701:2;18690:9;18686:18;18677:6;18633:72;:::i;:::-;18715;18783:2;18772:9;18768:18;18759:6;18715:72;:::i;:::-;18211:583;;;;;;;:::o;18800:264::-;18914:4;18952:2;18941:9;18937:18;18929:26;;18965:92;19054:1;19043:9;19039:17;19030:6;18965:92;:::i;:::-;18800:264;;;;:::o;19070:419::-;19236:4;19274:2;19263:9;19259:18;19251:26;;19323:9;19317:4;19313:20;19309:1;19298:9;19294:17;19287:47;19351:131;19477:4;19351:131;:::i;:::-;19343:139;;19070:419;;;:::o;19495:::-;19661:4;19699:2;19688:9;19684:18;19676:26;;19748:9;19742:4;19738:20;19734:1;19723:9;19719:17;19712:47;19776:131;19902:4;19776:131;:::i;:::-;19768:139;;19495:419;;;:::o;19920:::-;20086:4;20124:2;20113:9;20109:18;20101:26;;20173:9;20167:4;20163:20;20159:1;20148:9;20144:17;20137:47;20201:131;20327:4;20201:131;:::i;:::-;20193:139;;19920:419;;;:::o;20345:::-;20511:4;20549:2;20538:9;20534:18;20526:26;;20598:9;20592:4;20588:20;20584:1;20573:9;20569:17;20562:47;20626:131;20752:4;20626:131;:::i;:::-;20618:139;;20345:419;;;:::o;20770:::-;20936:4;20974:2;20963:9;20959:18;20951:26;;21023:9;21017:4;21013:20;21009:1;20998:9;20994:17;20987:47;21051:131;21177:4;21051:131;:::i;:::-;21043:139;;20770:419;;;:::o;21195:::-;21361:4;21399:2;21388:9;21384:18;21376:26;;21448:9;21442:4;21438:20;21434:1;21423:9;21419:17;21412:47;21476:131;21602:4;21476:131;:::i;:::-;21468:139;;21195:419;;;:::o;21620:::-;21786:4;21824:2;21813:9;21809:18;21801:26;;21873:9;21867:4;21863:20;21859:1;21848:9;21844:17;21837:47;21901:131;22027:4;21901:131;:::i;:::-;21893:139;;21620:419;;;:::o;22045:::-;22211:4;22249:2;22238:9;22234:18;22226:26;;22298:9;22292:4;22288:20;22284:1;22273:9;22269:17;22262:47;22326:131;22452:4;22326:131;:::i;:::-;22318:139;;22045:419;;;:::o;22470:::-;22636:4;22674:2;22663:9;22659:18;22651:26;;22723:9;22717:4;22713:20;22709:1;22698:9;22694:17;22687:47;22751:131;22877:4;22751:131;:::i;:::-;22743:139;;22470:419;;;:::o;22895:303::-;23028:4;23066:3;23055:9;23051:19;23043:27;;23080:111;23188:1;23177:9;23173:17;23164:6;23080:111;:::i;:::-;22895:303;;;;:::o;23204:222::-;23297:4;23335:2;23324:9;23320:18;23312:26;;23348:71;23416:1;23405:9;23401:17;23392:6;23348:71;:::i;:::-;23204:222;;;;:::o;23432:214::-;23521:4;23559:2;23548:9;23544:18;23536:26;;23572:67;23636:1;23625:9;23621:17;23612:6;23572:67;:::i;:::-;23432:214;;;;:::o;23652:129::-;23686:6;23713:20;;:::i;:::-;23703:30;;23742:33;23770:4;23762:6;23742:33;:::i;:::-;23652:129;;;:::o;23787:75::-;23820:6;23853:2;23847:9;23837:19;;23787:75;:::o;23868:168::-;23951:11;23985:6;23980:3;23973:19;24025:4;24020:3;24016:14;24001:29;;23868:168;;;;:::o;24042:169::-;24126:11;24160:6;24155:3;24148:19;24200:4;24195:3;24191:14;24176:29;;24042:169;;;;:::o;24217:148::-;24319:11;24356:3;24341:18;;24217:148;;;;:::o;24371:242::-;24410:3;24429:19;24446:1;24429:19;:::i;:::-;24424:24;;24462:19;24479:1;24462:19;:::i;:::-;24457:24;;24555:1;24547:6;24543:14;24540:1;24537:21;24534:47;;;24561:18;;:::i;:::-;24534:47;24605:1;24602;24598:9;24591:16;;24371:242;;;;:::o;24619:305::-;24659:3;24678:20;24696:1;24678:20;:::i;:::-;24673:25;;24712:20;24730:1;24712:20;:::i;:::-;24707:25;;24866:1;24798:66;24794:74;24791:1;24788:81;24785:107;;;24872:18;;:::i;:::-;24785:107;24916:1;24913;24909:9;24902:16;;24619:305;;;;:::o;24930:185::-;24970:1;24987:20;25005:1;24987:20;:::i;:::-;24982:25;;25021:20;25039:1;25021:20;:::i;:::-;25016:25;;25060:1;25050:35;;25065:18;;:::i;:::-;25050:35;25107:1;25104;25100:9;25095:14;;24930:185;;;;:::o;25121:348::-;25161:7;25184:20;25202:1;25184:20;:::i;:::-;25179:25;;25218:20;25236:1;25218:20;:::i;:::-;25213:25;;25406:1;25338:66;25334:74;25331:1;25328:81;25323:1;25316:9;25309:17;25305:105;25302:131;;;25413:18;;:::i;:::-;25302:131;25461:1;25458;25454:9;25443:20;;25121:348;;;;:::o;25475:191::-;25515:4;25535:20;25553:1;25535:20;:::i;:::-;25530:25;;25569:20;25587:1;25569:20;:::i;:::-;25564:25;;25608:1;25605;25602:8;25599:34;;;25613:18;;:::i;:::-;25599:34;25658:1;25655;25651:9;25643:17;;25475:191;;;;:::o;25672:96::-;25709:7;25738:24;25756:5;25738:24;:::i;:::-;25727:35;;25672:96;;;:::o;25774:90::-;25808:7;25851:5;25844:13;25837:21;25826:32;;25774:90;;;:::o;25870:77::-;25907:7;25936:5;25925:16;;25870:77;;;:::o;25953:89::-;25989:7;26029:6;26022:5;26018:18;26007:29;;25953:89;;;:::o;26048:126::-;26085:7;26125:42;26118:5;26114:54;26103:65;;26048:126;;;:::o;26180:77::-;26217:7;26246:5;26235:16;;26180:77;;;:::o;26263:86::-;26298:7;26338:4;26331:5;26327:16;26316:27;;26263:86;;;:::o;26355:142::-;26421:9;26454:37;26485:5;26454:37;:::i;:::-;26441:50;;26355:142;;;:::o;26503:140::-;26567:9;26600:37;26631:5;26600:37;:::i;:::-;26587:50;;26503:140;;;:::o;26649:141::-;26714:9;26747:37;26778:5;26747:37;:::i;:::-;26734:50;;26649:141;;;:::o;26796:147::-;26867:9;26900:37;26931:5;26900:37;:::i;:::-;26887:50;;26796:147;;;:::o;26949:126::-;26999:9;27032:37;27063:5;27032:37;:::i;:::-;27019:50;;26949:126;;;:::o;27081:113::-;27131:9;27164:24;27182:5;27164:24;:::i;:::-;27151:37;;27081:113;;;:::o;27200:281::-;27283:27;27305:4;27283:27;:::i;:::-;27275:6;27271:40;27413:6;27401:10;27398:22;27377:18;27365:10;27362:34;27359:62;27356:88;;;27424:18;;:::i;:::-;27356:88;27464:10;27460:2;27453:22;27243:238;27200:281;;:::o;27487:100::-;27526:7;27555:26;27575:5;27555:26;:::i;:::-;27544:37;;27487:100;;;:::o;27593:79::-;27632:7;27661:5;27650:16;;27593:79;;;:::o;27678:94::-;27717:7;27746:20;27760:5;27746:20;:::i;:::-;27735:31;;27678:94;;;:::o;27778:79::-;27817:7;27846:5;27835:16;;27778:79;;;:::o;27863:180::-;27911:77;27908:1;27901:88;28008:4;28005:1;27998:15;28032:4;28029:1;28022:15;28049:180;28097:77;28094:1;28087:88;28194:4;28191:1;28184:15;28218:4;28215:1;28208:15;28235:180;28283:77;28280:1;28273:88;28380:4;28377:1;28370:15;28404:4;28401:1;28394:15;28421:180;28469:77;28466:1;28459:88;28566:4;28563:1;28556:15;28590:4;28587:1;28580:15;28607:117;28716:1;28713;28706:12;28976:117;29085:1;29082;29075:12;29099:102;29140:6;29191:2;29187:7;29182:2;29175:5;29171:14;29167:28;29157:38;;29099:102;;;:::o;29207:94::-;29240:8;29288:5;29284:2;29280:14;29259:35;;29207:94;;;:::o;29307:169::-;29447:21;29443:1;29435:6;29431:14;29424:45;29307:169;:::o;29482:214::-;29622:66;29618:1;29610:6;29606:14;29599:90;29482:214;:::o;29702:225::-;29842:34;29838:1;29830:6;29826:14;29819:58;29911:8;29906:2;29898:6;29894:15;29887:33;29702:225;:::o;29933:177::-;30073:29;30069:1;30061:6;30057:14;30050:53;29933:177;:::o;30116:180::-;30256:32;30252:1;30244:6;30240:14;30233:56;30116:180;:::o;30302:::-;30442:32;30438:1;30430:6;30426:14;30419:56;30302:180;:::o;30488:176::-;30628:28;30624:1;30616:6;30612:14;30605:52;30488:176;:::o;30670:220::-;30810:34;30806:1;30798:6;30794:14;30787:58;30879:3;30874:2;30866:6;30862:15;30855:28;30670:220;:::o;30896:182::-;31036:34;31032:1;31024:6;31020:14;31013:58;30896:182;:::o;31084:181::-;31224:33;31220:1;31212:6;31208:14;31201:57;31084:181;:::o;31271:114::-;;:::o;31391:122::-;31464:24;31482:5;31464:24;:::i;:::-;31457:5;31454:35;31444:63;;31503:1;31500;31493:12;31444:63;31391:122;:::o;31519:::-;31592:24;31610:5;31592:24;:::i;:::-;31585:5;31582:35;31572:63;;31631:1;31628;31621:12;31572:63;31519:122;:::o;31647:118::-;31739:1;31732:5;31729:12;31719:40;;31755:1;31752;31745:12;31719:40;31647:118;:::o;31771:122::-;31844:24;31862:5;31844:24;:::i;:::-;31837:5;31834:35;31824:63;;31883:1;31880;31873:12;31824:63;31771:122;:::o;31899:118::-;31970:22;31986:5;31970:22;:::i;:::-;31963:5;31960:33;31950:61;;32007:1;32004;31997:12;31950:61;31899:118;:::o

Swarm Source

ipfs://7f5f8d3f4a41e3f40f083a6a0e7ab2b5fdd5e5828d80746664c0a8c4314d0a34
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.